def test_api_projects_names(self):
        """ Test the api_projects_names function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/projects/names')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {"projects": [], "total": 0}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/projects/names/')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {"projects": ["geany", "R2spec", "subsurface"], "total": 3}
        self.assertEqual(data, exp)

        output = self.app.get('/api/projects/names/?pattern=ge')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {"projects": ["geany"], "total": 1}
        self.assertEqual(data, exp)
Example #2
0
    def test_api_projects_names(self):
        """ Test the api_projects_names function of the API. """
        create_distro(self.session)
        output = self.app.get("/api/projects/names")
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {"projects": [], "total": 0}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get("/api/projects/names/")
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {"projects": ["geany", "R2spec", "subsurface"], "total": 3}
        self.assertEqual(data, exp)

        output = self.app.get("/api/projects/names/?pattern=ge")
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {"projects": ["geany"], "total": 1}
        self.assertEqual(data, exp)
Example #3
0
    def test_packages__repr__(self):
        """ Test the Packages.__repr__ function. """
        create_project(self.session)
        create_distro(self.session)
        create_package(self.session)

        pkg = models.Packages.by_id(self.session, 1)
        self.assertEqual(str(pkg), "<Packages(1, Fedora: geany)>")
Example #4
0
    def test_packages__repr__(self):
        """ Test the Packages.__repr__ function. """
        create_project(self.session)
        create_distro(self.session)
        create_package(self.session)

        pkg = models.Packages.by_id(self.session, 1)
        self.assertEqual(str(pkg), "<Packages(1, Fedora: geany)>")
Example #5
0
    def test_packages_by_id(self):
        """ Test the Packages.by_id function. """
        create_project(self.session)
        create_distro(self.session)
        create_package(self.session)

        pkg = models.Packages.by_id(self.session, 1)
        self.assertEqual(pkg.package_name, "geany")
        self.assertEqual(pkg.distro_name, "Fedora")
Example #6
0
    def test_packages_by_id(self):
        """ Test the Packages.by_id function. """
        create_project(self.session)
        create_distro(self.session)
        create_package(self.session)

        pkg = models.Packages.by_id(self.session, 1)
        self.assertEqual(pkg.package_name, "geany")
        self.assertEqual(pkg.distro_name, "Fedora")
Example #7
0
    def test_project_search_by_distro(self):
        """
        Assert that only projects with mappings to specific distro
        are returned when distro is provided.
        """
        create_project(self.session)
        create_package(self.session)

        projects = models.Project.search(self.session, "*", distro="Fedora")
        self.assertEqual(len(projects), 2)
Example #8
0
    def test_project_search_by_distro(self):
        """
        Assert that only projects with mappings to specific distro
        are returned when distro is provided.
        """
        create_project(self.session)
        create_package(self.session)

        projects = models.Project.search(self.session, "*", distro="Fedora")
        self.assertEqual(len(projects), 2)
Example #9
0
    def test_api_get_project_distro(self):
        """ Test the api_get_project_distro function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/project/Fedora/geany')
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": "No package \"geany\" found in distro \"Fedora\"",
            "output": "notok"
        }
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/project/Fedora/gnome-terminal/')
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": "No package \"gnome-terminal\" found in distro "
                     "\"Fedora\"",
            "output": "notok"
        }
        self.assertEqual(data, exp)

        output = self.app.get('/api/project/Fedora/geany/')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        del(data['created_on'])
        del(data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "http://www.geany.org/",
            "name": "geany",
            "regex": 'DEFAULT',
            "version": None,
            "version_url": 'http://www.geany.org/Download/Releases',
            "versions": [],
            "packages": [
                {
                  "distro": "Fedora",
                  "package_name": "geany"
                }
            ],
        }

        self.assertEqual(data, exp)
Example #10
0
    def test_api_get_project_distro(self):
        """ Test the api_get_project_distro function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/project/Fedora/geany')
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": "No package \"geany\" found in distro \"Fedora\"",
            "output": "notok"
        }
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/project/Fedora/gnome-terminal/')
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": "No package \"gnome-terminal\" found in distro "
                     "\"Fedora\"",
            "output": "notok"
        }
        self.assertEqual(data, exp)

        output = self.app.get('/api/project/Fedora/geany/')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        del(data['created_on'])
        del(data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "http://www.geany.org/",
            "name": "geany",
            "regex": 'DEFAULT',
            "version": None,
            "version_url": 'http://www.geany.org/Download/Releases',
            "versions": [],
            "packages": [
                {
                  "distro": "Fedora",
                  "package_name": "geany"
                }
            ],
        }

        self.assertEqual(data, exp)
Example #11
0
    def test_project_search(self):
        """ Test the Project.search function. """
        create_project(self.session)
        create_package(self.session)

        projects = models.Project.search(self.session, "*", count=True)
        self.assertEqual(projects, 3)

        projects = models.Project.search(self.session, "*", page=2)
        self.assertEqual(len(projects), 0)

        projects = models.Project.search(self.session, "*", page="asd")
        self.assertEqual(len(projects), 3)
Example #12
0
    def test_project_search(self):
        """ Test the Project.search function. """
        create_project(self.session)
        create_package(self.session)

        projects = models.Project.search(self.session, "*", count=True)
        self.assertEqual(projects, 3)

        projects = models.Project.search(self.session, "*", page=2)
        self.assertEqual(len(projects), 0)

        projects = models.Project.search(self.session, "*", page="asd")
        self.assertEqual(len(projects), 3)
Example #13
0
    def test_api_get_project_distro(self):
        """ Test the api_get_project_distro function of the API. """
        create_distro(self.session)
        output = self.app.get("/api/project/Fedora/geany")
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": 'No package "geany" found in distro "Fedora"',
            "output": "notok",
        }
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get("/api/project/Fedora/gnome-terminal/")
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": 'No package "gnome-terminal" found in distro '
            '"Fedora"',
            "output": "notok",
        }
        self.assertEqual(data, exp)

        output = self.app.get("/api/project/Fedora/geany/")
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        del data["created_on"]
        del data["updated_on"]

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "https://www.geany.org/",
            "ecosystem": "https://www.geany.org/",
            "name": "geany",
            "regex": "DEFAULT",
            "version": None,
            "version_url": "https://www.geany.org/Download/Releases",
            "versions": [],
            "packages": [{
                "distro": "Fedora",
                "package_name": "geany"
            }],
        }

        self.assertEqual(data, exp)
Example #14
0
    def test_project_search_by_distro(self):
        """
        Assert that only projects with mappings to specific distro
        are returned when distro is provided.
        """
        create_project(self.session)
        create_package(self.session)
        # Create mapping for another distro to be sure that only Fedora mappings
        # are taken into account
        package = models.Packages(distro_name="Debian", project_id=3)
        self.session.add(package)
        self.session.commit()

        projects = models.Project.search(self.session, "*", distro="Fedora")
        self.assertEqual(len(projects), 2)
Example #15
0
    def test_api_get_project_distro(self):
        """ Test the api_get_project_distro function of the API. """
        create_distro(self.session)
        output = self.app.get("/api/project/Fedora/geany")
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": 'No package "geany" found in distro "Fedora"',
            "output": "notok",
        }
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get("/api/project/Fedora/gnome-terminal/")
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": 'No package "gnome-terminal" found in distro ' '"Fedora"',
            "output": "notok",
        }
        self.assertEqual(data, exp)

        output = self.app.get("/api/project/Fedora/geany/")
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        del data["created_on"]
        del data["updated_on"]

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "https://www.geany.org/",
            "ecosystem": "https://www.geany.org/",
            "name": "geany",
            "regex": "DEFAULT",
            "version": None,
            "version_url": "https://www.geany.org/Download/Releases",
            "versions": [],
            "packages": [{"distro": "Fedora", "package_name": "geany"}],
        }

        self.assertEqual(data, exp)
Example #16
0
    def test_api_packages_wiki_list(self):
        """ Test the api_packages_wiki_list function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/packages/wiki/')
        self.assertEqual(output.status_code, 200)

        self.assertEqual(output.data, b'')

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/packages/wiki/')
        self.assertEqual(output.status_code, 200)

        exp = b"* geany DEFAULT http://www.geany.org/Download/Releases\n"\
            b"* subsurface DEFAULT http://subsurface.hohndel.org/downloads/"
        self.assertEqual(output.data, exp)
    def test_api_packages_wiki_list(self):
        """ Test the api_packages_wiki_list function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/packages/wiki/')
        self.assertEqual(output.status_code, 200)

        self.assertEqual(output.data, b'')

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/packages/wiki/')
        self.assertEqual(output.status_code, 200)

        exp = b"* geany DEFAULT https://www.geany.org/Download/Releases\n"\
            b"* subsurface DEFAULT https://subsurface-divelog.org/downloads/"
        self.assertEqual(output.data, exp)
    def test_api_get_project(self):
        """ Test the api_get_project function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/project/')
        self.assertEqual(output.status_code, 404)

        output = self.app.get('/api/project/10')
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {"error": "no such project", "output": "notok"}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/project/10')
        self.assertEqual(output.status_code, 404)

        output = self.app.get('/api/project/1')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        del (data['created_on'])
        del (data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "https://www.geany.org/",
            "ecosystem": "https://www.geany.org/",
            "name": "geany",
            "regex": 'DEFAULT',
            "version": None,
            "version_url": 'https://www.geany.org/Download/Releases',
            "versions": [],
            "packages": [{
                "distro": "Fedora",
                "package_name": "geany"
            }],
        }

        self.assertEqual(exp, data)
    def test_api_get_version(self):
        """ Test the api_get_version function of the API. """
        create_distro(self.session)

        output = self.app.post('/api/version/get')
        self.assertEqual(output.status_code, 400)
        data = _read_json(output)

        exp = {"error": ["No project id specified"], "output": "notok"}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        data = {'id': 10}
        output = self.app.post('/api/version/get', data=data)
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {"error": "No such project", "output": "notok"}
        self.assertEqual(data, exp)

        # Modify the project so that it fails
        project = models.Project.get(self.session, 1)
        project.version_url = "https://www.geany.org/Down"
        self.session.add(project)
        self.session.commit()

        data = {'id': 1}
        output = self.app.post('/api/version/get', data=data)
        self.assertEqual(output.status_code, 400)
        data = _read_json(output)

        exp = {
            "error": [
                "geany: no upstream version found. "
                "- https://www.geany.org/Down - "
                " " + REGEX % ({
                    'name': 'geany'
                })
            ],
            "output":
            "notok"
        }

        self.assertEqual(data, exp)

        # Modify it back:
        project.version_url = "https://www.geany.org/Download/Releases"
        self.session.add(project)
        self.session.commit()

        data = {'id': 1}
        output = self.app.post('/api/version/get', data=data)
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)
        del (data['created_on'])
        del (data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "https://www.geany.org/",
            "ecosystem": "https://www.geany.org/",
            "name": "geany",
            "regex": "DEFAULT",
            "version": "1.33",
            "version_url": "https://www.geany.org/Download/Releases",
            "versions": ["1.33"],
            "packages": [{
                "distro": "Fedora",
                "package_name": "geany"
            }],
        }

        self.assertEqual(data, exp)
Example #20
0
    def test_api_get_version(self):
        """ Test the api_get_version function of the API. """
        create_distro(self.session)

        output = self.app.post('/api/version/get')
        self.assertEqual(output.status_code, 400)
        data = _read_json(output)

        exp = {"error": ["No project id specified"], "output": "notok"}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        data = {'id': 10}
        output = self.app.post('/api/version/get', data=data)
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {"error": "No such project", "output": "notok"}
        self.assertEqual(data, exp)

        # Modify the project so that it fails
        project = model.Project.get(self.session, 1)
        project.version_url = "http://www.geany.org/Down"
        self.session.add(project)
        self.session.commit()

        data = {'id': 1}
        output = self.app.post('/api/version/get', data=data)
        self.assertEqual(output.status_code, 400)
        data = _read_json(output)

        exp = {
            "error": [
                "geany: no upstream version found. "
                "- http://www.geany.org/Down - "
                " " + REGEX % ({'name': 'geany'})
            ],
            "output": "notok"
        }

        # This test will break for every update of geany, so we need to
        # keep the output easy on hand.
        #print output.data
        self.assertEqual(data, exp)

        # Modify it back:
        project.version_url = "http://www.geany.org/Download/Releases"
        self.session.add(project)
        self.session.commit()

        data = {'id': 1}
        output = self.app.post('/api/version/get', data=data)
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)
        del(data['created_on'])
        del(data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "http://www.geany.org/",
            "name": "geany",
            "regex": "DEFAULT",
            "version": "1.24.1",
            "version_url": "http://www.geany.org/Download/Releases",
            "versions": ["1.24.1"],
            "packages": [
                {
                  "distro": "Fedora",
                  "package_name": "geany"
                }
            ],
        }

        # This test will break for every update of geany, so we need to
        # keep the output easy on hand.
        #print output.data
        self.assertEqual(data, exp)
Example #21
0
    def test_api_get_version(self):
        """ Test the api_get_version function of the API. """
        create_distro(self.session)

        with fml_testing.mock_sends():
            output = self.app.post("/api/version/get")
        self.assertEqual(output.status_code, 400)
        data = _read_json(output)

        exp = {"error": ["No project id specified"], "output": "notok"}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        data = {"id": 10}
        with fml_testing.mock_sends():
            output = self.app.post("/api/version/get", data=data)
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {"error": "No such project", "output": "notok"}
        self.assertEqual(data, exp)

        # Modify the project so that it fails
        project = models.Project.get(self.session, 1)
        project.version_url = "https://www.geany.org/Down"
        self.session.add(project)
        self.session.commit()

        data = {"id": 1}
        with fml_testing.mock_sends():
            output = self.app.post("/api/version/get", data=data)
        self.assertEqual(output.status_code, 400)
        data = _read_json(output)

        exp = {
            "error": [
                "geany: no upstream version found. "
                "- https://www.geany.org/Down - "
                " " + REGEX % ({"name": "geany"})
            ],
            "output": "notok",
        }

        self.assertEqual(data, exp)

        # Modify it back:
        project.version_url = "https://www.geany.org/Download/Releases"
        self.session.add(project)
        self.session.commit()

        data = {"id": 1}
        with fml_testing.mock_sends(
            anitya_schema.ProjectVersionUpdated, anitya_schema.ProjectVersionUpdatedV2
        ):
            output = self.app.post("/api/version/get", data=data)
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {
            "versions": [],
        }

        self.assertEqual(data, exp)
Example #22
0
    def test_delete_project_mapping(self):
        """ Test the delete_project_mapping function. """
        create_distro(self.session)
        create_project(self.session)
        create_package(self.session)

        output = self.app.get(
            '/project/1/delete/Fedora/geany', 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(
                '/project/100/delete/Fedora/geany', follow_redirects=True)
            self.assertEqual(output.status_code, 404)

            output = c.get(
                '/project/1/delete/CentOS/geany', follow_redirects=True)
            self.assertEqual(output.status_code, 404)

            output = c.get(
                '/project/1/delete/Fedora/geany2', follow_redirects=True)
            self.assertEqual(output.status_code, 404)

            output = c.get(
                '/project/1/delete/Fedora/geany', follow_redirects=True)
            self.assertEqual(output.status_code, 401)

        output = c.get('/project/1/')
        self.assertEqual(output.status_code, 200)
        self.assertTrue(b'<h1>Project: geany</h1>' in output.data)
        self.assertTrue(b'<td>Fedora</td>' in output.data)

        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('/project/1/delete/Fedora/geany', follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                b'<h1>Project: geany - Delete package</h1>' in output.data)
            self.assertTrue(
                b'<button type="submit" name="confirm" value="Yes"'
                in output.data)

            data = {
                'confirm': 'Yes',
            }

            output = c.post(
                '/project/1/delete/Fedora/geany', data=data,
                follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                b'<h1>Project: geany - Delete package</h1>' in output.data)
            self.assertTrue(
                b'<button type="submit" name="confirm" value="Yes"'
                in output.data)

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

            data['csrf_token'] = csrf_token
            del(data['confirm'])

            output = c.post(
                '/project/1/delete/Fedora/geany', data=data,
                follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Project: geany</h1>' in output.data)
            self.assertTrue(b'<td>Fedora</td>' in output.data)

            data['confirm'] = True

            output = c.post(
                '/project/1/delete/Fedora/geany', data=data,
                follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                b'class="list-group-item list-group-item-default">'
                b'Mapping for geany has been removed</li>'
                in output.data)
            self.assertTrue(b'<h1>Project: geany</h1>' in output.data)
            self.assertFalse(b'<td>Fedora</td>' in output.data)
Example #23
0
    def test_api_get_version(self):
        """ Test the api_get_version function of the API. """
        create_distro(self.session)

        output = self.app.post("/api/version/get")
        self.assertEqual(output.status_code, 400)
        data = _read_json(output)

        exp = {"error": ["No project id specified"], "output": "notok"}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        data = {"id": 10}
        output = self.app.post("/api/version/get", data=data)
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {"error": "No such project", "output": "notok"}
        self.assertEqual(data, exp)

        # Modify the project so that it fails
        project = models.Project.get(self.session, 1)
        project.version_url = "https://www.geany.org/Down"
        self.session.add(project)
        self.session.commit()

        data = {"id": 1}
        output = self.app.post("/api/version/get", data=data)
        self.assertEqual(output.status_code, 400)
        data = _read_json(output)

        exp = {
            "error": [
                "geany: no upstream version found. "
                "- https://www.geany.org/Down - "
                " " + REGEX % ({"name": "geany"})
            ],
            "output": "notok",
        }

        self.assertEqual(data, exp)

        # Modify it back:
        project.version_url = "https://www.geany.org/Download/Releases"
        self.session.add(project)
        self.session.commit()

        data = {"id": 1}
        output = self.app.post("/api/version/get", data=data)
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)
        del data["created_on"]
        del data["updated_on"]

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "https://www.geany.org/",
            "ecosystem": "https://www.geany.org/",
            "name": "geany",
            "regex": "DEFAULT",
            "version": "1.33",
            "version_url": "https://www.geany.org/Download/Releases",
            "versions": ["1.33"],
            "packages": [{"distro": "Fedora", "package_name": "geany"}],
        }

        self.assertEqual(data, exp)