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)
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)
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)>")
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)>")
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")
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")
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)