Schedule a demo

Testing Directory

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.

Getting current user

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')

Getting user by email

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')

Listing users

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)

Getting user groups

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')

Getting user manager

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')

Getting direct reports

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)

See also