Ejemplo n.º 1
0
class AppCase(RequiresMocks):
    def setup_app(self):
        self.app = app.test_client()

        # Mock the GitHub API
        self.mock_github = self.create_patch('app.routes.oauth.github.api')
        self.mock_github_api = MagicMock()
        self.mock_github.return_value = self.mock_github_api

        # Mock the Google API
        self.mock_google_user_info = self.create_patch('app.routes.oauth.google.user_info')
        self.mock_google_drive_api = self.create_patch('app.routes.oauth.google.drive_api')
        self.mock_google_drive_api.return_value = MagicMock()

    def teardown_dbs(self):
        Issue.drop_collection()
        User.drop_collection()
        Project.drop_collection()
        Attachment.drop_collection()
        Comment.drop_collection()

    def create_user(self):
        self.test_user = User(
                name='Numpy Ping',
                google_id='12345',
                picture='http://foo.com/image.png',
                email='*****@*****.**'
        )
        self.test_user.save()

    def create_project(self):
        if not hasattr(self, 'test_user'):
            self.create_user()
        self.test_project = Project(
                name='Proj',
                repo='pub/bar',
                author=self.test_user
        )
        self.test_project.save()

    def create_issue(self):
        if not hasattr(self, 'test_project'):
            self.create_project()
        self.test_issue = Issue(
                title='Some important issue',
                project=self.test_project,
                author=self.test_user
        )
        self.test_issue.save()
Ejemplo n.º 2
0
    def test_parse_references(self):
        issue_ = Issue(
                title='Referenced issue',
                project=self.test_project,
                author=self.test_user
        )
        issue_.save()

        self.issue.body = 'Some body text referencing this issue /%s/issues/%s' % (self.test_project.name, issue_.id)

        self.issue.parse_references(self.issue.body)

        # Reload the issue so changes are reflected.
        issue_.reload()

        self.assertEqual(len(self.issue.references), 1)
        self.assertEqual(len(issue_.events), 1)
        self.assertEqual(self.issue.references[0].title, 'Referenced issue')
        self.assertEqual(issue_.events[0].data, {
            'project_slug': self.test_project.slug,
            'referencer_id': self.issue.id,
            'referencer_title': self.issue.title
        })
Ejemplo n.º 3
0
class IssueTest(AppCase):
    def setUp(self):
        self.setup_app()
        self.create_user()
        self.create_project()

        self.mock_current_user = self.create_patch('app.models.user.current_user')
        self.mock_current_user.return_value = self.test_user

        self.issue = Issue(
                title='Some important issue',
                project=self.test_project,
                author=self.test_user
        )
        self.issue.save()

    def tearDown(self):
        self.teardown_dbs()

    def test_db_starting_state(self):
        # Expected to be 1 because we create an issue in the setUp method.
        self.assertEqual(Issue.objects.count(), 1)

    def test_close(self):
        with app.test_request_context():
            self.issue.close()
            self.assertFalse(self.issue.open)
            self.assertEqual(len(self.issue.events), 1)

    def test_close_linked(self):
        self.issue.github_id = 1
        self.issue.linked_url = MagicMock(return_value='foo')
        with app.test_request_context():
            self.issue.close()
            self.mock_github_api.patch.assert_called_with(
                    'foo',
                    data=json.dumps({'state':'closed'})
            )

    def test_reopen(self):
        with app.test_request_context():
            self.issue.reopen()
            self.assertTrue(self.issue.open)
            self.assertEqual(len(self.issue.events), 1)

    def test_reopen_linked(self):
        self.issue.github_id = 1
        self.issue.linked_url = MagicMock(return_value='foo')
        with app.test_request_context():
            self.issue.reopen()
            self.mock_github_api.patch.assert_called_with(
                    'foo',
                    data=json.dumps({'state':'open'})
            )

    def test_parse_references(self):
        issue_ = Issue(
                title='Referenced issue',
                project=self.test_project,
                author=self.test_user
        )
        issue_.save()

        self.issue.body = 'Some body text referencing this issue /%s/issues/%s' % (self.test_project.name, issue_.id)

        self.issue.parse_references(self.issue.body)

        # Reload the issue so changes are reflected.
        issue_.reload()

        self.assertEqual(len(self.issue.references), 1)
        self.assertEqual(len(issue_.events), 1)
        self.assertEqual(self.issue.references[0].title, 'Referenced issue')
        self.assertEqual(issue_.events[0].data, {
            'project_slug': self.test_project.slug,
            'referencer_id': self.issue.id,
            'referencer_title': self.issue.title
        })

    def test_parse_mentions(self):
        u = User(name='Numpy', google_id='1', email='*****@*****.**')
        u.save()

        # Tests adds mentions
        self.issue.body = 'Some body text with a mention @[Numpy](user:%s)' % u.google_id
        self.issue.parse_mentions()

        u.reload()

        self.assertEqual(len(self.issue.mentions), 1)
        self.assertEqual(len(u.references), 1)

        # Tests removes mentions
        self.issue.body = 'Some body text without a mention'
        self.issue.parse_mentions()

        u.reload()

        self.assertEqual(len(self.issue.mentions), 0)
        self.assertEqual(len(u.references), 0)

        # Tests multiple mentions
        u_ = User(name='Lumpy', google_id='2', email='*****@*****.**')
        u_.save()

        self.issue.body = 'Some body text with two mentions @[Numpy](user:%s) @[Lumpy](user:%s)' % (u.google_id, u_.google_id)
        self.issue.parse_mentions()

        u.reload()
        u_.reload()

        self.assertEqual(len(self.issue.mentions), 2)
        self.assertEqual(len(u.references), 1)
        self.assertEqual(len(u_.references), 1)

        self.issue.body = 'Some body text with two mentions @[Lumpy](user:%s)' % u_.google_id
        self.issue.parse_mentions()

        u.reload()
        u_.reload()

        self.assertEqual(len(self.issue.mentions), 1)
        self.assertEqual(len(u.references), 0)
        self.assertEqual(len(u_.references), 1)

    def test_push_to_github_updates_linked_issue(self):
        self.issue.github_id = 1
        self.issue.linked_url = MagicMock(return_value='foo')

        resp = MagicMock()
        resp.status_code = 200

        self.mock_github_api.patch.return_value = resp

        self.issue.push_to_github()

        self.mock_github_api.patch.assert_called_with('foo', data=json.dumps({
            'title': self.issue.title,
            'body': self.issue.body,
            'labels': self.issue.labels
        }))

    def test_push_to_github_creates_linked_issue(self):
        self.issue.body = 'Let us create a %github issue'
        self.issue.linked_url = MagicMock(return_value='foo')

        resp = MagicMock()
        resp.status_code = 201
        resp.json.return_value = {'number': 1}

        self.mock_github_api.post.return_value = resp

        self.issue.push_to_github()

        self.assertEqual(self.issue.github_id, 1)

    def test_pre_delete(self):
        c = Comment(body='foo', author=self.test_user)
        c.issue = self.issue
        c.save()

        self.test_user.references.append(self.issue)
        self.test_user.save()

        self.issue.mentions.append(self.test_user)
        self.issue.comments.append(c)
        self.issue.save()

        self.assertEqual(Issue.objects.count(), 1)
        self.assertEqual(Comment.objects.count(), 1)
        self.assertEqual(len(self.test_user.references), 1)

        self.issue.delete()

        self.assertEqual(Issue.objects.count(), 0)
        self.assertEqual(Comment.objects.count(), 0)
        self.assertEqual(len(self.test_user.references), 0)