Example #1
0
def test_user_serializer():
    task_content = 'test content'
    task_name = 'test name'

    task_dict = dict(name=task_name,
                     content=task_content,
                     status=dict(id=1, name='new'),
                     creator=dict(id=1,
                                  name='creator',
                                  roles=[dict(id=1, name='creator')]),
                     doer=None,
                     id=1)

    status = TaskStatus(**(task_dict['status']))

    creator = User(id=task_dict['creator']['id'],
                   name=task_dict['creator']['name'],
                   roles=[
                       UserRole(name=role['name'], id=role['id'])
                       for role in task_dict['creator']['roles']
                   ])

    task = Task(
        id=task_dict['id'],
        name=task_dict['name'],
        content=task_dict['content'],
        status=status,
        creator=creator,
        doer=None,
    )

    expected_json = json.dumps(task_dict)

    assert json.loads(json.dumps(task, cls=TaskEncoder)) ==\
        json.loads(expected_json)
    def _to_domain_model(self, data):
        status = TaskStatus(id=data.status.id, name=data.status.name)

        creator = User(
            id=data.creator.id,
            name=data.creator.name,
            roles=[UserRole(id=role.id, name=role.name)
                   for role in data.creator.roles]
        )

        doer = None

        if data.doer:
            doer = User(
                id=data.doer.id,
                name=data.doer.name,
                roles=[UserRole(id=role.id, name=role.name)
                       for role in data.doer.roles]
            )

        return Task(
            name=data.name,
            content=data.content,
            status=status,
            creator=creator,
            doer=doer,
            id=data.id
        )
    def one(self, id):
        status = self.status_model.query.get(id)

        if not status:
            raise NoResultFound(id, TaskStatus.__name__)

        return TaskStatus(id=status.id, name=status.name)
Example #4
0
def test_task_status_serializer():
    status_dict = dict(name='new', id=1)
    status = TaskStatus(**status_dict)

    expected_json = json.dumps(status_dict)

    assert json.loads(json.dumps(status, cls=TaskStatusEncoder)) ==\
        json.loads(expected_json)
    def process_request(self, request):
        new_status = TaskStatus(name=request.name)
        self._call_before_execution_hooks(dict(request=request, status=new_status))

        response = self.statuses_repo.save(new_status)
        self._call_after_execution_hooks(dict(request=request, status=response))

        return ResponseSuccess(response)
def test_task_status():
    status_id = 1
    status_name = 'canceled'
    status = TaskStatus(name=status_name, id=status_id)

    assert status.id == status_id
    assert status.name == status_name
    assert isinstance(status, DomainModel)
Example #7
0
def test_statuses_repository_update():
    id = 1
    name = 'suspended'

    result = repository.update(TaskStatus(id=id, name=name))

    assert isinstance(result, DomainModel)
    assert result.id == id
    assert result.name == name
def test_tasks_repository_update_not_existing_task():
    task = Task(name='task_name',
                content='task_content',
                status=TaskStatus(id=1, name='new'),
                creator=User(id=1,
                             name='creator',
                             roles=[UserRole(id=1, name='creator')]),
                doer=None,
                id=9)

    with pytest.raises(NoResultFound):
        repository.update(task)
Example #9
0
def test_get_status_details_action():
    status = mock.Mock()
    status = TaskStatus(name='new', id=1)
    statuses_repo = mock.Mock()
    statuses_repo.one.return_value = status
    request = GetTaskStatusDetailsRequest(status.id)

    action = GetTaskStatusDetailsAction(statuses_repo)
    response = action.execute(request)

    assert bool(response) is True
    statuses_repo.one.assert_called_once_with(status.id)
    assert response.value == status
    def list(self, filters=None):
        if not filters:
            result = self.status_model.query.all()
        else:
            filters = self._parse_filters(filters)
            filters_expression = []

            for filter in filters:
                key = getattr(self.status_model, filter.key)
                filters_expression.append(
                    getattr(key, filter.operator)(filter.value))

            result = self.status_model.query.filter(*filters_expression).all()

        return [TaskStatus(id=status.id, name=status.name) for status in result]
Example #11
0
def test_get_status_details_action_handles_bad_request():
    status = mock.Mock()
    status = TaskStatus(name='new', id=1)
    statuses_repo = mock.Mock()
    statuses_repo.one.return_value = status
    request = GetTaskStatusDetailsRequest(status_id=None)

    action = GetTaskStatusDetailsAction(statuses_repo)
    response = action.execute(request)

    assert bool(response) is False
    assert not statuses_repo.one.called
    assert response.value == {
        'type': ResponseFailure.PARAMETER_ERROR,
        'message': 'status_id: is required'
    }
def test_tasks_repository_save_with_not_existing_creator():
    task_content = 'test content'
    task_name = 'test name'

    task = Task(
        name=task_name,
        content=task_content,
        status=TaskStatus(id=1, name='new'),
        creator=User(id=9,
                     name='creator',
                     roles=[UserRole(id=1, name='creator')]),
        doer=None,
    )

    with pytest.raises(NoResultFound):
        repository.save(task)
    def save(self, status):
        try:
            new_status = self.status_model(name=status.name)
            self.session.add(new_status)
            self.session.commit()

        except exc.IntegrityError as e:
            self.session.rollback()

            if 'unique' in str(e).lower():
                raise NotUnique('Status already exist')

            raise

        except exc.SQLAlchemyError:
            self.session.rollback()
            raise DbError()

        return TaskStatus(id=new_status.id, name=new_status.name)
    def delete(self, id):
        status = self.status_model.query.get(id)

        if not status:
            raise NoResultFound(id, TaskStatus.__name__)

        try:
            self.session.delete(status)
            self.session.commit()

        except exc.IntegrityError as e:
            self.session.rollback()

            if 'foreign' in str(e).lower():
                raise CannotBeDeleted('Cannot delete status')
            raise

        except exc.SQLAlchemyError:
            self.session.rollback()
            raise DbError()

        return TaskStatus(id=id, name=status.name)
def test_tasks_repository_save():
    task_content = 'test content'
    task_name = 'test name'

    task = Task(
        name=task_name,
        content=task_content,
        status=TaskStatus(id=1, name='new'),
        creator=User(id=1,
                     name='creator',
                     roles=[UserRole(id=1, name='creator')]),
        doer=None,
    )

    result = repository.save(task)

    assert result.name == task_name
    assert result.content == task_content
    assert result.status.id == 1
    assert result.creator.id == 1
    assert result.doer is None
    assert isinstance(result, DomainModel)
    assert len(repository.list()) == 3
Example #16
0
def test_get_status_details_action_with_hooks():
    status = mock.Mock()
    status = TaskStatus(name='new', id=1)
    statuses_repo = mock.Mock()
    statuses_repo.one.return_value = status
    request = GetTaskStatusDetailsRequest(status.id)

    action = GetTaskStatusDetailsAction(statuses_repo)

    before = mock.MagicMock()
    after = mock.MagicMock()

    action.add_before_execution_hook(before)
    action.add_after_execution_hook(after)

    response = action.execute(request)

    assert before.called
    assert after.called

    assert bool(response) is True
    statuses_repo.one.assert_called_once_with(status.id)
    assert response.value == status
    def update(self, status):
        status_to_update = self.status_model.query.get(status.id)

        if not status_to_update:
            raise NoResultFound(status.id, TaskStatus.__name__)

        try:
            status_to_update.name = status.name

            self.session.add(status_to_update)
            self.session.commit()

        except exc.IntegrityError as e:
            self.session.rollback()

            if 'unique' in str(e).lower():
                raise NotUnique('Status already exist')
            raise

        except exc.SQLAlchemyError:
            self.session.rollback()
            raise DbError()

        return TaskStatus(id=status_to_update.id, name=status_to_update.name)
Example #18
0
def test_task():
    role_creator = UserRole(name='creator')
    role_doer = UserRole(name='doer')
    task_name = 'example name'
    task_content = 'lorem ipsum'
    task_status = TaskStatus(name='new', id=1)
    task_creator = User(name='creator', roles=[role_creator])
    task_doer = User(name='doer', roles=[role_doer])
    task_id = 1

    task = Task(name=task_name,
                content=task_content,
                status=task_status,
                creator=task_creator,
                doer=task_doer,
                id=task_id)

    assert task.name == task_name
    assert task.content == task_content
    assert task.status == task_status
    assert task.creator == task_creator
    assert task.doer == task_doer
    assert task.id == task_id
    assert isinstance(task, DomainModel)
Example #19
0
def test_status_repository_non_unique_status():
    with pytest.raises(NotUnique):
        repository.update(TaskStatus(id=1, name='in progress'))
def statuses():
    status1 = TaskStatus(name='new')
    status2 = TaskStatus(name='canceled')
    status3 = TaskStatus(name='completed')
    return [status1, status2, status3]
Example #21
0
def test_statuses_repository_save_non_unique_status():
    with pytest.raises(NotUnique):
        repository.save(TaskStatus(name='in progress'))
Example #22
0
def test_statuses_repository_save():
    status_name = 'suspended'
    result = repository.save(TaskStatus(name=status_name))

    assert isinstance(result, DomainModel)
    assert result.name == status_name
Example #23
0
def test_status_repository_update_not_existing_status():
    with pytest.raises(NoResultFound):
        repository.update(TaskStatus(id=9, name='in progress'))