def test_add_todo_fails_on_invalid_user_id(self): server_utils = ServerUtils(todo_db=self.todo_db) todo = server_utils.add_todo(ToDo(user=User(id=0))) assert todo.status == todo_pb2.FAILED todo = server_utils.add_todo(ToDo(user=User(id=-2))) assert todo.status == todo_pb2.FAILED
def update_todo(self, todo_id, is_done=False, delete=False): self._is_valid_id(todo_id, 'todo_id') if is_done and delete: raise ValueError('Both is_done and delete cannot be true together') if delete: todo_response = self.stub.UpdateToDo(ToDo(id=todo_id)) if is_done: todo = ToDo(id=todo_id, is_done=is_done) todo_response = self.stub.UpdateToDo(todo) return todo_response.status == SUCCESS
def test_update_todo_is_done(self): self.todo_db.update_todo.return_value = { 'status': ToDoDb.MARKED_AS_DONE } server_utils = ServerUtils(todo_db=self.todo_db) todo = server_utils.update_todo(ToDo(id=1, user=User(id=1), is_done=True)) assert todo.status == todo_pb2.SUCCESS
def get_todo_list(self, user): if isinstance(user, User) and user.id > 0: todo_list = [] todo_list_dict = self.todo_db.get_todo_list(user.id) if todo_list_dict['status'] == ToDoDb.SUCCESS: for current_todo in todo_list_dict['todo_list']: todo = ToDo(id=current_todo.id, user=User(id=current_todo.user.id), text=current_todo.text, is_done=current_todo.is_done, status=todo_pb2.SUCCESS) todo_list.append(todo) return todo_list return [ ToDo(status=todo_pb2.FAILED), ]
def test_update_todo_delete(self): self.todo_db.update_todo.return_value = { 'status': ToDoDb.DELETED } server_utils = ServerUtils(todo_db=self.todo_db) todo = server_utils.update_todo(ToDo(id=1, is_done=True)) assert todo.status == todo_pb2.SUCCESS
def add_todo(self, todo): if isinstance(todo, ToDo) and todo.text and todo.user.id != 0: todo_dict = self.todo_db.add_todo(todo.user.id, todo.text) if todo_dict['status'] == ToDoDb.SUCCESS: todo.status = todo_pb2.SUCCESS todo.id = todo_dict['todo'].id return todo return ToDo(status=todo_pb2.FAILED)
def update_todo(self, todo): if isinstance(todo, ToDo) and todo.id > 0: status_success_list = (ToDoDb.DELETED, ToDoDb.MARKED_AS_DONE) if self.todo_db.update_todo( todo.id, todo.is_done)['status'] in status_success_list: todo.status = todo_pb2.SUCCESS return todo return ToDo(status=todo_pb2.FAILED)
def test_update_todo_fails_on_db_failed_status(self): self.todo_db.update_todo.return_value = { 'status': ToDoDb.FAILED } server_utils = ServerUtils(todo_db=self.todo_db) todo = server_utils.update_todo(ToDo(id=1, is_done=True)) assert todo.status == todo_pb2.FAILED
def add_todo(self, user_id, todo_text): self._is_valid_id(user_id, 'user_id') todo = ToDo(user=User(id=user_id), text=str(todo_text)) todo_response = self.stub.AddToDo(todo) if todo_response.status == SUCCESS: return todo_response return None
def test_done_text(self): todo = ToDo(id=1, text="Test string") actual_text = TextFormat.todo_done_text(todo) text = '\x1b[2;37;m' + todo.text + self.text_end expected_string = " {0}. {1:<63}".format( todo.id, text[:50]) + TextFormat.green_check() assert expected_string == actual_text
def test_update_todo_fails_on_wrong_arguments(self): server_utils = ServerUtils(todo_db=self.todo_db) todo = server_utils.update_todo(None) assert todo.status == todo_pb2.FAILED todo = server_utils.update_todo("Test") assert todo.status == todo_pb2.FAILED todo = server_utils.update_todo(ToDo(id=-5)) assert todo.status == todo_pb2.FAILED
def test_add_todo_fails_on_invalid_todo(self): server_utils = ServerUtils(todo_db=self.todo_db) todo = server_utils.add_todo(ToDo()) assert todo.status == todo_pb2.FAILED todo = server_utils.add_todo(1) assert todo.status == todo_pb2.FAILED todo = server_utils.add_todo("") assert todo.status == todo_pb2.FAILED
def test_add_todo(self): user_id = 1 self.todo_db.add_todo.return_value = { 'status': ToDoDb.SUCCESS, 'todo': models.ToDo(id=user_id) } server_utils = ServerUtils(todo_db=self.todo_db) todo = server_utils.add_todo(ToDo(text="Todo", user=User(id=1))) assert todo.status == todo_pb2.SUCCESS assert todo.id == user_id
def test_get_todo_list(self): todo_list_data = [ models.ToDo(id=1, user=models.User(id=1), text="Todo 1", is_done=True), models.ToDo(id=1, user=models.User(id=1), text="Todo 1", is_done=True), ] todo_list = [] for todo_item in todo_list_data: todo = ToDo( id=todo_item.id, user=User(id=todo_item.user.id), text=todo_item.text, is_done=todo_item.is_done, status=todo_pb2.SUCCESS ) todo_list.append(todo) self.todo_db.get_todo_list.return_value = { 'todo_list': todo_list_data, 'status': ToDoDb.SUCCESS } server_utils = ServerUtils(todo_db=self.todo_db) assert server_utils.get_todo_list(User(id=1)) == todo_list
class TestClientStub: stub = Mock(spec=TodoServiceStub(channel=grpc.insecure_channel(''))) user = Mock(spec=User()) todo = Mock(spec=ToDo()) id_test_arguments = [0, -20, "test", 15.5] def test_add_user(self): self.user.status = SUCCESS self.stub.AddUser.return_value = self.user client_stub = ClientStub(stub=self.stub) assert client_stub.add_user("Test") == self.user def test_add_user_returns_none_on_failure(self): self.user.status = FAILED self.stub.AddUser.return_value = self.user client_stub = ClientStub(stub=self.stub) assert client_stub.add_user("Test") is None def test_add_todo(self): self.todo.status = SUCCESS self.stub.AddToDo.return_value = self.todo client_stub = ClientStub(stub=self.stub) assert client_stub.add_todo(1, "Test todo") == self.todo def test_add_todo_returns_none_on_failure(self): self.todo.status = FAILED self.stub.AddToDo.return_value = self.todo client_stub = ClientStub(stub=self.stub) assert client_stub.add_todo(1, "Test todo") is None def add_todo_raises_value_error(self): client_stub = ClientStub(stub=self.stub) for user_id in self.id_test_arguments: with pytest.raises(ValueError): client_stub.add_todo(user_id, "Todo test") def test_get_todo_list(self): self.todo.status = SUCCESS todo_list = [self.todo, self.todo, self.todo] self.stub.GetToDoList.return_value = todo_list client_stub = ClientStub(stub=self.stub) assert client_stub.get_todo_list(1) == todo_list def test_get_todo_list_raise_value_error_for_todo_id(self): client_stub = ClientStub(stub=self.stub) for todo_id in self.id_test_arguments: with pytest.raises(ValueError): client_stub.get_todo_list(todo_id) def test_update_todo_with_delete(self): self.todo.status = SUCCESS self.stub.UpdateToDo.return_value = self.todo client_stub = ClientStub(stub=self.stub) assert client_stub.update_todo(1, delete=True) def test_update_todo_with_delete_raise_value_error(self): client_stub = ClientStub(stub=self.stub) for todo_id in self.id_test_arguments: with pytest.raises(ValueError): client_stub.update_todo(todo_id, delete=True) def test_update_todo_with_delete_is_done_raises_value_error(self): client_stub = ClientStub(stub=self.stub) with pytest.raises(ValueError): client_stub.update_todo(1, delete=True, is_done=True) def test_update_todo_with_is_done(self): self.todo.status = SUCCESS self.stub.UpdateToDo.return_value = self.todo client_stub = ClientStub(stub=self.stub) assert client_stub.update_todo(1, is_done=True)
def test_todo_text(self): todo = ToDo(id=1, text="Test string") expected_string = " {0}. {1}".format( todo.id, '\x1b[1;37;m' + todo.text + self.text_end) assert expected_string == TextFormat.todo_text(todo)
def test_add_todo_fails_on_db_failed_status(self): self.todo_db.add_todo.return_value = {'status': ToDoDb.FAILED} server_utils = ServerUtils(todo_db=self.todo_db) todo = server_utils.add_todo(ToDo(text="Todo", user=User(id=1))) assert todo.status == todo_pb2.FAILED
def test_add_todo_fails_without_text(self): server_utils = ServerUtils(todo_db=self.todo_db) todo = server_utils.add_todo(ToDo(user=User(id=1))) assert todo.status == todo_pb2.FAILED