Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 58 additions & 8 deletions app/test/account/consent_backend_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import 'package:pub_dev/account/models.dart';
import 'package:pub_dev/audit/backend.dart';
import 'package:pub_dev/audit/models.dart';
import 'package:pub_dev/fake/backend/fake_auth_provider.dart';
import 'package:pub_dev/fake/backend/fake_email_sender.dart';
import 'package:pub_dev/package/backend.dart';
import 'package:pub_dev/publisher/backend.dart';
import 'package:pub_dev/shared/configuration.dart';
Expand All @@ -23,8 +24,7 @@ import '../shared/test_services.dart';

void main() {
group('Uploader invite', () {
Future<String?> inviteUploader(
{String adminEmail = '[email protected]'}) async {
Future<void> sendUploadInvite({String adminEmail = '[email protected]'}) async {
await withFakeAuthRetryPubApiClient(
email: adminEmail,
pubHostedUrl: activeConfiguration.primarySiteUri.toString(),
Expand All @@ -33,6 +33,11 @@ void main() {
'oxygen', InviteUploaderRequest(email: userAtPubDevEmail));
},
);
}

Future<String?> inviteUploader(
{String adminEmail = '[email protected]'}) async {
await sendUploadInvite(adminEmail: adminEmail);

String? consentId;
await withFakeAuthRequestContext(userAtPubDevEmail, () async {
Expand Down Expand Up @@ -100,6 +105,18 @@ void main() {
'Uploader invite for package `oxygen` expired, `[email protected]` did not respond.');
});

testWithProfile('Duplicate uploader invite', fn: () async {
expect(fakeEmailSender.sentMessages, hasLength(0));

await sendUploadInvite();
expect(fakeEmailSender.sentMessages, hasLength(1));
expect(await dbService.query<Consent>().run().toList(), hasLength(1));

await sendUploadInvite();
expect(fakeEmailSender.sentMessages, hasLength(1));
expect(await dbService.query<Consent>().run().toList(), hasLength(1));
});

testWithProfile(
'Uploader invite denied - original user is no longer admin',
fn: () async {
Expand All @@ -124,12 +141,17 @@ void main() {
});

group('Publisher contact', () {
Future<String?> inviteContact({
String adminEmail = '[email protected]',
}) async {
Future<void> sendContactInvite(
{String adminEmail = '[email protected]'}) async {
final adminClient = await createFakeAuthPubApiClient(email: adminEmail);
await adminClient.updatePublisher('example.com',
UpdatePublisherRequest(contactEmail: '[email protected]'));
}

Future<String?> inviteContact({
String adminEmail = '[email protected]',
}) async {
await sendContactInvite(adminEmail: adminEmail);

String? consentId;
await withFakeAuthRequestContext(userAtPubDevEmail, () async {
Expand Down Expand Up @@ -198,6 +220,18 @@ void main() {
'Contact invite for publisher `example.com` expired, `[email protected]` did not respond.');
});

testWithProfile('Duplicate contact invite', fn: () async {
expect(fakeEmailSender.sentMessages, hasLength(0));

await sendContactInvite();
expect(fakeEmailSender.sentMessages, hasLength(1));
expect(await dbService.query<Consent>().run().toList(), hasLength(1));

await sendContactInvite();
expect(fakeEmailSender.sentMessages, hasLength(1));
expect(await dbService.query<Consent>().run().toList(), hasLength(1));
});

testWithProfile(
'Publisher contact denied - original user is no longer admin',
fn: () async {
Expand All @@ -215,12 +249,16 @@ void main() {
});

group('Publisher member', () {
Future<String?> inviteMember({
String adminEmail = '[email protected]',
}) async {
Future<void> sendMemberInvite({String adminEmail = '[email protected]'}) async {
final adminClient = await createFakeAuthPubApiClient(email: adminEmail);
await adminClient.invitePublisherMember(
'example.com', InviteMemberRequest(email: '[email protected]'));
}

Future<String?> inviteMember({
String adminEmail = '[email protected]',
}) async {
await sendMemberInvite(adminEmail: adminEmail);

String? consentId;
await withFakeAuthRequestContext(userAtPubDevEmail, () async {
Expand Down Expand Up @@ -291,6 +329,18 @@ void main() {
'Member invite for publisher `example.com` expired, `[email protected]` did not respond.');
});

testWithProfile('Duplicate member invite', fn: () async {
expect(fakeEmailSender.sentMessages, hasLength(0));

await sendMemberInvite();
expect(fakeEmailSender.sentMessages, hasLength(1));
expect(await dbService.query<Consent>().run().toList(), hasLength(1));

await sendMemberInvite();
expect(fakeEmailSender.sentMessages, hasLength(1));
expect(await dbService.query<Consent>().run().toList(), hasLength(1));
});

testWithProfile(
'Publisher member denied - original user is no longer admin',
fn: () async {
Expand Down