class TestIdentitiesApi(unittest.TestCase):
    """ Identities Api unit test stubs. """

    def setUp(self):
        self.api = XooaClient()
        api_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcGlLZXkiOiIwOFpKNFhTLTQ2RDRQRVQtRzlSRkZZRy1YMlkySEYzIiwiQXBpU2VjcmV0IjoiMXB5RXdhUHg1SFhLT3hWIiwiUGFzc3BocmFzZSI6IjNiMGM0OGZjZjRjN2M4MDQ4Nzg2ZjkwNmU1ZjE4OTdjIiwiaWF0IjoxNTQ2NTE1ODg3fQ.WtdIW0wVgpb6qR9L7W8ElEu9VQWNg0YlF17ML_HNdbY'
        self.api.set_api_token(api_token)
        pass

    def tearDown(self):
        pass

    def test_authenticated_identity(self):
        current_identity = self.api.current_identity()
        self.assertEqual(type(current_identity), dict)
        pass

    def test_enrollment_sync(self):
        enroll_identity_data = {
            "IdentityName": "string",
            "Access": "r",
            "Attrs": [
                {
                    "name": "string",
                    "ecert": True,
                    "value": "string"
                }
            ],
            "canManageIdentities": True
        }
        enroll_identity = self.api.enroll_identity(enroll_identity_data)
        self.assertEqual(type(enroll_identity), dict)
        pass

    def test_enrollment_async(self):
        enroll_identity_data = {
            "IdentityName": "string",
            "Access": "r",
            "Attrs": [
                {
                    "name": "string",
                    "ecert": True,
                    "value": "string"
                }
            ],
            "canManageIdentities": True
        }
        enroll_identity_async = self.api.enroll_identity_async(enroll_identity_data)
        self.assertEqual(type(enroll_identity_async), dict)
        pass

    def test_get_all_identities(self):
        c = self.api.get_identities()
        self.assertEqual(type(c), list)

    def test_get_identity_information(self):
        enroll_identity_data = {
            "IdentityName": "string",
            "Access": "r",
            "Attrs": [
                {
                    "name": "string",
                    "ecert": True,
                    "value": "string"
                }
            ],
            "canManageIdentities": True
        }
        enroll_identity = self.api.enroll_identity(enroll_identity_data)
        time.sleep(2)
        get_identity = self.api.get_identity(enroll_identity['Id'])
        self.assertEqual(type(get_identity), dict)
        pass

    def test_regenerate_token(self):
        enroll_identity_data = {
            "IdentityName": "string",
            "Access": "r",
            "Attrs": [
                {
                    "name": "string",
                    "ecert": True,
                    "value": "string"
                }
            ],
            "canManageIdentities": True
        }
        enroll_identity = self.api.enroll_identity(enroll_identity_data)
        time.sleep(2)
        regenerate_identity_api_token = self.api.regenerate_identity_api_token(enroll_identity['Id'])
        self.assertEqual(type(regenerate_identity_api_token), dict)
        pass

    def test_delete_identity_sync(self):
        enroll_identity_data = {
            "IdentityName": "string",
            "Access": "r",
            "Attrs": [
                {
                    "name": "string",
                    "ecert": True,
                    "value": "string"
                }
            ],
            "canManageIdentities": True
        }
        enroll_identity = self.api.enroll_identity(enroll_identity_data)
        time.sleep(2)
        delete_identity = self.api.delete_identity(enroll_identity['Id'])
        self.assertEqual(type(delete_identity), dict)
        pass

    def test_delete_identity_async(self):
        enroll_identity_data = {
            "IdentityName": "string",
            "Access": "r",
            "Attrs": [
                {
                    "name": "string",
                    "ecert": True,
                    "value": "string"
                }
            ],
            "canManageIdentities": True
        }
        enroll_identity = self.api.enroll_identity(enroll_identity_data)
        time.sleep(2)
        delete_identity_async = self.api.delete_identity_async(enroll_identity['Id'])
        self.assertEqual(type(delete_identity_async), dict)
        pass
print(app_get_identity)
print()

# To delete identity asynchronously delete_identity_async method
# identity is required argument
print("----- Delete Identity Async -----")
identity = app_enroll_identity['Id']
app_delete_identity_async = xooa_client.delete_identity_async(identity)
print(app_delete_identity_async)
print()

# To delete identity delete_identity method
# identity is required argument
print("----- Delete Identity -----")
identity = app_get_result['result']['Id']
app_delete_identity = xooa_client.delete_identity(identity)
print(app_delete_identity)
print()

# To check whether the transaction has been completed or not, call get_result method
# result_id is required argument
print("----- Result for Enroll Identity Async -----")
result_id = app_delete_identity_async['resultId']
app_get_result = xooa_client.get_result(result_id)
print(app_get_result)
print()

print("----- End -----")
# To subscribe to events call subscribe_all_events method
# callback_on_event is required argument. It is an event handler.