1- import { test , expect } from '@/e2e/helper' ;
1+ import { expect , test } from '@/e2e/helper' ;
2+ import { http , HttpResponse } from 'msw' ;
23
34test . describe ( 'Acceptance | /me/pending-invites' , { tag : '@acceptance' } , ( ) => {
45 test ( 'shows "page requires authentication" error when not logged in' , async ( { page } ) => {
@@ -10,38 +11,38 @@ test.describe('Acceptance | /me/pending-invites', { tag: '@acceptance' }, () =>
1011} ) ;
1112
1213test . describe ( 'Acceptance | /me/pending-invites' , { tag : '@acceptance' } , ( ) => {
13- test . beforeEach ( async ( { mirage } ) => {
14- await mirage . addHook ( server => {
15- let inviter = server . create ( 'user' , { name : 'janed' } ) ;
16- let inviter2 = server . create ( 'user' , { name : 'wycats' } ) ;
17-
18- let user = server . create ( 'user' ) ;
19-
20- let nanomsg = server . create ( 'crate' , { name : 'nanomsg' } ) ;
21- server . create ( 'version' , { crate : nanomsg } ) ;
22- server . create ( 'crate-owner-invitation' , {
23- crate : nanomsg ,
24- createdAt : '2016-12-24T12:34:56Z' ,
25- invitee : user ,
26- inviter,
27- } ) ;
28-
29- let ember = server . create ( 'crate' , { name : 'ember-rs' } ) ;
30- server . create ( 'version' , { crate : ember } ) ;
31- server . create ( 'crate-owner-invitation' , {
32- crate : ember ,
33- createdAt : '2020-12-31T12:34:56Z' ,
34- invitee : user ,
35- inviter : inviter2 ,
36- } ) ;
37-
38- authenticateAs ( user ) ;
39-
40- Object . assign ( globalThis , { nanomsg, user } ) ;
14+ async function prepare ( msw ) {
15+ let inviter = msw . db . user . create ( { name : 'janed' } ) ;
16+ let inviter2 = msw . db . user . create ( { name : 'wycats' } ) ;
17+
18+ let user = msw . db . user . create ( ) ;
19+
20+ let nanomsg = msw . db . crate . create ( { name : 'nanomsg' } ) ;
21+ msw . db . version . create ( { crate : nanomsg } ) ;
22+ msw . db . crateOwnerInvitation . create ( {
23+ crate : nanomsg ,
24+ createdAt : '2016-12-24T12:34:56Z' ,
25+ invitee : user ,
26+ inviter,
4127 } ) ;
42- } ) ;
4328
44- test ( 'list all pending crate owner invites' , async ( { page } ) => {
29+ let ember = msw . db . crate . create ( { name : 'ember-rs' } ) ;
30+ msw . db . version . create ( { crate : ember } ) ;
31+ msw . db . crateOwnerInvitation . create ( {
32+ crate : ember ,
33+ createdAt : '2020-12-31T12:34:56Z' ,
34+ invitee : user ,
35+ inviter : inviter2 ,
36+ } ) ;
37+
38+ await msw . authenticateAs ( user ) ;
39+
40+ return { nanomsg, user } ;
41+ }
42+
43+ test ( 'list all pending crate owner invites' , async ( { page, msw } ) => {
44+ await prepare ( msw ) ;
45+
4546 await page . goto ( '/me/pending-invites' ) ;
4647 await expect ( page ) . toHaveURL ( '/me/pending-invites' ) ;
4748 await expect ( page . locator ( '[data-test-invite]' ) ) . toHaveCount ( 2 ) ;
@@ -67,85 +68,102 @@ test.describe('Acceptance | /me/pending-invites', { tag: '@acceptance' }, () =>
6768 await expect ( page . locator ( '[data-test-declined-message]' ) ) . toHaveCount ( 0 ) ;
6869 } ) ;
6970
70- test ( 'shows empty list message' , async ( { page, mirage } ) => {
71- await mirage . addHook ( server => {
72- server . schema [ 'crateOwnerInvitations' ] . all ( ) . destroy ( ) ;
73- } ) ;
71+ test ( 'shows empty list message' , async ( { page, msw } ) => {
72+ await prepare ( msw ) ;
73+ msw . db . crateOwnerInvitation . deleteMany ( { } ) ;
7474
7575 await page . goto ( '/me/pending-invites' ) ;
7676 await expect ( page ) . toHaveURL ( '/me/pending-invites' ) ;
7777 await expect ( page . locator ( '[data-test-invite]' ) ) . toHaveCount ( 0 ) ;
7878 await expect ( page . locator ( '[data-test-empty-state]' ) ) . toBeVisible ( ) ;
7979 } ) ;
8080
81- test ( 'invites can be declined' , async ( { page } ) => {
82- await page . goto ( '/me/pending-invites' ) ;
83- await expect ( page ) . toHaveURL ( '/me/pending-invites' ) ;
81+ test ( 'invites can be declined' , async ( { page, msw } ) => {
82+ let { nanomsg, user } = await prepare ( msw ) ;
8483
85- await page . waitForFunction ( expect => {
86- const { crateOwnerInvitations } : any = server . schema ;
87- const { nanomsg, user } : any = globalThis ;
88- return crateOwnerInvitations . where ( { crateId : nanomsg . id , inviteeId : user . id } ) . length === expect ;
89- } , 1 ) ;
84+ let invites = msw . db . crateOwnerInvitation . findMany ( {
85+ where : {
86+ crate : { id : { equals : nanomsg . id } } ,
87+ invitee : { id : { equals : user . id } } ,
88+ } ,
89+ } ) ;
90+ expect ( invites . length ) . toBe ( 1 ) ;
9091
91- await page . waitForFunction ( expect => {
92- const { crateOwnerships } : any = server . schema ;
93- return crateOwnerships . where ( { crateId : globalThis . nanomsg . id , userId : globalThis . user . id } ) . length === expect ;
94- } , 0 ) ;
92+ let owners = msw . db . crateOwnership . findMany ( {
93+ where : {
94+ crate : { id : { equals : nanomsg . id } } ,
95+ user : { id : { equals : user . id } } ,
96+ } ,
97+ } ) ;
98+ expect ( owners . length ) . toBe ( 0 ) ;
9599
96- const nanomsg = page . locator ( '[data-test-invite="nanomsg"]' ) ;
97- await nanomsg . locator ( '[data-test-decline-button]' ) . click ( ) ;
98- await expect ( nanomsg . and ( page . locator ( '[data-test-declined-message]' ) ) ) . toHaveText (
100+ await page . goto ( '/me/pending-invites' ) ;
101+ await expect ( page ) . toHaveURL ( '/me/pending-invites' ) ;
102+
103+ const nanomsgL = page . locator ( '[data-test-invite="nanomsg"]' ) ;
104+ await nanomsgL . locator ( '[data-test-decline-button]' ) . click ( ) ;
105+ await expect ( nanomsgL . and ( page . locator ( '[data-test-declined-message]' ) ) ) . toHaveText (
99106 'Declined. You have not been added as an owner of crate nanomsg.' ,
100107 ) ;
101- await expect ( nanomsg . locator ( '[data-test-crate-link]' ) ) . toHaveCount ( 0 ) ;
102- await expect ( nanomsg . locator ( '[data-test-inviter-link]' ) ) . toHaveCount ( 0 ) ;
108+ await expect ( nanomsgL . locator ( '[data-test-crate-link]' ) ) . toHaveCount ( 0 ) ;
109+ await expect ( nanomsgL . locator ( '[data-test-inviter-link]' ) ) . toHaveCount ( 0 ) ;
103110
104111 await expect ( page . locator ( '[data-test-error-message]' ) ) . toHaveCount ( 0 ) ;
105112 await expect ( page . locator ( '[data-test-accepted-message]' ) ) . toHaveCount ( 0 ) ;
106113
107- await page . waitForFunction ( expect => {
108- const { crateOwnerInvitations } : any = server . schema ;
109- const { nanomsg, user } : any = globalThis ;
110- return crateOwnerInvitations . where ( { crateId : nanomsg . id , inviteeId : user . id } ) . length === expect ;
111- } , 0 ) ;
112-
113- await page . waitForFunction ( expect => {
114- const { crateOwnerships } : any = server . schema ;
115- const { nanomsg, user } : any = globalThis ;
116- return crateOwnerships . where ( { crateId : nanomsg . id , userId : user . id } ) . length === expect ;
117- } , 0 ) ;
114+ invites = msw . db . crateOwnerInvitation . findMany ( {
115+ where : {
116+ crate : { id : { equals : nanomsg . id } } ,
117+ invitee : { id : { equals : user . id } } ,
118+ } ,
119+ } ) ;
120+ expect ( invites . length ) . toBe ( 0 ) ;
121+
122+ owners = msw . db . crateOwnership . findMany ( {
123+ where : {
124+ crate : { id : { equals : nanomsg . id } } ,
125+ user : { id : { equals : user . id } } ,
126+ } ,
127+ } ) ;
128+ expect ( owners . length ) . toBe ( 0 ) ;
118129 } ) ;
119130
120- test ( 'error message is shown if decline request fails' , async ( { page, mirage } ) => {
131+ test ( 'error message is shown if decline request fails' , async ( { page, msw } ) => {
132+ await prepare ( msw ) ;
133+
121134 await page . goto ( '/me/pending-invites' ) ;
122135 await expect ( page ) . toHaveURL ( '/me/pending-invites' ) ;
123136
124- await page . evaluate ( ( ) => {
125- server . put ( '/api/v1/me/crate_owner_invitations/:crate_id' , { } , 500 ) ;
126- } ) ;
137+ let error = HttpResponse . json ( { } , { status : 500 } ) ;
138+ await msw . worker . use ( http . put ( '/api/v1/me/crate_owner_invitations/:crate_id' , ( ) => error ) ) ;
127139
128140 await page . click ( '[data-test-invite="nanomsg"] [data-test-decline-button]' ) ;
129141 await expect ( page . locator ( '[data-test-notification-message="error"]' ) ) . toContainText ( 'Error in declining invite' ) ;
130142 await expect ( page . locator ( '[data-test-accepted-message]' ) ) . toHaveCount ( 0 ) ;
131143 await expect ( page . locator ( '[data-test-declined-message]' ) ) . toHaveCount ( 0 ) ;
132144 } ) ;
133145
134- test ( 'invites can be accepted' , async ( { page, percy } ) => {
135- await page . goto ( '/me/pending-invites' ) ;
136- await expect ( page ) . toHaveURL ( '/me/pending-invites' ) ;
146+ test ( 'invites can be accepted' , async ( { page, percy, msw } ) => {
147+ let { nanomsg, user } = await prepare ( msw ) ;
137148
138- await page . waitForFunction ( expect => {
139- const { crateOwnerInvitations } : any = server . schema ;
140- const { nanomsg, user } : any = globalThis ;
141- return crateOwnerInvitations . where ( { crateId : nanomsg . id , inviteeId : user . id } ) . length === expect ;
142- } , 1 ) ;
149+ let invites = msw . db . crateOwnerInvitation . findMany ( {
150+ where : {
151+ crate : { id : { equals : nanomsg . id } } ,
152+ invitee : { id : { equals : user . id } } ,
153+ } ,
154+ } ) ;
155+ expect ( invites . length ) . toBe ( 1 ) ;
143156
144- await page . waitForFunction ( expect => {
145- const { crateOwnerships } : any = server . schema ;
146- const { nanomsg, user } : any = globalThis ;
147- return crateOwnerships . where ( { crateId : nanomsg . id , userId : user . id } ) . length === expect ;
148- } , 0 ) ;
157+ let owners = msw . db . crateOwnership . findMany ( {
158+ where : {
159+ crate : { id : { equals : nanomsg . id } } ,
160+ user : { id : { equals : user . id } } ,
161+ } ,
162+ } ) ;
163+ expect ( owners . length ) . toBe ( 0 ) ;
164+
165+ await page . goto ( '/me/pending-invites' ) ;
166+ await expect ( page ) . toHaveURL ( '/me/pending-invites' ) ;
149167
150168 await page . click ( '[data-test-invite="nanomsg"] [data-test-accept-button]' ) ;
151169 await expect ( page . locator ( '[data-test-error-message]' ) ) . toHaveCount ( 0 ) ;
@@ -158,42 +176,45 @@ test.describe('Acceptance | /me/pending-invites', { tag: '@acceptance' }, () =>
158176
159177 await percy . snapshot ( ) ;
160178
161- await page . waitForFunction ( expect => {
162- const { crateOwnerInvitations } : any = server . schema ;
163- const { nanomsg, user } : any = globalThis ;
164- return crateOwnerInvitations . where ( { crateId : nanomsg . id , inviteeId : user . id } ) . length === expect ;
165- } , 0 ) ;
166-
167- await page . waitForFunction ( expect => {
168- const { crateOwnerships } : any = server . schema ;
169- const { nanomsg, user } : any = globalThis ;
170- return crateOwnerships . where ( { crateId : nanomsg . id , userId : user . id } ) . length === expect ;
171- } , 1 ) ;
179+ invites = msw . db . crateOwnerInvitation . findMany ( {
180+ where : {
181+ crate : { id : { equals : nanomsg . id } } ,
182+ invitee : { id : { equals : user . id } } ,
183+ } ,
184+ } ) ;
185+ expect ( invites . length ) . toBe ( 0 ) ;
186+
187+ owners = msw . db . crateOwnership . findMany ( {
188+ where : {
189+ crate : { id : { equals : nanomsg . id } } ,
190+ user : { id : { equals : user . id } } ,
191+ } ,
192+ } ) ;
193+ expect ( owners . length ) . toBe ( 1 ) ;
172194 } ) ;
173195
174- test ( 'error message is shown if accept request fails' , async ( { page } ) => {
196+ test ( 'error message is shown if accept request fails' , async ( { page, msw } ) => {
197+ await prepare ( msw ) ;
198+
175199 await page . goto ( '/me/pending-invites' ) ;
176200 await expect ( page ) . toHaveURL ( '/me/pending-invites' ) ;
177201
178- page . evaluate ( ( ) => {
179- server . put ( '/api/v1/me/crate_owner_invitations/:crate_id' , { } , 500 ) ;
180- } ) ;
202+ let error = HttpResponse . json ( { } , { status : 500 } ) ;
203+ await msw . worker . use ( http . put ( '/api/v1/me/crate_owner_invitations/:crate_id' , ( ) => error ) ) ;
181204
182205 await page . click ( '[data-test-invite="nanomsg"] [data-test-accept-button]' ) ;
183206 await expect ( page . locator ( '[data-test-notification-message="error"]' ) ) . toHaveText ( 'Error in accepting invite' ) ;
184207 await expect ( page . locator ( '[data-test-accepted-message]' ) ) . toHaveCount ( 0 ) ;
185208 await expect ( page . locator ( '[data-test-declined-message]' ) ) . toHaveCount ( 0 ) ;
186209 } ) ;
187210
188- test ( 'specific error message is shown if accept request fails' , async ( { page, mirage } ) => {
211+ test ( 'specific error message is shown if accept request fails' , async ( { page, msw } ) => {
212+ await prepare ( msw ) ;
213+
189214 let errorMessage =
190215 'The invitation to become an owner of the demo_crate crate expired. Please reach out to an owner of the crate to request a new invitation.' ;
191- await page . exposeBinding ( '_errorMessage' , ( ) => errorMessage ) ;
192- await mirage . addHook ( async server => {
193- let errorMessage = await globalThis . _errorMessage ( ) ;
194- let payload = { errors : [ { detail : errorMessage } ] } ;
195- server . put ( '/api/v1/me/crate_owner_invitations/:crate_id' , payload , 410 ) ;
196- } ) ;
216+ let error = HttpResponse . json ( { errors : [ { detail : errorMessage } ] } , { status : 410 } ) ;
217+ await msw . worker . use ( http . put ( '/api/v1/me/crate_owner_invitations/:crate_id' , ( ) => error ) ) ;
197218
198219 await page . goto ( '/me/pending-invites' ) ;
199220 await expect ( page ) . toHaveURL ( '/me/pending-invites' ) ;
0 commit comments