@@ -12,6 +12,7 @@ import 'package:pub_dev/account/models.dart';
1212import 'package:pub_dev/audit/backend.dart' ;
1313import 'package:pub_dev/audit/models.dart' ;
1414import 'package:pub_dev/fake/backend/fake_auth_provider.dart' ;
15+ import 'package:pub_dev/fake/backend/fake_email_sender.dart' ;
1516import 'package:pub_dev/package/backend.dart' ;
1617import 'package:pub_dev/publisher/backend.dart' ;
1718import 'package:pub_dev/shared/configuration.dart' ;
@@ -23,8 +24,7 @@ import '../shared/test_services.dart';
2324
2425void main () {
2526 group ('Uploader invite' , () {
26- Future <String ?> inviteUploader (
27- {
String adminEmail
= '[email protected] ' })
async {
27+ Future <
void >
sendUploadInvite ({
String adminEmail
= '[email protected] ' })
async {
2828 await withFakeAuthRetryPubApiClient (
2929 email: adminEmail,
3030 pubHostedUrl: activeConfiguration.primarySiteUri.toString (),
@@ -33,6 +33,11 @@ void main() {
3333 'oxygen' , InviteUploaderRequest (email: userAtPubDevEmail));
3434 },
3535 );
36+ }
37+
38+ Future <String ?> inviteUploader (
39+ {
String adminEmail
= '[email protected] ' })
async {
40+ await sendUploadInvite (adminEmail: adminEmail);
3641
3742 String ? consentId;
3843 await withFakeAuthRequestContext (userAtPubDevEmail, () async {
@@ -100,6 +105,18 @@ void main() {
100105 'Uploader invite for package `oxygen` expired, `[email protected] ` did not respond.' );
101106 });
102107
108+ testWithProfile ('Duplicate uploader invite' , fn: () async {
109+ expect (fakeEmailSender.sentMessages, hasLength (0 ));
110+
111+ await sendUploadInvite ();
112+ expect (fakeEmailSender.sentMessages, hasLength (1 ));
113+ expect (await dbService.query <Consent >().run ().toList (), hasLength (1 ));
114+
115+ await sendUploadInvite ();
116+ expect (fakeEmailSender.sentMessages, hasLength (1 ));
117+ expect (await dbService.query <Consent >().run ().toList (), hasLength (1 ));
118+ });
119+
103120 testWithProfile (
104121 'Uploader invite denied - original user is no longer admin' ,
105122 fn: () async {
@@ -124,12 +141,17 @@ void main() {
124141 });
125142
126143 group ('Publisher contact' , () {
127- Future <String ?> inviteContact ({
128- String adminEmail
= '[email protected] ' ,
129- }) async {
144+ Future <void > sendContactInvite (
145+ {
String adminEmail
= '[email protected] ' })
async {
130146 final adminClient = await createFakeAuthPubApiClient (email: adminEmail);
131147 await adminClient.updatePublisher ('example.com' ,
132148 UpdatePublisherRequest (contactEmail
: '[email protected] ' ));
149+ }
150+
151+ Future <String ?> inviteContact ({
152+ String adminEmail
= '[email protected] ' ,
153+ }) async {
154+ await sendContactInvite (adminEmail: adminEmail);
133155
134156 String ? consentId;
135157 await withFakeAuthRequestContext (userAtPubDevEmail, () async {
@@ -198,6 +220,18 @@ void main() {
198220 'Contact invite for publisher `example.com` expired, `[email protected] ` did not respond.' );
199221 });
200222
223+ testWithProfile ('Duplicate contact invite' , fn: () async {
224+ expect (fakeEmailSender.sentMessages, hasLength (0 ));
225+
226+ await sendContactInvite ();
227+ expect (fakeEmailSender.sentMessages, hasLength (1 ));
228+ expect (await dbService.query <Consent >().run ().toList (), hasLength (1 ));
229+
230+ await sendContactInvite ();
231+ expect (fakeEmailSender.sentMessages, hasLength (1 ));
232+ expect (await dbService.query <Consent >().run ().toList (), hasLength (1 ));
233+ });
234+
201235 testWithProfile (
202236 'Publisher contact denied - original user is no longer admin' ,
203237 fn: () async {
@@ -215,12 +249,16 @@ void main() {
215249 });
216250
217251 group ('Publisher member' , () {
218- Future <String ?> inviteMember ({
219- String adminEmail
= '[email protected] ' ,
220- }) async {
252+ Future <
void >
sendMemberInvite ({
String adminEmail
= '[email protected] ' })
async {
221253 final adminClient = await createFakeAuthPubApiClient (email: adminEmail);
222254 await adminClient.invitePublisherMember (
223255 'example.com' ,
InviteMemberRequest (email
: '[email protected] ' ));
256+ }
257+
258+ Future <String ?> inviteMember ({
259+ String adminEmail
= '[email protected] ' ,
260+ }) async {
261+ await sendMemberInvite (adminEmail: adminEmail);
224262
225263 String ? consentId;
226264 await withFakeAuthRequestContext (userAtPubDevEmail, () async {
@@ -291,6 +329,18 @@ void main() {
291329 'Member invite for publisher `example.com` expired, `[email protected] ` did not respond.' );
292330 });
293331
332+ testWithProfile ('Duplicate member invite' , fn: () async {
333+ expect (fakeEmailSender.sentMessages, hasLength (0 ));
334+
335+ await sendMemberInvite ();
336+ expect (fakeEmailSender.sentMessages, hasLength (1 ));
337+ expect (await dbService.query <Consent >().run ().toList (), hasLength (1 ));
338+
339+ await sendMemberInvite ();
340+ expect (fakeEmailSender.sentMessages, hasLength (1 ));
341+ expect (await dbService.query <Consent >().run ().toList (), hasLength (1 ));
342+ });
343+
294344 testWithProfile (
295345 'Publisher member denied - original user is no longer admin' ,
296346 fn: () async {
0 commit comments