Mock Tasks connections to test services that work with ToDo lists and tasks.
Note: If you're new to unit testing with Zato, check the tutorial first.
The service:
from zato.server.service import Service
class GetTaskLists(Service):
name = 'tasks.lists.get'
def handle(self):
conn = self.cloud.ms365.get('ms365.Tasks').conn
with conn.client() as client:
todo = client.impl.tasks()
task_lists = todo.get_folders()
self.response.payload = {
'lists': [{'name': tl['name'], 'id': tl['id']} for tl in task_lists]
}
The test:
from zato_testing import ServiceTestCase
from myapp.services import GetTaskLists
class TestGetTaskLists(ServiceTestCase):
def test_returns_task_lists(self):
self.set_response('ms365.Tasks.tasks', {'id': 'tasks-123'})
self.set_response('ms365.Tasks.tasks.get_folders', [
{'name': 'Tasks', 'id': 'list-001'},
{'name': 'Shopping', 'id': 'list-002'},
{'name': 'Work', 'id': 'list-003'}
])
service = self.invoke(GetTaskLists)
lists = service.response.payload['lists']
self.assertEqual(len(lists), 3)
self.assertEqual(lists[0]['name'], 'Tasks')
class TestGetTasks(ServiceTestCase):
def test_returns_tasks_from_default_list(self):
self.set_response('ms365.Tasks.tasks', {'id': 'tasks-123'})
self.set_response('ms365.Tasks.tasks.get_default_folder', {'id': 'list-001', 'name': 'Tasks'})
self.set_response('ms365.Tasks.tasks.get_default_folder.get_tasks', [
{'title': 'Buy groceries', 'id': 'task-001', 'status': 'notStarted'},
{'title': 'Call dentist', 'id': 'task-002', 'status': 'inProgress'},
{'title': 'Pay bills', 'id': 'task-003', 'status': 'completed'}
])
service = self.invoke(GetTasks)
self.assertEqual(len(service.response.payload['tasks']), 3)
self.assertEqual(service.response.payload['tasks'][1]['status'], 'inProgress')
def test_returns_tasks_from_specific_list(self):
self.set_response('ms365.Tasks.tasks', {'id': 'tasks-123'})
self.set_response('ms365.Tasks.tasks.get_folder', {'id': 'list-002', 'name': 'Work'})
self.set_response('ms365.Tasks.tasks.get_folder.get_tasks', [
{'title': 'Review PR', 'id': 'task-101', 'status': 'notStarted'},
{'title': 'Write docs', 'id': 'task-102', 'status': 'notStarted'}
])
service = self.invoke(GetTasks, list_id='list-002')
self.assertEqual(len(service.response.payload['tasks']), 2)
class TestCreateTask(ServiceTestCase):
def test_creates_task(self):
self.set_response('ms365.Tasks.tasks', {'id': 'tasks-123'})
self.set_response('ms365.Tasks.tasks.get_default_folder', {'id': 'list-001', 'name': 'Tasks'})
self.set_response('ms365.Tasks.tasks.get_default_folder.new_task', {
'object_id': 'task-new-001',
'title': None,
'due': None
})
self.set_response('ms365.Tasks.tasks.get_default_folder.new_task.save', True)
service = self.invoke(CreateTask,
title='New Important Task',
due_date='2024-03-25'
)
self.assertEqual(service.response.payload['created'], True)
self.assertEqual(service.response.payload['task_id'], 'task-new-001')
class TestCompleteTask(ServiceTestCase):
def test_completes_task(self):
self.set_response('ms365.Tasks.tasks', {'id': 'tasks-123'})
self.set_response('ms365.Tasks.tasks.get_default_folder', {'id': 'list-001', 'name': 'Tasks'})
self.set_response('ms365.Tasks.tasks.get_default_folder.get_task', {
'id': 'task-001',
'title': 'Task to Complete'
})
self.set_response('ms365.Tasks.tasks.get_default_folder.get_task.mark_completed', None)
self.set_response('ms365.Tasks.tasks.get_default_folder.get_task.save', True)
service = self.invoke(CompleteTask, task_id='task-001')
self.assertEqual(service.response.payload['completed'], True)
class TestDeleteTask(ServiceTestCase):
def test_deletes_task(self):
self.set_response('ms365.Tasks.tasks', {'id': 'tasks-123'})
self.set_response('ms365.Tasks.tasks.get_default_folder', {'id': 'list-001', 'name': 'Tasks'})
self.set_response('ms365.Tasks.tasks.get_default_folder.get_task', {
'id': 'task-001',
'title': 'Task to Delete'
})
self.set_response('ms365.Tasks.tasks.get_default_folder.get_task.delete', True)
service = self.invoke(DeleteTask, task_id='task-001')
self.assertEqual(service.response.payload['deleted'], True)
class TestCreateTaskList(ServiceTestCase):
def test_creates_task_list(self):
self.set_response('ms365.Tasks.tasks', {'id': 'tasks-123'})
self.set_response('ms365.Tasks.tasks.new_folder', {
'id': 'list-new-001',
'name': 'New List'
})
service = self.invoke(CreateTaskList, name='New List')
self.assertEqual(service.response.payload['created'], True)
self.assertEqual(service.response.payload['list_id'], 'list-new-001')