Beispiel #1
0
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"]
Beispiel #2
0
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("*****@*****.**")
Beispiel #3
0
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("*****@*****.**")
Beispiel #4
0
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]")
Beispiel #5
0
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("*****@*****.**")
Beispiel #6
0
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("*****@*****.**")
Beispiel #7
0
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)
Beispiel #8
0
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("*****@*****.**")
Beispiel #9
0
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)
Beispiel #10
0
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("*****@*****.**")
Beispiel #11
0
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)
Beispiel #12
0
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("*****@*****.**")
Beispiel #13
0
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")
Beispiel #14
0
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)
Beispiel #15
0
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)
Beispiel #16
0
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")
Beispiel #17
0
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))
Beispiel #18
0
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))