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
Beispiel #2
0
    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
Beispiel #4
0
    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
Beispiel #6
0
 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)
Beispiel #7
0
 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
Beispiel #9
0
    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