コード例 #1
0
ファイル: test_flask_admin.py プロジェクト: shainer/anitya
    def test_browse_flags(self):
        """ Test the browse_flags function. """

        create_flagged_project(self.session)

        output = self.app.get('/flags', follow_redirects=True)
        self.assertEqual(output.status_code, 200)
        self.assertTrue(b'<ul id="flashes" class="list-group">'
                        b'<li class="list-group-item list-group-item-warning">'
                        b'Login required</li></ul>' in output.data)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/flags', follow_redirects=True)
            self.assertEqual(output.status_code, 401)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/flags')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            output = c.get('/flags?page=abc&limit=def&from_date=ghi')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            output = c.get('/flags?from_date=%s' %
                           datetime.datetime.utcnow().date())
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            # geany shouldn't show up if the "from date" is tomorrow
            tomorrow = datetime.datetime.utcnow().date() + datetime.timedelta(
                days=1)
            output = c.get('/flags?from_date=%s' % tomorrow)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertFalse(b'geany' in output.data)

            output = c.get('/flags?from_date=%s&project=geany' %
                           datetime.datetime.utcnow().date())
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)
コード例 #2
0
ファイル: test_models.py プロジェクト: odra/anitya
    def test_project_flag_search_by_date(self):
        """
        Assert that 'ProjectFlag.search' returns correct project
        if from date is provided.
        """
        create_flagged_project(self.session)

        from_date = datetime.datetime.utcnow().date() - datetime.timedelta(days=1)
        flags = models.ProjectFlag.search(self.session, from_date=from_date)
        self.assertEqual(len(flags), 1)
コード例 #3
0
ファイル: test_models.py プロジェクト: fedora-infra/anitya
    def test_project_flag_search_by_date(self):
        """
        Assert that 'ProjectFlag.search' returns correct project
        if from date is provided.
        """
        create_flagged_project(self.session)

        from_date = datetime.datetime.utcnow().date() - datetime.timedelta(days=1)
        flags = models.ProjectFlag.search(self.session, from_date=from_date)
        self.assertEqual(len(flags), 1)
コード例 #4
0
ファイル: test_flask_admin.py プロジェクト: msimacek/anitya
    def test_browse_flags(self):
        """ Test the browse_flags function. """

        create_flagged_project(self.session)

        output = self.app.get('/flags', follow_redirects=True)
        self.assertEqual(output.status_code, 200)
        self.assertTrue(
            b'<ul id="flashes" class="list-group">'
            b'<li class="list-group-item list-group-item-warning">'
            b'Login required</li></ul>' in output.data)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/flags', follow_redirects=True)
            self.assertEqual(output.status_code, 401)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/flags')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            output = c.get('/flags?page=abc&limit=def&from_date=ghi')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            output = c.get('/flags?from_date=%s' % datetime.datetime.utcnow().date())
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            # geany shouldn't show up if the "from date" is tomorrow
            tomorrow = datetime.datetime.utcnow().date() + datetime.timedelta(days=1)
            output = c.get('/flags?from_date=%s' % tomorrow)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertFalse(b'geany' in output.data)

            output = c.get('/flags?from_date=%s&project=geany' % datetime.datetime.utcnow().date())
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)
コード例 #5
0
ファイル: test_models.py プロジェクト: gargvaibhav64/anitya
    def test_project_delete_cascade(self):
        """ Assert deletion of mapped packages when project is deleted """
        project = models.Project(
            name='test',
            homepage='https://example.com',
            backend='custom',
            ecosystem_name='pypi',
            version_scheme='Invalid',
        )
        self.session.add(project)

        package = models.Packages(
            project_id=1,
            distro_name='Fedora',
            package_name='test',
        )
        self.session.add(package)
        self.session.commit()

        projects = self.session.query(models.Project).all()
        self.assertEqual(len(projects), 1)
        self.assertEqual(len(projects[0].package), 1)

        self.session.delete(projects[0])
        self.session.commit()

        projects = self.session.query(models.Project).all()
        packages = self.session.query(models.Packages).all()
        self.assertEqual(len(projects), 0)
        self.assertEqual(len(packages), 0)

        create_flagged_project(self.session)
        projects = self.session.query(models.Project).all()
        self.assertEqual(len(projects), 1)
        self.assertEqual(len(projects[0].flags), 1)

        self.session.delete(projects[0])
        self.session.commit()

        projects = self.session.query(models.Project).all()
        packages = self.session.query(models.ProjectFlag).all()
        self.assertEqual(len(projects), 0)
        self.assertEqual(len(packages), 0)
コード例 #6
0
ファイル: test_utilities.py プロジェクト: fedora-infra/anitya
    def test_set_flag_state(self):
        """ Test set state """
        flag = create_flagged_project(self.session)

        utilities.set_flag_state(
            self.session, flag=flag, state="closed", user_id="*****@*****.**"
        )

        project_obj = models.Project.get(self.session, 1)
        self.assertEqual(len(project_obj.flags), 1)
        self.assertEqual(project_obj.flags[0].state, "closed")
コード例 #7
0
ファイル: test_models.py プロジェクト: fedora-infra/anitya
    def test_project_delete_cascade(self):
        """ Assert deletion of mapped packages when project is deleted """
        project = models.Project(
            name="test",
            homepage="https://example.com",
            backend="custom",
            ecosystem_name="pypi",
            version_scheme="Invalid",
        )
        self.session.add(project)

        package = models.Packages(
            project_id=1, distro_name="Fedora", package_name="test"
        )
        self.session.add(package)
        self.session.commit()

        projects = self.session.query(models.Project).all()
        self.assertEqual(len(projects), 1)
        self.assertEqual(len(projects[0].package), 1)

        self.session.delete(projects[0])
        self.session.commit()

        projects = self.session.query(models.Project).all()
        packages = self.session.query(models.Packages).all()
        self.assertEqual(len(projects), 0)
        self.assertEqual(len(packages), 0)

        create_flagged_project(self.session)
        projects = self.session.query(models.Project).all()
        self.assertEqual(len(projects), 1)
        self.assertEqual(len(projects[0].flags), 1)

        self.session.delete(projects[0])
        self.session.commit()

        projects = self.session.query(models.Project).all()
        packages = self.session.query(models.ProjectFlag).all()
        self.assertEqual(len(projects), 0)
        self.assertEqual(len(packages), 0)
コード例 #8
0
ファイル: test_utilities.py プロジェクト: fedora-infra/anitya
    def test_set_flag_state_no_change(self):
        """ Test set state """
        flag = create_flagged_project(self.session)

        self.assertRaises(
            exceptions.AnityaException,
            utilities.set_flag_state,
            self.session,
            flag=flag,
            state="open",
            user_id="*****@*****.**",
        )
コード例 #9
0
    def test_set_flag_state(self):
        """ Test set state """
        flag = create_flagged_project(self.session)

        utilities.set_flag_state(self.session,
                                 flag=flag,
                                 state="closed",
                                 user_id="*****@*****.**")

        project_obj = models.Project.get(self.session, 1)
        self.assertEqual(len(project_obj.flags), 1)
        self.assertEqual(project_obj.flags[0].state, "closed")
コード例 #10
0
    def test_set_flag_state_no_change(self):
        """ Test set state """
        flag = create_flagged_project(self.session)

        self.assertRaises(
            exceptions.AnityaException,
            utilities.set_flag_state,
            self.session,
            flag=flag,
            state="open",
            user_id="*****@*****.**",
        )
コード例 #11
0
ファイル: test_utilities.py プロジェクト: fedora-infra/anitya
    def test_set_flag_project_session_error(self):
        """ Test SQLAlchemy session error """
        flag = create_flagged_project(self.session)

        with mock.patch.object(
            self.session, "flush", mock.Mock(side_effect=[SQLAlchemyError(), None])
        ):
            self.assertRaises(
                exceptions.AnityaException,
                utilities.set_flag_state,
                self.session,
                flag=flag,
                state="closed",
                user_id="*****@*****.**",
            )
コード例 #12
0
    def test_set_flag_project_session_error(self):
        """ Test SQLAlchemy session error """
        flag = create_flagged_project(self.session)

        with mock.patch.object(
                self.session, "flush",
                mock.Mock(side_effect=[SQLAlchemyError(), None])):
            self.assertRaises(
                exceptions.AnityaException,
                utilities.set_flag_state,
                self.session,
                flag=flag,
                state="closed",
                user_id="*****@*****.**",
            )
コード例 #13
0
ファイル: test_utilities.py プロジェクト: Tubbz-alt/anitya
    def test_set_flag_state(self):
        """ Test set state """
        flag = create_flagged_project(self.session)

        with fml_testing.mock_sends(anitya_schema.ProjectFlagSet):
            utilities.set_flag_state(
                self.session,
                flag=flag,
                state="closed",
                user_id="*****@*****.**",
            )

        project_obj = models.Project.get(self.session, 1)
        self.assertEqual(len(project_obj.flags), 1)
        self.assertEqual(project_obj.flags[0].state, "closed")
コード例 #14
0
ファイル: test_models.py プロジェクト: fedora-infra/anitya
    def test_project_flag__json__(self):
        """ Test the ProjectFlag.__json__ function. """
        flag = create_flagged_project(self.session)
        data = {
            "created_on": time.mktime(flag.created_on.timetuple()),
            "user": u"*****@*****.**",
            "state": u"open",
            "project": u"geany",
            "updated_on": time.mktime(flag.updated_on.timetuple()),
            "id": 1,
        }

        self.assertEqual(flag.__json__(), data)

        data["reason"] = u"this is a duplicate."
        self.assertEqual(flag.__json__(detailed=True), data)
コード例 #15
0
ファイル: test_models.py プロジェクト: gargvaibhav64/anitya
    def test_project_flag__json__(self):
        """ Test the ProjectFlag.__json__ function. """
        flag = create_flagged_project(self.session)
        data = {
            'created_on': time.mktime(flag.created_on.timetuple()),
            'user': u'*****@*****.**',
            'state': u'open',
            'project': u'geany',
            'updated_on': time.mktime(flag.updated_on.timetuple()),
            'id': 1
        }

        self.assertEqual(flag.__json__(), data)

        data['reason'] = u'This is a duplicate.'
        self.assertEqual(flag.__json__(detailed=True), data)
コード例 #16
0
ファイル: test_models.py プロジェクト: stormi/anitya
    def test_project_flag__json__(self):
        """ Test the ProjectFlag.__json__ function. """
        flag = create_flagged_project(self.session)
        data = {
            "created_on": time.mktime(flag.created_on.timetuple()),
            "user": u"*****@*****.**",
            "state": u"open",
            "project": u"geany",
            "updated_on": time.mktime(flag.updated_on.timetuple()),
            "id": 1,
        }

        self.assertEqual(flag.__json__(), data)

        data["reason"] = u"this is a duplicate."
        self.assertEqual(flag.__json__(detailed=True), data)
コード例 #17
0
ファイル: test_models.py プロジェクト: fedora-infra/anitya
    def test_project_flag_search_by_state(self):
        """
        Assert that 'ProjectFlag.search' returns correct project
        if state is provided.
        """
        flag = create_flagged_project(self.session)
        flag_add = utilities.flag_project(
            self.session,
            flag.project,
            "This is a duplicate.",
            "*****@*****.**",
            "user_openid_id",
        )
        flag_add.state = "closed"
        self.session.add(flag_add)
        self.session.commit()

        flags = models.ProjectFlag.search(self.session, state="open")
        self.assertEqual(len(flags), 1)
コード例 #18
0
ファイル: test_models.py プロジェクト: fedora-infra/anitya
    def test_project_flag_search_count(self):
        """
        Assert that 'ProjectFlag.search' returns correct project
        if count is set.
        """
        flag = create_flagged_project(self.session)
        flag_add = utilities.flag_project(
            self.session,
            flag.project,
            "This is a duplicate.",
            "*****@*****.**",
            "user_openid_id",
        )
        flag_add.state = "closed"
        self.session.add(flag_add)
        self.session.commit()

        flags = models.ProjectFlag.search(self.session, count=True)
        self.assertEqual(flags, 2)
コード例 #19
0
ファイル: test_models.py プロジェクト: stormi/anitya
    def test_project_flag_search_count(self):
        """
        Assert that 'ProjectFlag.search' returns correct project
        if count is set.
        """
        flag = create_flagged_project(self.session)
        flag_add = utilities.flag_project(
            self.session,
            flag.project,
            "This is a duplicate.",
            "*****@*****.**",
            "user_openid_id",
        )
        flag_add.state = "closed"
        self.session.add(flag_add)
        self.session.commit()

        flags = models.ProjectFlag.search(self.session, count=True)
        self.assertEqual(flags, 2)
コード例 #20
0
ファイル: test_models.py プロジェクト: stormi/anitya
    def test_project_flag_search_by_state(self):
        """
        Assert that 'ProjectFlag.search' returns correct project
        if state is provided.
        """
        flag = create_flagged_project(self.session)
        flag_add = utilities.flag_project(
            self.session,
            flag.project,
            "This is a duplicate.",
            "*****@*****.**",
            "user_openid_id",
        )
        flag_add.state = "closed"
        self.session.add(flag_add)
        self.session.commit()

        flags = models.ProjectFlag.search(self.session, state="open")
        self.assertEqual(len(flags), 1)
コード例 #21
0
ファイル: test_models.py プロジェクト: Tubbz-alt/anitya
    def test_project_flag_search_limit(self):
        """
        Assert that 'ProjectFlag.search' returns correct project
        if limit is set.
        """
        flag = create_flagged_project(self.session)
        with fml_testing.mock_sends(anitya_schema.ProjectFlag):
            flag_add = utilities.flag_project(
                self.session,
                flag.project,
                "This is a duplicate.",
                "*****@*****.**",
                "user_openid_id",
            )
        flag_add.state = "closed"
        self.session.add(flag_add)
        self.session.commit()

        flags = models.ProjectFlag.search(self.session, limit=1)
        self.assertEqual(len(flags), 1)
コード例 #22
0
ファイル: test_flask_admin.py プロジェクト: robled/anitya
    def test_flag_project(self):
        """ Test setting the flag state of a project. """

        flag = create_flagged_project(self.session)

        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'some_invalid_openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/closed'.format(flag.id),
                           follow_redirects=True)

            # Non-admin ID will complain, insufficient creds
            self.assertEqual(output.status_code, 401)

        # Nothing should have changed.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')

        self.assertEqual(flag.state, 'open')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/closed'.format(flag.id),
                           follow_redirects=True)
            self.assertEqual(output.status_code, 200)

            # Now the flag state should *not* have toggled because while we did
            # provide a valid admin openid, we did not provide a CSRF token.
            project = model.Project.by_name(self.session, 'geany')[0]
            self.assertEqual(len(project.flags), 1)
            self.assertEqual(project.flags[0].state, 'open')

            # Go ahead and get the csrf token from the page and try again.
            data = {}

            csrf_token = output.data.split(
                b'name="csrf_token" type="hidden" value="')[1].split(b'">')[0]

            data['csrf_token'] = csrf_token

            output = c.post('/flags/{0}/set/closed'.format(flag.id),
                            data=data,
                            follow_redirects=True)
            self.assertEqual(output.status_code, 200)

        # Now the flag state should have toggled.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'closed')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/open'.format(flag.id),
                           follow_redirects=True)

            # Get a new CSRF Token
            output = c.get('/distro/add')
            csrf_token = output.data.split(
                b'name="csrf_token" type="hidden" value="')[1].split(b'">')[0]

            # Grab the CSRF token again so we can toggle the flag again
            data = {'csrf_token': csrf_token}

            output = c.post('/flags/{0}/set/open'.format(flag.id),
                            data=data,
                            follow_redirects=True)
            self.assertEqual(output.status_code, 200)

        # Make sure we can toggle the flag again.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/nonsense'.format(flag.id),
                           follow_redirects=True)
            self.assertEqual(output.status_code, 422)

        # Make sure that passing garbage doesn't change anything.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')
コード例 #23
0
ファイル: test_models.py プロジェクト: fedora-infra/anitya
    def test_project_flag_all(self):
        """ Test the ProjectFlag.all function. """
        create_flagged_project(self.session)

        flags = models.ProjectFlag.all(self.session)
        self.assertEqual(len(flags), 1)
コード例 #24
0
ファイル: test_models.py プロジェクト: fedora-infra/anitya
    def test_project_flag__repr__(self):
        """ Test the ProjectFlag.__repr__ function. """
        flag = create_flagged_project(self.session)

        self.assertEqual(repr(flag), "<ProjectFlag(geany, [email protected], open)>")
コード例 #25
0
ファイル: test_models.py プロジェクト: stormi/anitya
    def test_project_flag_all(self):
        """ Test the ProjectFlag.all function. """
        create_flagged_project(self.session)

        flags = models.ProjectFlag.all(self.session)
        self.assertEqual(len(flags), 1)
コード例 #26
0
ファイル: test_models.py プロジェクト: stormi/anitya
    def test_project_flag__repr__(self):
        """ Test the ProjectFlag.__repr__ function. """
        flag = create_flagged_project(self.session)

        self.assertEqual(repr(flag),
                         "<ProjectFlag(geany, [email protected], open)>")