1+ import { defer } from '@/e2e/deferred' ;
12import { expect , test } from '@/e2e/helper' ;
3+ import { http , HttpResponse } from 'msw' ;
24
35test . describe ( 'Route: crate.delete' , { tag : '@routes' } , ( ) => {
4- async function prepare ( { mirage } ) {
5- await mirage . addHook ( server => {
6- let user = server . create ( 'user' ) ;
6+ async function prepare ( msw ) {
7+ let user = msw . db . user . create ( ) ;
78
8- let crate = server . create ( 'crate' , { name : 'foo' } ) ;
9- server . create ( 'version' , { crate } ) ;
10- server . create ( 'crate-ownership' , { crate, user } ) ;
9+ let crate = msw . db . crate . create ( { name : 'foo' } ) ;
10+ msw . db . version . create ( { crate } ) ;
11+ msw . db . crateOwnership . create ( { crate, user } ) ;
1112
12- authenticateAs ( user ) ;
13- } ) ;
13+ await msw . authenticateAs ( user ) ;
1414 }
1515
16- test ( 'unauthenticated' , async ( { mirage, page } ) => {
17- await mirage . addHook ( server => {
18- let crate = server . create ( 'crate' , { name : 'foo' } ) ;
19- server . create ( 'version' , { crate } ) ;
20- } ) ;
16+ test ( 'unauthenticated' , async ( { msw, page } ) => {
17+ let crate = msw . db . crate . create ( { name : 'foo' } ) ;
18+ msw . db . version . create ( { crate } ) ;
2119
2220 await page . goto ( '/crates/foo/delete' ) ;
2321 await expect ( page ) . toHaveURL ( '/crates/foo/delete' ) ;
2422 await expect ( page . locator ( '[data-test-title]' ) ) . toHaveText ( 'This page requires authentication' ) ;
2523 await expect ( page . locator ( '[data-test-login]' ) ) . toBeVisible ( ) ;
2624 } ) ;
2725
28- test ( 'not an owner' , async ( { mirage, page } ) => {
29- await mirage . addHook ( server => {
30- let user1 = server . create ( 'user' ) ;
31- authenticateAs ( user1 ) ;
26+ test ( 'not an owner' , async ( { msw, page } ) => {
27+ let user1 = msw . db . user . create ( ) ;
28+ await msw . authenticateAs ( user1 ) ;
3229
33- let user2 = server . create ( 'user' ) ;
34- let crate = server . create ( 'crate' , { name : 'foo' } ) ;
35- server . create ( 'version' , { crate } ) ;
36- server . create ( 'crate-ownership' , { crate, user : user2 } ) ;
37- } ) ;
30+ let user2 = msw . db . user . create ( ) ;
31+ let crate = msw . db . crate . create ( { name : 'foo' } ) ;
32+ msw . db . version . create ( { crate } ) ;
33+ msw . db . crateOwnership . create ( { crate, user : user2 } ) ;
3834
3935 await page . goto ( '/crates/foo/delete' ) ;
4036 await expect ( page ) . toHaveURL ( '/crates/foo/delete' ) ;
4137 await expect ( page . locator ( '[data-test-title]' ) ) . toHaveText ( 'This page is only accessible by crate owners' ) ;
4238 await expect ( page . locator ( '[data-test-go-back]' ) ) . toBeVisible ( ) ;
4339 } ) ;
4440
45- test ( 'happy path' , async ( { mirage , page, percy } ) => {
46- await prepare ( { mirage } ) ;
41+ test ( 'happy path' , async ( { msw , page, percy } ) => {
42+ await prepare ( msw ) ;
4743
4844 await page . goto ( '/crates/foo/delete' ) ;
4945 await expect ( page ) . toHaveURL ( '/crates/foo/delete' ) ;
@@ -61,16 +57,15 @@ test.describe('Route: crate.delete', { tag: '@routes' }, () => {
6157 let message = 'Crate foo has been successfully deleted.' ;
6258 await expect ( page . locator ( '[data-test-notification-message="success"]' ) ) . toHaveText ( message ) ;
6359
64- let crate = await page . evaluate ( ( ) => server . schema . crates . findBy ( { name : 'foo' } ) ) ;
60+ let crate = msw . db . crate . findFirst ( { where : { name : { equals : 'foo' } } } ) ;
6561 expect ( crate ) . toBeNull ( ) ;
6662 } ) ;
6763
68- test ( 'loading state' , async ( { page, mirage } ) => {
69- await prepare ( { mirage } ) ;
70- await mirage . addHook ( server => {
71- globalThis . deferred = require ( 'rsvp' ) . defer ( ) ;
72- server . delete ( '/api/v1/crates/foo' , ( ) => globalThis . deferred . promise ) ;
73- } ) ;
64+ test ( 'loading state' , async ( { page, msw } ) => {
65+ await prepare ( msw ) ;
66+
67+ let deferred = defer ( ) ;
68+ msw . worker . use ( http . delete ( '/api/v1/crates/:name' , ( ) => deferred . promise ) ) ;
7469
7570 await page . goto ( '/crates/foo/delete' ) ;
7671 await page . fill ( '[data-test-reason]' , "I don't need this crate anymore" ) ;
@@ -80,16 +75,15 @@ test.describe('Route: crate.delete', { tag: '@routes' }, () => {
8075 await expect ( page . locator ( '[data-test-confirmation-checkbox]' ) ) . toBeDisabled ( ) ;
8176 await expect ( page . locator ( '[data-test-delete-button]' ) ) . toBeDisabled ( ) ;
8277
83- await page . evaluate ( async ( ) => globalThis . deferred . resolve ( ) ) ;
78+ deferred . resolve ( ) ;
8479 await expect ( page ) . toHaveURL ( '/' ) ;
8580 } ) ;
8681
87- test ( 'error state' , async ( { page, mirage } ) => {
88- await prepare ( { mirage } ) ;
89- await mirage . addHook ( server => {
90- let payload = { errors : [ { detail : 'only crates without reverse dependencies can be deleted after 72 hours' } ] } ;
91- server . delete ( '/api/v1/crates/foo' , payload , 422 ) ;
92- } ) ;
82+ test ( 'error state' , async ( { page, msw } ) => {
83+ await prepare ( msw ) ;
84+
85+ let payload = { errors : [ { detail : 'only crates without reverse dependencies can be deleted after 72 hours' } ] } ;
86+ msw . worker . use ( http . delete ( '/api/v1/crates/:name' , ( ) => HttpResponse . json ( payload , { status : 422 } ) ) ) ;
9387
9488 await page . goto ( '/crates/foo/delete' ) ;
9589 await page . fill ( '[data-test-reason]' , "I don't need this crate anymore" ) ;
0 commit comments