def test_create_badge_certified_mail(self, api): member = Member(user=self.user, role='admin') org = OrganizationFactory(members=[member]) data = self.factory.as_dict() data['kind'] = CERTIFIED with capture_mails() as mails: api.post(url_for('api.organization_badges', org=org), data) # Should have sent one mail to each member of organization members_emails = [m.user.email for m in org.members] assert len(mails) == len(members_emails) assert [m.recipients[0] for m in mails] == members_emails
def test_new_issue_mail(self): user = UserFactory() owner = UserFactory() message = Message(content=faker.sentence(), posted_by=user) issue = Issue.objects.create(subject=DatasetFactory(owner=owner), user=user, title=faker.sentence(), discussion=[message]) with capture_mails() as mails: notify_new_issue(issue.id) # Should have sent one mail to the owner self.assertEqual(len(mails), 1) self.assertEqual(mails[0].recipients[0], owner.email)
def test_create_badge_public_service_mail(self, api): member = Member(user=self.user, role='admin') org = OrganizationFactory(members=[member]) data = self.factory.as_dict() data['kind'] = PUBLIC_SERVICE with capture_mails() as mails: api.post(url_for('api.organization_badges', org=org), data) # do it a second time, no email expected for this one api.post(url_for('api.organization_badges', org=self.organization), data) # Should have sent one mail to each member of organization members_emails = [m.user.email for m in org.members] assert len(mails) == len(members_emails) assert [m.recipients[0] for m in mails] == members_emails
def test_new_discussion_comment_mail(self): owner = UserFactory() poster = UserFactory() commenter = UserFactory() message = Message(content=faker.sentence(), posted_by=poster) new_message = Message(content=faker.sentence(), posted_by=commenter) discussion = Discussion.objects.create( subject=DatasetFactory(owner=owner), user=poster, title=faker.sentence(), discussion=[message, new_message]) with capture_mails() as mails: notify_new_discussion_comment(discussion, message=new_message) # Should have sent one mail to the owner and the other participants # and no mail to the commenter expected_recipients = (owner.email, poster.email) self.assertEqual(len(mails), len(expected_recipients)) for mail in mails: self.assertIn(mail.recipients[0], expected_recipients) self.assertNotIn(commenter.email, mail.recipients)
def test_closed_issue_mail(self): owner = UserFactory() poster = UserFactory() commenter = UserFactory() message = Message(content=faker.sentence(), posted_by=poster) second_message = Message(content=faker.sentence(), posted_by=commenter) closing_message = Message(content=faker.sentence(), posted_by=owner) issue = Issue.objects.create( subject=DatasetFactory(owner=owner), user=poster, title=faker.sentence(), discussion=[message, second_message, closing_message]) # issue = IssueFactory() with capture_mails() as mails: notify_issue_closed(issue.id, message=len(issue.discussion) - 1) # Should have sent one mail to each participant # and no mail to the closer expected_recipients = (poster.email, commenter.email) self.assertEqual(len(mails), len(expected_recipients)) for mail in mails: self.assertIn(mail.recipients[0], expected_recipients) self.assertNotIn(owner.email, mail.recipients)
def test_delete(self): '''It should delete the connected user''' user = self.login() self.assertIsNone(user.deleted) other_user = UserFactory() members = [Member(user=user), Member(user=other_user)] organization = OrganizationFactory(members=members) disc_msg_content = faker.sentence() disc_msg = DiscMsg(content=disc_msg_content, posted_by=user) other_disc_msg_content = faker.sentence() other_disc_msg = DiscMsg(content=other_disc_msg_content, posted_by=other_user) discussion = DiscussionFactory(user=user, discussion=[disc_msg, other_disc_msg]) issue_msg_content = faker.sentence() issue_msg = IssueMsg(content=issue_msg_content, posted_by=user) other_issue_msg_content = faker.sentence() other_issue_msg = IssueMsg(content=other_issue_msg_content, posted_by=other_user) issue = IssueFactory(user=user, discussion=[issue_msg, other_issue_msg]) dataset = DatasetFactory(owner=user) reuse = ReuseFactory(owner=user) resource = CommunityResourceFactory(owner=user) activity = UserCreatedDataset.objects().create(actor=user, related_to=dataset) following = Follow.objects().create(follower=user, following=other_user) followed = Follow.objects().create(follower=other_user, following=user) with capture_mails() as mails: response = self.delete(url_for('api.me')) self.assertEqual(len(mails), 1) self.assertEqual(mails[0].send_to, set([user.email])) self.assertEqual(mails[0].subject, _('Account deletion')) self.assert204(response) user.reload() organization.reload() discussion.reload() issue.reload() dataset.reload() reuse.reload() resource.reload() activity.reload() # The following are deleted with self.assertRaises(Follow.DoesNotExist): following.reload() # The followers are deleted with self.assertRaises(Follow.DoesNotExist): followed.reload() # The personal data of the user are anonymized self.assertEqual(user.email, '{}@deleted'.format(user.id)) self.assertEqual(user.password, None) self.assertEqual(user.active, False) self.assertEqual(user.first_name, 'DELETED') self.assertEqual(user.last_name, 'DELETED') self.assertFalse(bool(user.avatar)) self.assertEqual(user.avatar_url, None) self.assertEqual(user.website, None) self.assertEqual(user.about, None) # The user is marked as deleted self.assertIsNotNone(user.deleted) # The user is removed from his organizations self.assertEqual(len(organization.members), 1) self.assertEqual(organization.members[0].user.id, other_user.id) # The discussions are kept but the messages are anonymized self.assertEqual(len(discussion.discussion), 2) self.assertEqual(discussion.discussion[0].content, 'DELETED') self.assertEqual(discussion.discussion[1].content, other_disc_msg_content) # The issues are kept and the messages are not anonymized self.assertEqual(len(issue.discussion), 2) self.assertEqual(issue.discussion[0].content, issue_msg_content) self.assertEqual(issue.discussion[1].content, other_issue_msg_content) # The datasets are unchanged self.assertEqual(dataset.owner, user) # The reuses are unchanged self.assertEqual(reuse.owner, user) # The community resources are unchanged self.assertEqual(resource.owner, user) # The activities are unchanged self.assertEqual(activity.actor, user)