Beispiel #1
0
    def test_notify_user_issues(self):
        owner = UserFactory()
        dataset = DatasetFactory(owner=owner)

        open_issues = {}
        for i in range(3):
            user = UserFactory()
            message = Message(content=faker.sentence(), posted_by=user)
            issue = Issue.objects.create(subject=dataset,
                                         user=user,
                                         title=faker.sentence(),
                                         discussion=[message])
            open_issues[issue.id] = issue

        # Creating a closed issue that shouldn't show up in response.
        user = UserFactory()
        message = Message(content=faker.sentence(), posted_by=user)
        Issue.objects.create(subject=dataset,
                             user=user,
                             title=faker.sentence(),
                             discussion=[message],
                             closed=datetime.now(),
                             closed_by=user)

        notifications = issues_notifications(owner)

        self.assertEqual(len(notifications), len(open_issues))

        for dt, details in notifications:
            issue = open_issues[details['id']]
            self.assertEqual(details['title'], issue.title)
            self.assertEqual(details['subject']['id'], issue.subject.id)
            self.assertEqual(details['subject']['type'], 'dataset')
Beispiel #2
0
    def test_list_issues_for(self):
        dataset = Dataset.objects.create(title='Test dataset')
        issues = []
        for i in range(3):
            user = UserFactory()
            message = Message(content=faker.sentence(), posted_by=user)
            issue = Issue.objects.create(subject=dataset,
                                         user=user,
                                         title='test issue {}'.format(i),
                                         discussion=[message])
            issues.append(issue)
        # Creating a closed issue that shouldn't show up in response.
        user = UserFactory()
        other_dataset = Dataset.objects.create(title='Other Test dataset')
        message = Message(content=faker.sentence(), posted_by=user)
        issue = Issue.objects.create(subject=other_dataset,
                                     user=user,
                                     title='test issue {}'.format(i),
                                     discussion=[message])

        kwargs = {'for': str(dataset.id)}
        response = self.get(url_for('api.issues', **kwargs))
        self.assert200(response)

        self.assertEqual(len(response.json['data']), len(issues))
Beispiel #3
0
    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)
Beispiel #4
0
    def test_list_issues(self):
        fake = Fake.objects.create()
        open_issues = []
        # closed_issues = []
        for i in range(3):
            user = UserFactory()
            message = Message(content=faker.sentence(), posted_by=user)
            issue = FakeIssue.objects.create(subject=fake,
                                             type=ISSUE_TYPES.keys()[i],
                                             user=user,
                                             discussion=[message])
            open_issues.append(issue)
        for i in range(3):
            user = UserFactory()
            message = Message(content=faker.sentence(), posted_by=user)
            issue = FakeIssue.objects.create(subject=fake,
                                             type=ISSUE_TYPES.keys()[i],
                                             user=user,
                                             discussion=[message],
                                             closed=datetime.now(),
                                             closed_by=user)
            # closed_issues.append(issue)

        response = self.get(url_for('api.fake_issues', id=fake.id))
        self.assert200(response)

        self.assertEqual(len(response.json['data']), len(open_issues))
Beispiel #5
0
    def test_list_with_close_issues(self):
        dataset = Dataset.objects.create(title='Test dataset')
        open_issues = []
        closed_issues = []
        for i in range(3):
            user = UserFactory()
            message = Message(content=faker.sentence(), posted_by=user)
            issue = DatasetIssue.objects.create(
                subject=dataset,
                user=user,
                title='test issue {}'.format(i),
                discussion=[message])
            open_issues.append(issue)
        for i in range(3):
            user = UserFactory()
            message = Message(content=faker.sentence(), posted_by=user)
            issue = DatasetIssue.objects.create(
                subject=dataset,
                user=user,
                title='test issue {}'.format(i),
                discussion=[message],
                closed=datetime.now(),
                closed_by=user)
            closed_issues.append(issue)

        response = self.get(url_for('api.issues', id=dataset.id, closed=True))
        self.assert200(response)

        self.assertEqual(len(response.json), len(open_issues + closed_issues))
Beispiel #6
0
    def test_notify_org_issues(self):
        recipient = UserFactory()
        member = Member(user=recipient, role='editor')
        org = OrganizationFactory(members=[member])
        dataset = DatasetFactory(organization=org)

        open_issues = {}
        for i in range(3):
            user = UserFactory()
            message = Message(content=faker.sentence(), posted_by=user)
            issue = DatasetIssue.objects.create(subject=dataset,
                                                user=user,
                                                title=faker.sentence(),
                                                discussion=[message])
            open_issues[issue.id] = issue
        # Creating a closed issue that shouldn't show up in response.
        user = UserFactory()
        message = Message(content=faker.sentence(), posted_by=user)
        DatasetIssue.objects.create(subject=dataset,
                                    user=user,
                                    title=faker.sentence(),
                                    discussion=[message],
                                    closed=datetime.now(),
                                    closed_by=user)

        notifications = issues_notifications(recipient)

        self.assertEqual(len(notifications), len(open_issues))

        for dt, details in notifications:
            issue = open_issues[details['id']]
            self.assertEqual(details['title'], issue.title)
            self.assertEqual(details['subject']['id'], issue.subject.id)
            self.assertEqual(details['subject']['type'], 'dataset')
Beispiel #7
0
    def test_issues_for_user_with_closed(self):
        owner = UserFactory()
        dataset = DatasetFactory(owner=owner)
        reuse = ReuseFactory(owner=owner)

        open_issues = []
        for i in range(3):
            user = UserFactory()
            message = Message(content=faker.sentence(), posted_by=user)
            open_issues.append(
                DatasetIssue.objects.create(subject=dataset,
                                            user=user,
                                            title=faker.sentence(),
                                            discussion=[message]))
            open_issues.append(
                ReuseIssue.objects.create(subject=reuse,
                                          user=user,
                                          title=faker.sentence(),
                                          discussion=[message]))

        # Creating a closed issue that shouldn't show up in response.
        user = UserFactory()
        message = Message(content=faker.sentence(), posted_by=user)
        DatasetIssue.objects.create(subject=dataset,
                                    user=user,
                                    title=faker.sentence(),
                                    discussion=[message],
                                    closed=datetime.now(),
                                    closed_by=user)

        issues = issues_for(owner, only_open=False)

        self.assertEqual(len(issues), len(open_issues) + 1)
Beispiel #8
0
    def test_list_issues(self):
        dataset = Dataset.objects.create(title='Test dataset')
        open_issues = []
        for i in range(3):
            user = UserFactory()
            message = Message(content=faker.sentence(), posted_by=user)
            issue = DatasetIssue.objects.create(
                subject=dataset,
                user=user,
                title='test issue {}'.format(i),
                discussion=[message])
            open_issues.append(issue)
        # Creating a closed issue that shouldn't show up in response.
        user = UserFactory()
        message = Message(content=faker.sentence(), posted_by=user)
        closed_issues = [
            DatasetIssue.objects.create(subject=dataset,
                                        user=user,
                                        title='test issue {}'.format(i),
                                        discussion=[message],
                                        closed=datetime.now(),
                                        closed_by=user)
        ]

        response = self.get(url_for('api.issues', id=dataset.id))
        self.assert200(response)
        expected_length = len(open_issues + closed_issues)
        self.assertEqual(len(response.json['data']), expected_length)
Beispiel #9
0
    def test_get_issue(self):
        dataset = Dataset.objects.create(title='Test dataset')
        user = UserFactory()
        message = Message(content='bla bla', posted_by=user)
        issue = DatasetIssue.objects.create(
            subject=dataset,
            user=user,
            title='test issue',
            discussion=[message]
        )

        response = self.get(url_for('api.issue', id=issue.id))
        self.assert200(response)

        data = response.json

        self.assertEqual(data['subject'], str(dataset.id))
        self.assertEqual(data['user']['id'], str(user.id))
        self.assertEqual(data['title'], 'test issue')
        self.assertIsNotNone(data['created'])
        self.assertEqual(len(data['discussion']), 1)
        self.assertEqual(data['discussion'][0]['content'], 'bla bla')
        self.assertEqual(data['discussion'][0]['posted_by']['id'],
                         str(user.id))
        self.assertIsNotNone(data['discussion'][0]['posted_on'])
Beispiel #10
0
    def test_close_issue(self):
        fake = Fake.objects.create(metrics={'issues': 1})
        user = UserFactory()
        message = Message(content='bla bla', posted_by=user)
        issue = FakeIssue.objects.create(subject=fake,
                                         type='other',
                                         user=user,
                                         discussion=[message])

        closer = self.login()
        response = self.post(url_for('api.issue', id=issue.id), {
            'comment': 'close bla bla',
            'close': True
        })
        self.assert200(response)

        fake.reload()
        self.assertEqual(fake.metrics['issues'], 0)

        data = response.json

        self.assertEqual(data['type'], 'other')
        self.assertEqual(data['subject'], str(fake.id))
        self.assertEqual(data['user']['id'], str(user.id))
        self.assertIsNotNone(data['created'])
        self.assertIsNotNone(data['closed'])
        self.assertEqual(data['closed_by'], str(closer.id))
        self.assertEqual(len(data['discussion']), 2)
        self.assertEqual(data['discussion'][1]['content'], 'close bla bla')
        self.assertEqual(data['discussion'][1]['posted_by']['id'],
                         str(closer.id))
        self.assertIsNotNone(data['discussion'][1]['posted_on'])
Beispiel #11
0
    def test_add_comment_to_issue(self):
        self.app.config['USE_METRICS'] = True
        dataset = Dataset.objects.create(title='Test dataset')
        user = UserFactory()
        message = Message(content='bla bla', posted_by=user)
        issue = Issue.objects.create(subject=dataset,
                                     user=user,
                                     title='test issue',
                                     discussion=[message])
        on_new_issue.send(issue)  # Updating metrics.

        poster = self.login()
        with assert_emit(on_new_issue_comment):
            response = self.post(url_for('api.issue', id=issue.id),
                                 {'comment': 'new bla bla'})
        self.assert200(response)

        dataset.reload()
        self.assertEqual(dataset.metrics['issues'], 1)

        data = response.json

        self.assertEqual(data['subject']['class'], 'Dataset')
        self.assertEqual(data['subject']['id'], str(dataset.id))
        self.assertEqual(data['user']['id'], str(user.id))
        self.assertEqual(data['title'], 'test issue')
        self.assertIsNotNone(data['created'])
        self.assertIsNone(data['closed'])
        self.assertIsNone(data['closed_by'])
        self.assertEqual(len(data['discussion']), 2)
        self.assertEqual(data['discussion'][1]['content'], 'new bla bla')
        self.assertEqual(data['discussion'][1]['posted_by']['id'],
                         str(poster.id))
        self.assertIsNotNone(data['discussion'][1]['posted_on'])
Beispiel #12
0
    def test_close_issue(self):
        owner = self.login()
        user = UserFactory()
        dataset = Dataset.objects.create(title='Test dataset', owner=owner)
        message = Message(content='bla bla', posted_by=user)
        issue = DatasetIssue.objects.create(subject=dataset,
                                            user=user,
                                            title='test issue',
                                            discussion=[message])
        on_new_issue.send(issue)  # Updating metrics.

        with self.assert_emit(on_issue_closed):
            response = self.post(url_for('api.issue', id=issue.id), {
                'comment': 'close bla bla',
                'close': True
            })
        self.assert200(response)

        dataset.reload()
        self.assertEqual(dataset.metrics['issues'], 0)

        data = response.json

        self.assertEqual(data['subject'], str(dataset.id))
        self.assertEqual(data['user']['id'], str(user.id))
        self.assertEqual(data['title'], 'test issue')
        self.assertIsNotNone(data['created'])
        self.assertIsNotNone(data['closed'])
        self.assertEqual(data['closed_by'], str(owner.id))
        self.assertEqual(len(data['discussion']), 2)
        self.assertEqual(data['discussion'][1]['content'], 'close bla bla')
        self.assertEqual(data['discussion'][1]['posted_by']['id'],
                         str(owner.id))
        self.assertIsNotNone(data['discussion'][1]['posted_on'])
Beispiel #13
0
    def test_issues_for_user_with_org(self):
        user = UserFactory()
        member = Member(user=user, role='editor')
        org = OrganizationFactory(members=[member])
        dataset = DatasetFactory(organization=org)
        reuse = ReuseFactory(organization=org)

        open_issues = []
        for i in range(3):
            sender = UserFactory()
            message = Message(content=faker.sentence(), posted_by=sender)
            open_issues.append(Issue.objects.create(
                subject=dataset,
                user=sender,
                title=faker.sentence(),
                discussion=[message]
            ))
            open_issues.append(Issue.objects.create(
                subject=reuse,
                user=sender,
                title=faker.sentence(),
                discussion=[message]
            ))
        # Creating a closed issue that shouldn't show up in response.
        other_user = UserFactory()
        message = Message(content=faker.sentence(), posted_by=other_user)
        Issue.objects.create(
            subject=dataset,
            user=other_user,
            title=faker.sentence(),
            discussion=[message],
            closed=datetime.now(),
            closed_by=user
        )

        issues = issues_for(user)

        self.assertIsInstance(issues, db.BaseQuerySet)
        self.assertEqual(len(issues), len(open_issues))

        for issue in issues:
            self.assertIn(issue, open_issues)
Beispiel #14
0
    def test_new_issue_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)
        issue = Issue.objects.create(subject=DatasetFactory(owner=owner),
                                     user=poster,
                                     title=faker.sentence(),
                                     discussion=[message, new_message])

        # issue = IssueFactory()
        with capture_mails() as mails:
            notify_new_issue_comment(issue, 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)
Beispiel #15
0
    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)

        # Should have sent one mail to the owner
        self.assertEqual(len(mails), 1)
        self.assertEqual(mails[0].recipients[0], owner.email)
Beispiel #16
0
    def test_close_issue_permissions(self):
        dataset = Dataset.objects.create(title='Test dataset')
        user = UserFactory()
        message = Message(content='bla bla', posted_by=user)
        issue = DatasetIssue.objects.create(subject=dataset,
                                            user=user,
                                            title='test issue',
                                            discussion=[message])
        on_new_issue.send(issue)  # Updating metrics.

        self.login()
        response = self.post(url_for('api.issue', id=issue.id), {
            'comment': 'close bla bla',
            'close': True
        })
        self.assert403(response)

        dataset.reload()
        # Metrics unchanged after attempt to close the discussion.
        self.assertEqual(dataset.metrics['issues'], 1)
Beispiel #17
0
    def test_get_issue(self):
        fake = Fake.objects.create()
        user = UserFactory()
        message = Message(content='bla bla', posted_by=user)
        issue = FakeIssue.objects.create(subject=fake,
                                         type='other',
                                         user=user,
                                         discussion=[message])

        response = self.get(url_for('api.issue', id=issue.id))
        self.assert200(response)

        data = response.json

        self.assertEqual(data['type'], 'other')
        self.assertEqual(data['subject'], str(fake.id))
        self.assertEqual(data['user']['id'], str(user.id))
        self.assertIsNotNone(data['created'])
        self.assertEqual(len(data['discussion']), 1)
        self.assertEqual(data['discussion'][0]['content'], 'bla bla')
        self.assertEqual(data['discussion'][0]['posted_by']['id'],
                         str(user.id))
        self.assertIsNotNone(data['discussion'][0]['posted_on'])