def test_show_group(tmpdir: LocalPath, setup: SetupTest, browser: Chrome) -> None: with setup.transaction(): setup.add_user_to_group("*****@*****.**", "team-sre", role="owner") setup.add_user_to_group("*****@*****.**", "team-sre") setup.grant_permission_to_group("ssh", "*", "team-sre") setup.grant_permission_to_group("team-sre", "foo", "team-sre") setup.grant_permission_to_group("team-sre", "bar", "team-sre") with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups/team-sre")) page = GroupViewPage(browser) row = page.find_member_row("*****@*****.**") assert row.role == "owner" assert row.href.endswith("/users/[email protected]") row = page.find_member_row("*****@*****.**") assert row.role == "member" assert row.href.endswith("/users/[email protected]") rows = page.find_permission_rows("ssh") assert len(rows) == 1 assert rows[0].argument == "*" assert rows[0].href.endswith("/permissions/ssh") rows = page.find_permission_rows("team-sre") for permission_row in rows: assert permission_row.href.endswith("/permissions/team-sre") assert sorted([r.argument for r in rows]) == ["bar", "foo"]
def test_require_clickthru(tmpdir, setup, browser): # type: (LocalPath, SetupTest, Chrome) -> None with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups")) groups_page = GroupsViewPage(browser) groups_page.click_create_group_button() create_group_modal = groups_page.get_create_group_modal() create_group_modal.set_group_name("test-group") create_group_modal.set_join_policy(GroupJoinPolicy.CAN_JOIN) create_group_modal.click_require_clickthru_checkbox() create_group_modal.confirm() with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups/test-group/join")) join_page = GroupJoinPage(browser) join_page.set_reason("Testing") join_page.submit() clickthru_modal = join_page.get_clickthru_modal() clickthru_modal.confirm() group_page = GroupViewPage(browser) assert group_page.current_url.endswith("/groups/test-group?refresh=yes") assert group_page.find_member_row("*****@*****.**")
def test_group_join_as_owner(tmpdir: LocalPath, setup: SetupTest, browser: Chrome) -> None: with setup.transaction(): setup.create_group("some-group", join_policy=GroupJoinPolicy.CAN_JOIN) with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups/some-group/join")) join_page = GroupJoinPage(browser) join_page.set_role("Owner") join_page.set_reason("Testing") join_page.submit() view_page = GroupViewPage(browser) with pytest.raises(NoSuchElementException): view_page.find_member_row("*****@*****.**")
def test_group_create(tmpdir: LocalPath, setup: SetupTest, browser: Chrome) -> None: with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups")) # First create a group from the view page with an error (an invalid name, doubling as a # test that @ in group names is rejected). This should leave that page and go to the # dedicated group creation page with the form already set up. groups_page = GroupsViewPage(browser) groups_page.click_create_group_button() create_group_modal = groups_page.get_create_group_modal() create_group_modal.set_group_name("test-group@something") create_group_modal.set_description("some description") create_group_modal.confirm() create_page = GroupCreatePage(browser) create_page.has_alert("Group names cannot contain @") create_page.set_group_name("test-group") create_page.submit() view_page = GroupViewPage(browser) assert view_page.subheading == "test-group" row = view_page.find_member_row("*****@*****.**") assert row.role == "owner" assert row.href.endswith("/users/[email protected]")
def test_require_clickthru(tmpdir: LocalPath, setup: SetupTest, browser: Chrome) -> None: with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups")) groups_page = GroupsViewPage(browser) groups_page.click_create_group_button() create_group_modal = groups_page.get_create_group_modal() create_group_modal.set_group_name("test-group") create_group_modal.set_join_policy(GroupJoinPolicy.CAN_JOIN) create_group_modal.click_require_clickthru_checkbox() create_group_modal.confirm() with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups/test-group/join")) join_page = GroupJoinPage(browser) join_page.set_reason("Testing") join_page.submit() clickthru_modal = join_page.get_clickthru_modal() clickthru_modal.confirm() group_page = GroupViewPage(browser) assert group_page.current_url.endswith( "/groups/test-group?refresh=yes") assert group_page.find_member_row("*****@*****.**")
def test_leave(tmpdir: LocalPath, setup: SetupTest, browser: Chrome) -> None: with setup.transaction(): setup.add_user_to_group("*****@*****.**", "some-group") with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups/some-group")) view_page = GroupViewPage(browser) assert view_page.find_member_row("*****@*****.**") view_page.click_leave_button() leave_page = GroupLeavePage(browser) assert leave_page.subheading == "Leave (some-group)" leave_page.submit() assert browser.current_url.endswith("/groups/some-group?refresh=yes") with pytest.raises(NoSuchElementException): view_page.find_member_row("*****@*****.**")
def test_remove_last_owner(async_server, browser): # noqa: F811 fe_url = url(async_server, "/groups/team-sre") browser.get(fe_url) page = GroupViewPage(browser) row = page.find_member_row("*****@*****.**") assert row.role == "owner" row.click_remove_button() modal = page.get_remove_user_modal() modal.confirm() row = page.find_member_row("*****@*****.**") assert row.role == "owner" assert page.has_text(group_ownership_policy.EXCEPTION_MESSAGE)
def test_remove_member(async_server, browser): # noqa: F811 fe_url = url(async_server, "/groups/team-sre") browser.get(fe_url) page = GroupViewPage(browser) row = page.find_member_row("*****@*****.**") assert row.role == "member" row.click_remove_button() modal = page.get_remove_user_modal() modal.confirm() assert page.current_url.endswith("/groups/team-sre?refresh=yes") with pytest.raises(NoSuchElementException): assert page.find_member_row("*****@*****.**")
def test_remove_last_owner(tmpdir: LocalPath, setup: SetupTest, browser: Chrome) -> None: with setup.transaction(): setup.add_user_to_group("*****@*****.**", "team-sre", role="owner") setup.add_user_to_group("*****@*****.**", "admins") setup.grant_permission_to_group(GROUP_ADMIN, "", "admins") with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups/team-sre")) page = GroupViewPage(browser) row = page.find_member_row("*****@*****.**") assert row.role == "owner" row.click_remove_button() modal = page.get_remove_user_modal() modal.confirm() row = page.find_member_row("*****@*****.**") assert row.role == "owner" assert page.has_alert(group_ownership_policy.EXCEPTION_MESSAGE)
def test_remove_member(tmpdir: LocalPath, setup: SetupTest, browser: Chrome) -> None: with setup.transaction(): setup.add_user_to_group("*****@*****.**", "team-sre", role="owner") setup.add_user_to_group("*****@*****.**", "team-sre") with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups/team-sre")) page = GroupViewPage(browser) row = page.find_member_row("*****@*****.**") assert row.role == "member" row.click_remove_button() modal = page.get_remove_user_modal() modal.confirm() assert page.current_url.endswith("/groups/team-sre?refresh=yes") with pytest.raises(NoSuchElementException): assert page.find_member_row("*****@*****.**")
def test_group_join_group(tmpdir: LocalPath, setup: SetupTest, browser: Chrome) -> None: with setup.transaction(): setup.add_user_to_group("*****@*****.**", "some-group", "owner") setup.create_group("parent-group", join_policy=GroupJoinPolicy.CAN_JOIN) with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups/parent-group/join")) join_page = GroupJoinPage(browser) join_page.set_member("some-group") join_page.set_reason("Testing") join_page.submit() group_page = GroupViewPage(browser) assert group_page.find_member_row("some-group")
def test_expire_last_owner(async_server, browser): # noqa: F811 fe_url = url(async_server, "/groups/sad-team") browser.get(fe_url) page = GroupViewPage(browser) row = page.find_member_row("*****@*****.**") row.click_edit_button() page = GroupEditMemberPage(browser) page.set_expiration("12/31/2999") page.set_reason("Unit Testing") page.submit() assert page.current_url.endswith("/groups/sad-team/edit/user/[email protected]") assert page.has_text(group_ownership_policy.EXCEPTION_MESSAGE)
def test_edit_member_group_role(tmpdir: LocalPath, setup: SetupTest, browser: Chrome) -> None: with setup.transaction(): setup.add_user_to_group("*****@*****.**", "some-group", role="owner") setup.add_group_to_group("other-group", "some-group") with frontend_server(tmpdir, "*****@*****.**") as frontend_url: browser.get(url(frontend_url, "/groups/some-group")) view_page = GroupViewPage(browser) row = view_page.find_member_row("other-group") assert row.role == "member" row.click_edit_button() edit_page = GroupEditMemberPage(browser) with pytest.raises(NoSuchElementException): edit_page.set_role("Owner")
def test_show_group(async_server, browser, groups): # noqa: F811 group = groups["team-sre"] fe_url = url(async_server, "/groups/{}".format(group.name)) browser.get(fe_url) page = GroupViewPage(browser) members = group.my_members() for (_, username) in members: row = page.find_member_row(username) assert row.href.endswith("/users/{}".format(username)) for permission in group.my_permissions(): rows = page.find_permission_rows(permission.name) assert len(rows) == 1 assert rows[0].argument == permission.argument assert rows[0].href.endswith("/permissions/{}".format(permission.name))
def test_show_group(async_server, browser, groups): # noqa: F811 group = groups["team-sre"] fe_url = url(async_server, "/groups/{}".format(group.name)) browser.get(fe_url) page = GroupViewPage(browser) members = group.my_members() for [_, username], _ in members.iteritems(): row = page.find_member_row(username) assert row.href.endswith("/users/{}".format(username)) for permission in group.my_permissions(): rows = page.find_permission_rows(permission.name) assert len(rows) == 1 assert rows[0].argument == permission.argument assert rows[0].href.endswith("/permissions/{}".format(permission.name))