Beispiel #1
0
    async def test_create_get_sign_on_policy(self, fs):
        # Instantiate Mock Client
        client = MockOktaClient(fs)

        # Create Policy
        policy_model = models.OktaSignOnPolicy({
            "name":
            f"{TestPoliciesResource.SDK_PREFIX} Test-Sign-On",
            "status":
            "ACTIVE",
            "description":
            "Test policy applies for tests only"
        })

        created_policy, _, err = await client.create_policy(policy_model)
        assert err is None
        assert isinstance(created_policy, models.OktaSignOnPolicy)
        assert created_policy.name == policy_model.name
        assert created_policy.description == policy_model.description
        assert created_policy.status == "ACTIVE"
        assert created_policy.type == models.PolicyType.OKTA_SIGN_ON

        # Retrieve
        retrieved_policy, _, err = await client.get_policy(created_policy.id)
        assert err is None
        assert retrieved_policy.id == created_policy.id
        assert retrieved_policy.name == created_policy.name
        assert retrieved_policy.description == created_policy.description
        assert retrieved_policy.status == created_policy.status
        assert retrieved_policy.type == created_policy.type

        # Delete
        _, err = await client.delete_policy(created_policy.id)
        assert err is None
Beispiel #2
0
    async def test_create_get_sign_on_policy_with_group_conditions(self, fs):
        # Instantiate Mock Client
        client = MockOktaClient(fs)

        # Create Group
        GROUP_NAME = "Group-Target-Test"
        group_obj = models.Group(
            {"profile": models.GroupProfile({"name": GROUP_NAME})})
        created_group, _, err = await client.create_group(group_obj)
        assert err is None
        assert isinstance(created_group, models.Group)

        # Create Policy & Conditions
        policy_model = models.OktaSignOnPolicy({
            "name":
            f"{TestPoliciesResource.SDK_PREFIX} Test-Sign-On",
            "status":
            "ACTIVE",
            "description":
            "Test policy applies for tests only"
        })

        policy_conditions = models.OktaSignOnPolicyConditions({
            "people":
            models.PolicyPeopleCondition({
                "groups":
                models.GroupCondition({"include": [created_group.id]})
            })
        })

        policy_model.conditions = policy_conditions

        created_policy, _, err = await client.create_policy(policy_model)
        assert err is None
        assert isinstance(created_policy, models.OktaSignOnPolicy)
        assert created_policy.name == policy_model.name
        assert created_policy.description == policy_model.description
        assert created_policy.status == "ACTIVE"
        assert created_policy.type == models.PolicyType.OKTA_SIGN_ON
        assert len(created_policy.conditions.people.groups.include) == 1
        assert created_group.id in \
            created_policy.conditions.people.groups.include

        # Retrieve
        retrieved_policy, _, err = await client.get_policy(created_policy.id)
        assert err is None
        assert retrieved_policy.id == created_policy.id
        assert retrieved_policy.name == created_policy.name
        assert retrieved_policy.description == created_policy.description
        assert retrieved_policy.status == created_policy.status
        assert retrieved_policy.type == created_policy.type
        assert len(retrieved_policy.conditions.people.groups.include) == 1
        assert created_group.id in \
            retrieved_policy.conditions.people.groups.include

        # Delete Policy + Group
        _, err = await client.delete_policy(created_policy.id)
        assert err is None
        _, err = await client.delete_group(created_group.id)
        assert err is None
    async def test_update_policy(self, fs):
        # Instantiate Mock Client
        client = MockOktaClient(fs)

        # Create Policy
        policy_model = models.OktaSignOnPolicy({
            "name":
            f"{TestPoliciesResource.SDK_PREFIX} Test-Sign-On",
            "status":
            "ACTIVE",
            "description":
            "Test policy applies for tests only"
        })

        try:
            created_policy, _, err = await client.create_policy(policy_model)
            assert err is None
            assert isinstance(created_policy, models.OktaSignOnPolicy)
            assert created_policy.name == policy_model.name
            assert created_policy.description == policy_model.description
            assert created_policy.status == "ACTIVE"
            assert created_policy.type == models.PolicyType.OKTA_SIGN_ON

            # Retrieve
            retrieved_policy, _, err = await client.get_policy(
                created_policy.id)
            assert err is None
            assert retrieved_policy.id == created_policy.id
            assert retrieved_policy.name == created_policy.name
            assert retrieved_policy.description == created_policy.description
            assert retrieved_policy.status == created_policy.status
            assert retrieved_policy.type == created_policy.type

            # Update
            NEW_NAME = policy_model.name + "UPDATED"
            NEW_DESC = policy_model.description + "UPDATED"
            created_policy.name = NEW_NAME
            created_policy.description = NEW_DESC
            updated_policy, _, err = await client.update_policy(
                created_policy.id, created_policy)
            assert err is None
            assert updated_policy.id == created_policy.id
            assert updated_policy.name == NEW_NAME
            assert updated_policy.description == NEW_DESC

            # Retrieve
            retrieved_policy, _, err = await client.get_policy(
                created_policy.id)
            assert err is None
            assert retrieved_policy.id == created_policy.id
            assert retrieved_policy.name == NEW_NAME
            assert retrieved_policy.description == NEW_DESC
            assert retrieved_policy.status == created_policy.status
            assert retrieved_policy.type == created_policy.type

        finally:
            # Delete
            _, err = await client.delete_policy(created_policy.id)
            assert err is None
    async def test_delete_policy(self, fs):
        # Instantiate Mock Client
        client = MockOktaClient(fs)

        # Create Policy
        policy_model = models.OktaSignOnPolicy({
            "name":
            f"{TestPoliciesResource.SDK_PREFIX} Test-Sign-On",
            "status":
            "ACTIVE",
            "description":
            "Test policy applies for tests only"
        })

        try:
            created_policy, _, err = await client.create_policy(policy_model)
            assert err is None
            assert isinstance(created_policy, models.OktaSignOnPolicy)
            assert created_policy.name == policy_model.name
            assert created_policy.description == policy_model.description
            assert created_policy.status == "ACTIVE"
            assert created_policy.type == models.PolicyType.OKTA_SIGN_ON

            # Retrieve
            retrieved_policy, _, err = await client.get_policy(
                created_policy.id)
            assert err is None
            assert retrieved_policy.id == created_policy.id
            assert retrieved_policy.name == created_policy.name
            assert retrieved_policy.description == created_policy.description
            assert retrieved_policy.status == created_policy.status
            assert retrieved_policy.type == created_policy.type

            # Delete
            _, err = await client.delete_policy(created_policy.id)
            assert err is None

            # Retrieve
            retrieved_policy, resp, err = await \
                client.get_policy(created_policy.id)
            assert err is not None
            assert isinstance(err, OktaAPIError)
            assert resp.get_status() == HTTPStatus.NOT_FOUND
            assert retrieved_policy is None
        finally:
            try:
                _, err = await client.delete_policy(created_policy.id)
            except Exception:
                pass
    async def test_activate_deactivate_policy_rule(self, fs):
        # Instantiate Mock Client
        client = MockOktaClient(fs)

        # Create Policy
        policy_model = models.OktaSignOnPolicy({
            "name":
            f"{TestPoliciesResource.SDK_PREFIX} Test-Sign-On",
            "status":
            "ACTIVE",
            "description":
            "Test policy applies for tests only"
        })

        try:
            created_policy, _, err = await client.create_policy(policy_model)
            assert err is None
            assert isinstance(created_policy, models.OktaSignOnPolicy)
            assert created_policy.name == policy_model.name
            assert created_policy.description == policy_model.description
            assert created_policy.status == "ACTIVE"
            assert created_policy.type == models.PolicyType.OKTA_SIGN_ON

            # Create Policy Rule
            policy_rule_model = models.OktaSignOnPolicyRule({
                "name":
                f"{TestPoliciesResource.SDK_PREFIX} Test-Sign-On-Rule",
                "actions":
                models.OktaSignOnPolicyRuleActions({
                    "signon":
                    models.OktaSignOnPolicyRuleSignonActions({
                        "access":
                        "ALLOW",
                        "requireFactor":
                        "false",
                        "rememberDeviceByDefault":
                        "false",
                        "session":
                        models.OktaSignOnPolicyRuleSignonSessionActions({
                            "usePersistentCookie":
                            "false",
                            "maxSessionIdleMinutes":
                            720,
                            "maxSessionLifetimeMinutes":
                            0
                        })
                    })
                }),
                "conditions":
                models.OktaSignOnPolicyRuleConditions({
                    "authContext":
                    models.PolicyRuleAuthContextCondition({"authType": "ANY"})
                })
            })
            created_policy_rule, _, err = await client.create_policy_rule(
                created_policy.id, policy_rule_model)
            assert err is None
            assert isinstance(created_policy_rule, models.OktaSignOnPolicyRule)
            assert created_policy_rule.name == policy_rule_model.name
            assert created_policy_rule.type == "SIGN_ON"
            assert created_policy_rule.status == "ACTIVE"
            assert created_policy_rule.actions.signon.access == "ALLOW"
            assert created_policy_rule.actions.signon.require_factor is False
            assert created_policy_rule.actions.signon.remember_device_by_default\
                is False
            assert created_policy_rule.actions.signon.session.\
                use_persistent_cookie is False
            assert created_policy_rule.actions.signon.session.\
                max_session_idle_minutes == 720
            assert created_policy_rule.actions.signon.session.\
                max_session_lifetime_minutes == 0
            assert created_policy_rule.conditions.auth_context.auth_type == "ANY"

            # Retrieve
            retrieved_policy_rule, _, err = await client.get_policy_rule(
                created_policy.id, created_policy_rule.id)
            assert err is None
            assert retrieved_policy_rule.id == created_policy_rule.id
            assert retrieved_policy_rule.name == created_policy_rule.name
            assert retrieved_policy_rule.status == "ACTIVE"
            assert isinstance(retrieved_policy_rule,
                              models.OktaSignOnPolicyRule)

            # Deactivate
            _, err = await client.deactivate_policy_rule(
                created_policy.id, created_policy_rule.id)
            assert err is None

            # Retrieve
            retrieved_policy_rule, _, err = await client.get_policy_rule(
                created_policy.id, created_policy_rule.id)
            assert err is None
            assert retrieved_policy_rule.id == created_policy_rule.id
            assert retrieved_policy_rule.name == created_policy_rule.name
            assert retrieved_policy_rule.status == "INACTIVE"
            assert isinstance(retrieved_policy_rule,
                              models.OktaSignOnPolicyRule)

            # Reactivate
            _, err = await client.activate_policy_rule(created_policy.id,
                                                       created_policy_rule.id)
            assert err is None

            # Retrieve
            retrieved_policy_rule, _, err = await client.get_policy_rule(
                created_policy.id, created_policy_rule.id)
            assert err is None
            assert retrieved_policy_rule.id == created_policy_rule.id
            assert retrieved_policy_rule.name == created_policy_rule.name
            assert retrieved_policy_rule.status == "ACTIVE"
            assert isinstance(retrieved_policy_rule,
                              models.OktaSignOnPolicyRule)

        finally:
            errors = []
            # Delete
            try:
                _, err = await \
                    client.delete_policy_rule(
                        created_policy.id, created_policy_rule.id)
                assert err is None
            except Exception as exc:
                errors.append(exc)
            try:
                _, err = await client.delete_policy(created_policy.id)
                assert err is None
            except Exception as exc:
                errors.append(exc)
            assert len(errors) == 0
    async def test_list_policies_by_type(self, fs):
        # Instantiate Mock Client
        client = MockOktaClient(fs)

        # Create Policies
        policy_model = models.OktaSignOnPolicy({
            "name":
            f"{TestPoliciesResource.SDK_PREFIX} Test-Sign-On",
            "status":
            "ACTIVE",
            "description":
            "Test sign on policy applies for tests only"
        })

        policy_model_2 = models.PasswordPolicy({
            "name":
            f"{TestPoliciesResource.SDK_PREFIX} Test-Password",
            "status":
            "ACTIVE",
            "description":
            "Test password policy applies for tests only"
        })

        try:
            created_oss_policy, _, err = await client.create_policy(
                policy_model)
            assert err is None
            assert isinstance(created_oss_policy, models.OktaSignOnPolicy)
            assert created_oss_policy.name == policy_model.name
            assert created_oss_policy.description == policy_model.description
            assert created_oss_policy.status == "ACTIVE"
            assert created_oss_policy.type == models.PolicyType.OKTA_SIGN_ON

            created_pw_policy, _, err = await client.create_policy(
                policy_model_2)
            assert err is None
            assert isinstance(created_pw_policy, models.PasswordPolicy)
            assert created_pw_policy.name == policy_model_2.name
            assert created_pw_policy.description == policy_model_2.description
            assert created_pw_policy.status == "ACTIVE"
            assert created_pw_policy.type == models.PolicyType.PASSWORD

            # List by type
            query_params_list_sign_on = {"type": "OKTA_SIGN_ON"}
            sign_on_policies, _, err = await \
                client.list_policies(query_params_list_sign_on)
            assert err is None
            assert isinstance(sign_on_policies, list)
            assert next((plcy for plcy in sign_on_policies
                         if plcy.id == created_oss_policy.id))

            query_params_list_pw = {"type": "PASSWORD"}
            sign_on_policies, _, err = await \
                client.list_policies(query_params_list_pw)
            assert err is None
            assert isinstance(sign_on_policies, list)
            assert next((plcy for plcy in sign_on_policies
                         if plcy.id == created_pw_policy.id))

        finally:
            errors = []
            # Delete
            try:
                _, err = await client.delete_policy(created_oss_policy.id)
                assert err is None
            except Exception as exc:
                errors.append(exc)
            try:
                _, err = await client.delete_policy(created_pw_policy.id)
                assert err is None
            except Exception as exc:
                errors.append(exc)
            assert len(errors) == 0