From fd4371d89276059410db2c0de6320d2dd852cd35 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Oct 08 2020 11:34:05 +0000 Subject: frontend: test chroot-edit 403 and form errors --- diff --git a/frontend/coprs_frontend/tests/request_test_api.py b/frontend/coprs_frontend/tests/request_test_api.py index ee8d2a2..4cd7fb7 100644 --- a/frontend/coprs_frontend/tests/request_test_api.py +++ b/frontend/coprs_frontend/tests/request_test_api.py @@ -38,7 +38,7 @@ class _RequestsInterface: raise NotImplementedError def edit_chroot(self, project, chroot, bootstrap=None, - bootstrap_image=None): + bootstrap_image=None, owner=None): """ Modify CoprChroot """ raise NotImplementedError @@ -76,10 +76,10 @@ class WebUIRequests(_RequestsInterface): return resp def edit_chroot(self, project, chroot, bootstrap=None, - bootstrap_image=None): + bootstrap_image=None, owner=None): """ Change CoprChroot using the web-UI """ route = "/coprs/{user}/{project}/update_chroot/{chroot}/".format( - user=self.transaction_username, + user=owner or self.transaction_username, project=project, chroot=chroot, ) @@ -94,7 +94,8 @@ class WebUIRequests(_RequestsInterface): data["bootstrap_image"] = bootstrap_image resp = self.client.post(route, data=data) - assert resp.status_code == 302 + if self.success_expected: + assert resp.status_code == 302 return resp def create_distgit_package(self, project, pkgname): @@ -170,9 +171,9 @@ class API3Requests(_RequestsInterface): return resp def edit_chroot(self, project, chroot, bootstrap=None, - bootstrap_image=None): + bootstrap_image=None, owner=None): route = "/api_3/project-chroot/edit/{owner}/{project}/{chroot}".format( - owner=self.transaction_username, + owner=owner or self.transaction_username, project=project, chroot=chroot, ) diff --git a/frontend/coprs_frontend/tests/test_apiv3/test_copr_chroot.py b/frontend/coprs_frontend/tests/test_apiv3/test_copr_chroot.py new file mode 100644 index 0000000..69d5346 --- /dev/null +++ b/frontend/coprs_frontend/tests/test_apiv3/test_copr_chroot.py @@ -0,0 +1,71 @@ +""" +Coverage for stuff related to CoprChroots +""" + +from bs4 import BeautifulSoup +import pytest + +from coprs import db +from coprs.models import Copr + +from tests.coprs_test_case import CoprsTestCase, TransactionDecorator + + +class TestCoprChroots(CoprsTestCase): + @TransactionDecorator("u1") + @pytest.mark.usefixtures("f_users", "f_users_api", "f_mock_chroots", "f_db") + def test_edit_chroot_form(self): + chroot = "fedora-rawhide-i386" + project = "test" + self.web_ui.new_project(project, [chroot], + bootstrap="on") + route = "/coprs/{}/{}/edit_chroot/{}/".format( + self.transaction_username, project, chroot, + ) + def get_selected(html): + soup = BeautifulSoup(html, "html.parser") + return (soup.find("select", id="bootstrap") + .find("option", attrs={'selected': True})) + + resp = self.test_client.get(route) + assert get_selected(resp.data) is None + + self.web_ui.edit_chroot("test", chroot, bootstrap="on") + + resp = self.test_client.get(route) + assert get_selected(resp.data)["value"] == "on" + + @TransactionDecorator("u2") + @pytest.mark.usefixtures("f_users", "f_users_api", "f_mock_chroots", "f_db") + def test_edit_chroot_permission(self): + chroot = "fedora-rawhide-i386" + project = "test" + self.web_ui.new_project(project, [chroot], + bootstrap="on") + copr = Copr.query.one() + copr.user = self.u1 + db.session.commit() + route = "/coprs/{}/{}/edit_chroot/{}/".format( + self.u1.username, project, chroot, + ) + resp = self.test_client.get(route) + assert resp.status_code == 403 + + self.web_ui.success_expected = False + resp = self.web_ui.edit_chroot(project, chroot, bootstrap="off", + owner=self.u1.username) + assert resp.status_code == 403 + + @TransactionDecorator("u2") + @pytest.mark.usefixtures("f_users", "f_users_api", "f_mock_chroots", "f_db") + def test_edit_chroot_form_error(self): + chroot = "fedora-rawhide-i386" + project = "test" + self.web_ui.new_project(project, [chroot], + bootstrap="on") + self.web_ui.success_expected = False + resp = self.web_ui.edit_chroot(project, chroot, bootstrap="invalid") + assert resp.status_code == 200 + soup = BeautifulSoup(resp.data, "html.parser") + div = soup.find("div", class_="alert alert-danger alert-dismissable") + assert "Not a valid choice" in div.text