1- import { test , expect } from '@/e2e/helper' ;
1+ import { expect , test } from '@/e2e/helper' ;
2+ import { http , HttpResponse } from 'msw' ;
23
34test . describe ( 'Acceptance | /crates/:crate_id/reverse_dependencies' , { tag : '@acceptance' } , ( ) => {
4- test . beforeEach ( async ( { page, mirage } ) => {
5- await page . addInitScript ( ( ) => {
6- globalThis . foo = { name : 'foo' } ;
7- globalThis . bar = { name : 'bar' } ;
8- globalThis . baz = { name : 'baz' } ;
9- } ) ;
10- await mirage . addHook ( server => {
11- console . log ( '[>>>] mirage' ) ;
12- let foo = server . create ( 'crate' , globalThis . foo ) ;
13- server . create ( 'version' , { crate : foo } ) ;
14-
15- let bar = server . create ( 'crate' , globalThis . bar ) ;
16- server . create ( 'version' , { crate : bar } ) ;
17-
18- let baz = server . create ( 'crate' , globalThis . baz ) ;
19- server . create ( 'version' , { crate : baz } ) ;
20-
21- server . create ( 'dependency' , { crate : foo , version : bar . versions . models [ 0 ] } ) ;
22- server . create ( 'dependency' , { crate : foo , version : baz . versions . models [ 0 ] } ) ;
23-
24- globalThis . foo = foo ;
25- globalThis . bar = bar ;
26- globalThis . baz = baz ;
27- } ) ;
28-
29- // this allows us to evaluate the name before goingo to the actual page
30- await page . goto ( 'about:blank' ) ;
31- } ) ;
5+ function prepare ( msw ) {
6+ let foo = msw . db . crate . create ( { name : 'foo' } ) ;
7+ msw . db . version . create ( { crate : foo } ) ;
8+
9+ let bar = msw . db . crate . create ( { name : 'bar' } ) ;
10+ let barV = msw . db . version . create ( { crate : bar } ) ;
11+
12+ let baz = msw . db . crate . create ( { name : 'baz' } ) ;
13+ let bazV = msw . db . version . create ( { crate : baz } ) ;
14+
15+ msw . db . dependency . create ( { crate : foo , version : barV } ) ;
16+ msw . db . dependency . create ( { crate : foo , version : bazV } ) ;
17+
18+ return { foo, bar, baz } ;
19+ }
3220
33- test ( 'shows a list of crates depending on the selected crate' , async ( { page } ) => {
34- const foo = await page . evaluate ( ( ) => globalThis . foo ) ;
21+ test ( 'shows a list of crates depending on the selected crate' , async ( { page, msw } ) => {
22+ let { foo, bar , baz } = prepare ( msw ) ;
3523
3624 await page . goto ( `/crates/${ foo . name } /reverse_dependencies` ) ;
3725 await expect ( page ) . toHaveURL ( `/crates/${ foo . name } /reverse_dependencies` ) ;
3826
39- const { bar, baz } = await page . evaluate ( ( ) => {
40- const val = item => ( { name : item . name , description : item . description } ) ;
41- return { bar : val ( bar ) , baz : val ( baz ) } ;
42- } ) ;
43-
4427 await expect ( page . locator ( '[data-test-row]' ) ) . toHaveCount ( 2 ) ;
45- const row0 = page . locator ( '[data-test-row="0"]' ) ;
46- await expect ( row0 . locator ( '[data-test-crate-name]' ) ) . toHaveText ( bar . name ) ;
47- await expect ( row0 . locator ( '[data-test-description]' ) ) . toHaveText ( bar . description ) ;
48- const row1 = page . locator ( '[data-test-row="1"]' ) ;
28+ const row1 = page . locator ( '[data-test-row="0"]' ) ;
4929 await expect ( row1 . locator ( '[data-test-crate-name]' ) ) . toHaveText ( baz . name ) ;
5030 await expect ( row1 . locator ( '[data-test-description]' ) ) . toHaveText ( baz . description ) ;
31+ const row0 = page . locator ( '[data-test-row="1"]' ) ;
32+ await expect ( row0 . locator ( '[data-test-crate-name]' ) ) . toHaveText ( bar . name ) ;
33+ await expect ( row0 . locator ( '[data-test-description]' ) ) . toHaveText ( bar . description ) ;
5134 } ) ;
5235
53- test ( 'supports pagination' , async ( { page, mirage } ) => {
54- await mirage . addHook ( server => {
55- let foo = globalThis . foo ;
36+ test ( 'supports pagination' , async ( { page, msw } ) => {
37+ let { foo } = prepare ( msw ) ;
5638
57- for ( let i = 0 ; i < 20 ; i ++ ) {
58- let crate = server . create ( 'crate' ) ;
59- let version = server . create ( 'version' , { crate } ) ;
60- server . create ( 'dependency' , { crate : foo , version } ) ;
61- }
62- } ) ;
39+ for ( let i = 0 ; i < 20 ; i ++ ) {
40+ let crate = msw . db . crate . create ( ) ;
41+ let version = msw . db . version . create ( { crate } ) ;
42+ msw . db . dependency . create ( { crate : foo , version } ) ;
43+ }
6344
6445 const row = page . locator ( '[data-test-row]' ) ;
6546 const currentRows = page . locator ( '[data-test-current-rows]' ) ;
6647 const totalRows = page . locator ( '[data-test-total-rows]' ) ;
6748
68- const foo = await page . evaluate ( ( ) => globalThis . foo ) ;
6949 await page . goto ( `/crates/${ foo . name } /reverse_dependencies` ) ;
7050 await expect ( page ) . toHaveURL ( `/crates/${ foo . name } /reverse_dependencies` ) ;
7151 await expect ( row ) . toHaveCount ( 10 ) ;
@@ -85,12 +65,11 @@ test.describe('Acceptance | /crates/:crate_id/reverse_dependencies', { tag: '@ac
8565 await expect ( totalRows ) . toHaveText ( '22' ) ;
8666 } ) ;
8767
88- test ( 'shows a generic error if the server is broken' , async ( { page, mirage } ) => {
89- await mirage . addHook ( server => {
90- server . get ( '/api/v1/crates/:crate_id/reverse_dependencies' , { } , 500 ) ;
91- } ) ;
68+ test ( 'shows a generic error if the server is broken' , async ( { page, msw } ) => {
69+ let { foo } = prepare ( msw ) ;
9270
93- const foo = await page . evaluate ( ( ) => globalThis . foo ) ;
71+ let error = HttpResponse . json ( { } , { status : 500 } ) ;
72+ await msw . worker . use ( http . get ( '/api/v1/crates/:crate_id/reverse_dependencies' , ( ) => error ) ) ;
9473
9574 await page . goto ( `/crates/${ foo . name } /reverse_dependencies` ) ;
9675 await expect ( page ) . toHaveURL ( '/' ) ;
@@ -99,13 +78,12 @@ test.describe('Acceptance | /crates/:crate_id/reverse_dependencies', { tag: '@ac
9978 ) ;
10079 } ) ;
10180
102- test ( 'shows a detailed error if available' , async ( { page, mirage } ) => {
103- await mirage . addHook ( server => {
104- let payload = { errors : [ { detail : 'cannot request more than 100 items' } ] } ;
105- server . get ( '/api/v1/crates/:crate_id/reverse_dependencies' , payload , 400 ) ;
106- } ) ;
81+ test ( 'shows a detailed error if available' , async ( { page, msw } ) => {
82+ let { foo } = prepare ( msw ) ;
10783
108- const foo = await page . evaluate ( ( ) => globalThis . foo ) ;
84+ let payload = { errors : [ { detail : 'cannot request more than 100 items' } ] } ;
85+ let error = HttpResponse . json ( payload , { status : 400 } ) ;
86+ await msw . worker . use ( http . get ( '/api/v1/crates/:crate_id/reverse_dependencies' , ( ) => error ) ) ;
10987
11088 await page . goto ( `/crates/${ foo . name } /reverse_dependencies` ) ;
11189 await expect ( page ) . toHaveURL ( '/' ) ;
0 commit comments