Mock Directory connections to test services that work with users, groups, and organization data.
Note: If you're new to unit testing with Zato, check the tutorial first.
The service:
from zato.server.service import Service
class GetCurrentUser(Service):
name = 'directory.user.current'
def handle(self):
conn = self.cloud.ms365.get('ms365.Directory').conn
with conn.client() as client:
directory = client.impl.directory()
user = directory.get_current_user()
self.response.payload = {
'display_name': user['display_name'],
'email': user['mail'],
'job_title': user['job_title']
}
The test:
from zato_testing import ServiceTestCase
from myapp.services import GetCurrentUser
class TestGetCurrentUser(ServiceTestCase):
def test_returns_current_user(self):
self.set_response('ms365.Directory.directory', {'id': 'dir-123'})
self.set_response('ms365.Directory.directory.get_current_user', {
'display_name': 'John Doe',
'mail': 'john.doe@example.com',
'job_title': 'Software Engineer'
})
service = self.invoke(GetCurrentUser)
self.assertEqual(service.response.payload['display_name'], 'John Doe')
self.assertEqual(service.response.payload['email'], 'john.doe@example.com')
class TestGetUserByEmail(ServiceTestCase):
def test_returns_user(self):
self.set_response('ms365.Directory.directory', {'id': 'dir-123'})
self.set_response('ms365.Directory.directory.get_user', {
'id': 'user-001',
'display_name': 'Jane Smith',
'mail': 'jane.smith@example.com',
'department': 'Engineering'
})
service = self.invoke(GetUserByEmail, email='jane.smith@example.com')
self.assertEqual(service.response.payload['id'], 'user-001')
self.assertEqual(service.response.payload['department'], 'Engineering')
class TestGetUsers(ServiceTestCase):
def test_returns_users(self):
self.set_response('ms365.Directory.directory', {'id': 'dir-123'})
self.set_response('ms365.Directory.directory.get_users', [
{'display_name': 'User One', 'mail': 'user1@example.com'},
{'display_name': 'User Two', 'mail': 'user2@example.com'},
{'display_name': 'User Three', 'mail': 'user3@example.com'}
])
service = self.invoke(GetUsers, limit=50)
self.assertEqual(len(service.response.payload['users']), 3)
class TestGetUserGroups(ServiceTestCase):
def test_returns_groups(self):
self.set_response('ms365.Directory.directory', {'id': 'dir-123'})
self.set_response('ms365.Directory.directory.get_user', {
'id': 'user-001',
'display_name': 'John Doe'
})
self.set_response('ms365.Directory.directory.get_user.get_member_of', [
{'display_name': 'Engineering', 'id': 'group-001'},
{'display_name': 'All Employees', 'id': 'group-002'},
{'display_name': 'Project Alpha', 'id': 'group-003'}
])
service = self.invoke(GetUserGroups, user_id='user-001')
groups = service.response.payload['groups']
self.assertEqual(len(groups), 3)
self.assertEqual(groups[0]['name'], 'Engineering')
class TestGetUserManager(ServiceTestCase):
def test_returns_manager(self):
self.set_response('ms365.Directory.directory', {'id': 'dir-123'})
self.set_response('ms365.Directory.directory.get_user', {
'id': 'user-001',
'display_name': 'John Doe'
})
self.set_response('ms365.Directory.directory.get_user.get_manager', {
'display_name': 'Sarah Manager',
'mail': 'sarah.manager@example.com'
})
service = self.invoke(GetUserManager, user_id='user-001')
self.assertEqual(service.response.payload['manager_name'], 'Sarah Manager')
class TestGetDirectReports(ServiceTestCase):
def test_returns_direct_reports(self):
self.set_response('ms365.Directory.directory', {'id': 'dir-123'})
self.set_response('ms365.Directory.directory.get_user', {
'id': 'manager-001',
'display_name': 'Sarah Manager'
})
self.set_response('ms365.Directory.directory.get_user.get_direct_reports', [
{'display_name': 'Report One', 'mail': 'report1@example.com'},
{'display_name': 'Report Two', 'mail': 'report2@example.com'}
])
service = self.invoke(GetUserDirectReports, user_id='manager-001')
self.assertEqual(len(service.response.payload['direct_reports']), 2)