Skip to content

Commit

Permalink
✅ Adds User and Groups API endpoint tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jmelberg-okta committed Mar 4, 2017
1 parent a0e5e65 commit 4496b95
Show file tree
Hide file tree
Showing 12 changed files with 183 additions and 171 deletions.
11 changes: 8 additions & 3 deletions okta/UserGroupsClient.py
Expand Up @@ -6,8 +6,13 @@


class UserGroupsClient(ApiClient):
def __init__(self, base_url, api_token):
ApiClient.__init__(self, base_url + '/api/v1/groups', api_token)
def __init__(self, *args, **kwargs):
if 'base_url' in kwargs and 'api_token' in kwargs:
kwargs['base_url'] += '/api/v1/groups'
else:
kwargs['base_url'] = args[0] + '/api/v1/groups'
kwargs['api_token'] = args[1]
ApiClient.__init__(self, **kwargs)

# CRUD

Expand Down Expand Up @@ -131,4 +136,4 @@ def add_user_to_group_by_id(self, gid, uid):
:type uid: str
:return: None
"""
response = ApiClient.put_path(self, '/{0}/users/{1}'.format(gid, uid))
response = ApiClient.put_path(self, '/{0}/users/{1}'.format(gid, uid))
11 changes: 8 additions & 3 deletions okta/UsersClient.py
Expand Up @@ -8,8 +8,13 @@


class UsersClient(ApiClient):
def __init__(self, base_url, api_token):
ApiClient.__init__(self, base_url + '/api/v1/users', api_token)
def __init__(self, *args, **kwargs):
if 'base_url' in kwargs and 'api_token' in kwargs:
kwargs['base_url'] += '/api/v1/users'
else:
kwargs['base_url'] = args[0] + '/api/v1/users'
kwargs['api_token'] = args[1]
ApiClient.__init__(self, **kwargs)

# CRUD

Expand Down Expand Up @@ -72,7 +77,7 @@ def create_user(self, user, activate=False):
:type activate: bool
:rtype: User
"""
if activate is None:
if activate is False:
response = ApiClient.post_path(self, '/', user)
else:
params = {
Expand Down
23 changes: 14 additions & 9 deletions okta/framework/ApiClient.py
Expand Up @@ -8,9 +8,9 @@

class ApiClient(object):

def __init__(self, base_url, api_token):
self.base_url = base_url
self.api_token = api_token
def __init__(self, *args, **kwargs):
self.base_url = kwargs['base_url'] or args[0]
self.api_token = kwargs['api_token'] or args[1]
self.api_version = 1
self.max_attempts = 4

Expand All @@ -23,9 +23,12 @@ def __init__(self, base_url, api_token):
self.headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'SSWS ' + api_token
'Authorization': 'SSWS ' + self.api_token
}

if 'headers' in kwargs:
self.headers.update(kwargs['headers'])

def get(self, url, params=None, attempts=0):
params_str = self.__dict_to_query_params(params)
resp = requests.get(url + params_str, headers=self.headers)
Expand All @@ -36,19 +39,21 @@ def get(self, url, params=None, attempts=0):
return self.get(url, params, attempts)

def put(self, url, data=None, params=None, attempts=0):
d = json.dumps(data, cls=Serializer)
if data:
data = json.dumps(data, cls=Serializer)
params_str = self.__dict_to_query_params(params)
resp = requests.put(url + params_str, data=d, headers=self.headers)
resp = requests.put(url + params_str, data=data, headers=self.headers)
attempts += 1
if self.__check_response(resp, attempts):
return resp
else:
return self.put(url, data, params, attempts)

def post(self, url, data=None, params=None, attempts=0):
d = json.dumps(data, cls=Serializer)
if data:
data = json.dumps(data, cls=Serializer, separators=(',', ':'))
params_str = self.__dict_to_query_params(params)
resp = requests.post(url + params_str, data=d, headers=self.headers)
resp = requests.post(url + params_str, data=data, headers=self.headers)
attempts += 1
if self.__check_response(resp, attempts):
return resp
Expand Down Expand Up @@ -99,4 +104,4 @@ def __dict_to_query_params(d):

param_list = [param + '=' + (str(value).lower() if type(value) == bool else str(value))
for param, value in six.iteritems(d) if value is not None]
return '?' + "&".join(param_list)
return '?' + "&".join(param_list)
6 changes: 3 additions & 3 deletions okta/framework/Utils.py
Expand Up @@ -99,7 +99,7 @@ def replace_alt_names(obj, d):
built = d.copy()
if hasattr(obj, 'alt_names'):
for key, value in six.iteritems(obj.alt_names):
built[key] = d[value]
del built[value]

if value in built:
built[key] = built[value]
del built[value]
return built
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -24,7 +24,7 @@
"record-new-tapes": "npm run test:mock-okta || exit 0;",
"postrecord-new-tapes": "npm run stop:mock-okta",
"pretest": "npm run start:mock-okta",
"test": "echo \"Error: no test specified\" && exit 1;",
"test": "python -m unittest discover ./tests '*.py'",
"posttest": "npm run check:mock-okta"
},
"devDependencies": {
Expand Down
25 changes: 0 additions & 25 deletions tests/AppInstanceClientTest.py

This file was deleted.

15 changes: 0 additions & 15 deletions tests/AuthClientTest.py

This file was deleted.

18 changes: 0 additions & 18 deletions tests/EventsClientTest.py

This file was deleted.

2 changes: 1 addition & 1 deletion tests/SerializationTest.py
Expand Up @@ -190,4 +190,4 @@ def test_embedded_deserialization(self):

self.assertTrue(isinstance(result.embedded.user, User), "Embedded User attribute isn't deserialized properly")

self.assertEqual(len(result.embedded.factors), 2, "Embedded factors attribute isn't deserialized properly")
self.assertEqual(len(result.embedded.factors), 2, "Embedded factors attribute isn't deserialized properly")
40 changes: 0 additions & 40 deletions tests/SessionsClientTest.py

This file was deleted.

105 changes: 80 additions & 25 deletions tests/UserGroupsClientTest.py
@@ -1,35 +1,90 @@
import unittest
import os
import json

from okta import UserGroupsClient
from okta.models.usergroup import UserGroup
from okta import UsersClient
from okta.models.usergroup import UserGroup
from okta.models.user import User
import random
import unittest
import os

config_path = os.path.normpath(os.path.join(os.path.dirname(__file__),
'../.sdk.config.json'))

with open(config_path) as sdk_config_data:
sdk_config = json.load(sdk_config_data)


def build_client(test_description):
url = '{}:{}'.format(sdk_config['mockOkta']['proxy'],
sdk_config['mockOkta']['port'])
return UserGroupsClient(
base_url=url,
api_token=sdk_config['mockOkta']['apiKey'],
headers={
'x-test-description': test_description
}
)


def build_users_client(test_description):
url = '{}:{}'.format(sdk_config['mockOkta']['proxy'],
sdk_config['mockOkta']['port'])
return UsersClient(
base_url=url,
api_token=sdk_config['mockOkta']['apiKey'],
headers={
'x-test-description': test_description
}
)


class UserGroupsClientTest(unittest.TestCase):

def setUp(self):
self.client = UserGroupsClient(os.environ.get('OKTA_TEST_URL'), os.environ.get('OKTA_TEST_KEY'))
self.user_client = UsersClient(os.environ.get('OKTA_TEST_URL'), os.environ.get('OKTA_TEST_KEY'))
def test_requests_a_group(self):
client = build_client('/api/v1/groups/:id - requests a group')
groups = client.get_groups()
client.get_group(groups[0].id)

def test_create_a_group(self):
client = build_client('/api/v1/groups/:id - creates a group')
group = {
'profile': {
'name': 'West Coast Users',
'description': 'Straight Outta Compton'
}
}
client.create_group(group)

def test_updates_a_group(self):
client = build_client('/api/v1/groups/:id - updates a group')
groups = client.get_groups()
group_ids = [group.id for group in groups
if group.profile.name == 'TestGroup']
updated_group = {
'profile': {
'name': 'TestGroup',
'description': 'Amended description'
}
}
client.update_group_by_id(group_ids[0], updated_group)

def test_request_group_members(self):
client = build_client('/api/v1/groups/:id - request group members')
groups = client.get_groups()
client.get_group_users(groups[0].id)

def test_single_group(self):
name = 'random_group_' + str(random.random())
group = UserGroup(name=name, description='something interesting here')
group = self.client.create_group(group)
self.assertEqual(group.profile.name, name, "The name for the group wasn't set properly")
def test_delete_group(self):
client = build_client('/api/v1/groups/:id - deletes a group')
groups = client.get_groups()
group_ids = [group.id for group in groups
if group.profile.name == 'DeleteGroup']
client.delete_group(group_ids[0])

def test_add_user_to_group(self):
# Create group
name = 'random_group_' + str(random.random())
group = UserGroup(name=name, description='something interesting here')
group = self.client.create_group(group)

# Create user
user = User(login='fake' + str(random.random()) + '@asdf.com',
email='fake@asdf.com',
firstName='Joe',
lastName='Schmoe')
user = self.user_client.create_user(user, activate=False)

self.client.add_user_to_group(group, user)
header_description = '/api/v1/groups/:id - add user to group'
client = build_client(header_description)
user_client = build_users_client(header_description)
group = [group for group in client.get_groups()
if group.profile.name == 'TestGroup']
user = user_client.get_user('mocktestexample-frutis@mocktestexample.com')
client.add_user_to_group(group[0], user)

0 comments on commit 4496b95

Please sign in to comment.