import json from test.fixtures import * from test.test_ldap import mock_ldap from mock import patch from data import model from endpoints.api import api from endpoints.api.organization import Organization from endpoints.api.team import OrganizationTeamSyncing, TeamMemberList from endpoints.api.test.shared import conduct_api_call from endpoints.test.shared import client_with_identity SYNCED_TEAM_PARAMS = {"orgname": "sellnsmall", "teamname": "synced"} UNSYNCED_TEAM_PARAMS = {"orgname": "sellnsmall", "teamname": "owners"} def test_team_syncing(app): with mock_ldap() as ldap: with patch("endpoints.api.team.authentication", ldap): with client_with_identity("devtable", app) as cl: config = { "group_dn": "cn=AwesomeFolk", } conduct_api_call(cl, OrganizationTeamSyncing, "POST", UNSYNCED_TEAM_PARAMS, config) # Ensure the team is now synced. sync_info = model.team.get_team_sync_information( UNSYNCED_TEAM_PARAMS["orgname"], UNSYNCED_TEAM_PARAMS["teamname"] ) assert sync_info is not None assert json.loads(sync_info.config) == config # Remove the syncing. conduct_api_call(cl, OrganizationTeamSyncing, "DELETE", UNSYNCED_TEAM_PARAMS, None) # Ensure the team is no longer synced. sync_info = model.team.get_team_sync_information( UNSYNCED_TEAM_PARAMS["orgname"], UNSYNCED_TEAM_PARAMS["teamname"] ) assert sync_info is None def test_team_member_sync_info_unsynced_superuser(app): with mock_ldap() as ldap: with patch("endpoints.api.team.authentication", ldap): # Check for an unsynced team, with superuser. with client_with_identity("devtable", app) as cl: resp = conduct_api_call(cl, TeamMemberList, "GET", UNSYNCED_TEAM_PARAMS) assert "can_sync" in resp.json assert resp.json["can_sync"]["service"] == "ldap" assert "synced" not in resp.json def test_team_member_sync_info_unsynced_nonsuperuser(app): with mock_ldap() as ldap: with patch("endpoints.api.team.authentication", ldap): # Check for an unsynced team, with non-superuser. with client_with_identity("randomuser", app) as cl: resp = conduct_api_call(cl, TeamMemberList, "GET", UNSYNCED_TEAM_PARAMS) assert "can_sync" not in resp.json assert "synced" not in resp.json def test_team_member_sync_info_synced_superuser(app): with mock_ldap() as ldap: with patch("endpoints.api.team.authentication", ldap): # Check for a synced team, with superuser. with client_with_identity("devtable", app) as cl: resp = conduct_api_call(cl, TeamMemberList, "GET", SYNCED_TEAM_PARAMS) assert "can_sync" in resp.json assert resp.json["can_sync"]["service"] == "ldap" assert "synced" in resp.json assert "last_updated" in resp.json["synced"] assert "group_dn" in resp.json["synced"]["config"] def test_team_member_sync_info_synced_nonsuperuser(app): with mock_ldap() as ldap: with patch("endpoints.api.team.authentication", ldap): # Check for a synced team, with non-superuser. with client_with_identity("randomuser", app) as cl: resp = conduct_api_call(cl, TeamMemberList, "GET", SYNCED_TEAM_PARAMS) assert "can_sync" not in resp.json assert "synced" in resp.json assert "last_updated" not in resp.json["synced"] assert "config" not in resp.json["synced"] def test_organization_teams_sync_bool(app): with mock_ldap() as ldap: with patch("endpoints.api.organization.authentication", ldap): # Ensure synced teams are marked as such in the organization teams list. with client_with_identity("devtable", app) as cl: resp = conduct_api_call(cl, Organization, "GET", {"orgname": "sellnsmall"}) assert not resp.json["teams"]["owners"]["is_synced"] assert resp.json["teams"]["synced"]["is_synced"]