File tree Expand file tree Collapse file tree 3 files changed +57
-1
lines changed
packages/crates-io-msw/handlers Expand file tree Collapse file tree 3 files changed +57
-1
lines changed Original file line number Diff line number Diff line change 1+ import getKeyword from './keywords/get.js' ;
12import listKeywords from './keywords/list.js' ;
23
3- export default [ listKeywords ] ;
4+ export default [ listKeywords , getKeyword ] ;
Original file line number Diff line number Diff line change 1+ import { http , HttpResponse } from 'msw' ;
2+
3+ import { db } from '../../index.js' ;
4+ import { serializeKeyword } from '../../serializers/keyword.js' ;
5+ import { notFound } from '../../utils/handlers.js' ;
6+
7+ export default http . get ( '/api/v1/keywords/:keyword_id' , ( { params } ) => {
8+ let keywordId = params . keyword_id ;
9+ let keyword = db . keyword . findFirst ( { where : { id : { equals : keywordId } } } ) ;
10+ if ( ! keyword ) {
11+ return notFound ( ) ;
12+ }
13+
14+ return HttpResponse . json ( { keyword : serializeKeyword ( keyword ) } ) ;
15+ } ) ;
Original file line number Diff line number Diff line change 1+ import { assert , test } from 'vitest' ;
2+
3+ import { db } from '../../index.js' ;
4+
5+ test ( 'returns 404 for unknown keywords' , async function ( ) {
6+ let response = await fetch ( '/api/v1/keywords/foo' ) ;
7+ assert . strictEqual ( response . status , 404 ) ;
8+ assert . deepEqual ( await response . json ( ) , { errors : [ { detail : 'Not Found' } ] } ) ;
9+ } ) ;
10+
11+ test ( 'returns a keyword object for known keywords' , async function ( ) {
12+ db . keyword . create ( { keyword : 'cli' } ) ;
13+
14+ let response = await fetch ( '/api/v1/keywords/cli' ) ;
15+ assert . strictEqual ( response . status , 200 ) ;
16+ assert . deepEqual ( await response . json ( ) , {
17+ keyword : {
18+ id : 'cli' ,
19+ crates_cnt : 0 ,
20+ keyword : 'cli' ,
21+ } ,
22+ } ) ;
23+ } ) ;
24+
25+ test ( 'calculates `crates_cnt` correctly' , async function ( ) {
26+ let cli = db . keyword . create ( { keyword : 'cli' } ) ;
27+ Array . from ( { length : 7 } , ( ) => db . crate . create ( { keywords : [ cli ] } ) ) ;
28+ let notCli = db . keyword . create ( { keyword : 'not-cli' } ) ;
29+ Array . from ( { length : 3 } , ( ) => db . crate . create ( { keywords : [ notCli ] } ) ) ;
30+
31+ let response = await fetch ( '/api/v1/keywords/cli' ) ;
32+ assert . strictEqual ( response . status , 200 ) ;
33+ assert . deepEqual ( await response . json ( ) , {
34+ keyword : {
35+ id : 'cli' ,
36+ crates_cnt : 7 ,
37+ keyword : 'cli' ,
38+ } ,
39+ } ) ;
40+ } ) ;
You can’t perform that action at this time.
0 commit comments