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
        )
Beispiel #2
0
def test_add_user_action_with_hooks():
    name = 'name'
    password = '******'
    role_id = 1

    roles_repo = mock.Mock()
    roles_repo.one.return_value = UserRole(name='role_name')

    users_repo = mock.Mock()
    users_repo.save.return_value = User(name=name,
                                        roles=[roles_repo.one.return_value])

    request = AddUserRequest(name=name, password=password, roles=[role_id])
    action = AddUserAction(users_repo, roles_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 users_repo.save.called
    assert bool(response) is True
    assert response.value == users_repo.save.return_value
Beispiel #3
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 test_update_not_existing_user():
    creator_id, creator_name, creator_role_id, creator_role_name = creator_
    user = User(name='asdasd',
                roles=[UserRole(name=creator_role_name, id=creator_role_id)],
                id=99)

    with pytest.raises(NoResultFound):
        repository.update(user)
def test_add_user_with_not_existing_role():
    user = User(
        name='asdasdasd',
        roles=[UserRole(name='asdasd', id=99)],
    )

    with pytest.raises(NoResultFound):
        repository.save(user, password='******')
def test_tasks_repository_save_with_not_existing_doer():
    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=User(id=9, name='creator', roles=[UserRole(id=1,
                                                        name='creator')]),
    )

    with pytest.raises(NoResultFound):
        repository.save(task)
Beispiel #7
0
    def process_request(self, request):
        roles = self.roles_repo.list(dict(id__in=request.roles))
        user = User(name=request.name, roles=roles)

        self._call_before_execution_hooks(dict(request=request, user=user))
        response = self.users_repo.save(user, password=request.password)
        self._call_after_execution_hooks(dict(request=request, user=response))

        return ResponseSuccess(response)
Beispiel #8
0
def test_user():
    name = 'name'
    permissions = [Permission('AddUserAction')]
    roles = [UserRole(name='role_name'), UserRole(name="role_name2")]
    user = User(name=name, roles=roles, permissions=permissions)

    assert user.name == name
    assert user.roles == roles
    assert user.permissions == permissions
def test_add_non_unique_user():
    creator_id, creator_name, creator_role_id, creator_role_name = creator_

    user = User(
        name=creator_name,
        roles=[UserRole(name=creator_role_name, id=creator_role_id)],
    )

    with pytest.raises(NotUnique):
        repository.save(user, password='******')
def test_update_non_unique_user():
    creator_id, creator_name, creator_role_id, creator_role_name = creator_
    doer_id, doer_name, doer_role_id, doer_role_name = doer_

    user = User(name=creator_name,
                roles=[UserRole(name=creator_role_name, id=creator_role_id)],
                id=doer_id)

    with pytest.raises(NotUnique):
        repository.update(user)
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)
def test_users_repository_save():
    creator_id, creator_name, creator_role_id, creator_role_name = creator_

    user = User(name='user',
                roles=[UserRole(name=creator_role_name, id=creator_role_id)])
    result = repository.save(user, password='******')

    assert result.name == user.name
    assert result.roles[0].id == user.roles[0].id
    assert result.roles[0].name == user.roles[0].name
    assert not hasattr(result, 'password')
    assert isinstance(result, DomainModel)
Beispiel #13
0
def test_get_user_details_action():
    roles = mock.Mock()
    user = User(name='admin', id=1, roles=roles)
    users_repo = mock.Mock()
    users_repo.one.return_value = user
    request = GetUserDetailsRequest(user.id)

    action = GetUserDetailsAction(users_repo)
    response = action.execute(request)

    assert bool(response) is True
    users_repo.one.assert_called_once_with(user.id)
    assert response.value == user
Beispiel #14
0
def test_update_user_action():
    id, name = 1, 'name'
    users_repo = mock.Mock()
    users_repo.update.return_value = User(id=id, name=name, roles=mock.Mock())

    request = UpdateUserRequest(id=id, name=name)

    action = UpdateUserAction(repo=users_repo)
    response = action.execute(request)

    assert bool(response) is True
    assert users_repo.update.called
    assert response.value == users_repo.update.return_value
Beispiel #15
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)
Beispiel #16
0
def test_user_serializer():
    role = UserRole(name='admin', id=1)
    role2 = UserRole(name='creator', id=2)
    user = User(name='user', roles=[role, role2])

    expected_json = json.dumps(dict(
        id=None,
        name=user.name,
        roles=[
            dict(name=role.name, id=role.id),
            dict(name=role2.name, id=role2.id)
        ],
    ))

    assert json.loads(json.dumps(user, cls=UserEncoder)) ==\
        json.loads(expected_json)
Beispiel #17
0
def test_update_user_action_handles_bad_requst():
    name = 'name'
    users_repo = mock.Mock()
    users_repo.update.return_value = User(id=id, name=name, roles=mock.Mock())

    request = UpdateUserRequest(id=None)

    action = UpdateUserAction(repo=users_repo)
    response = action.execute(request)

    assert bool(response) is False
    assert not users_repo.update.called
    assert response.value == {
        'type': ResponseFailure.PARAMETER_ERROR,
        'message': 'id: is required'
    }
Beispiel #18
0
def test_get_user_details_action_handles_bad_request():
    roles = mock.Mock()
    user = User(name='admin', id=1, roles=roles)
    users_repo = mock.Mock()
    users_repo.one.return_value = user
    request = GetUserDetailsRequest(user_id=None)

    action = GetUserDetailsAction(users_repo)
    response = action.execute(request)

    assert bool(response) is False
    assert not users_repo.one.called
    assert response.value == {
        'type': ResponseFailure.PARAMETER_ERROR,
        'message': 'user_id: is required'
    }
Beispiel #19
0
def test_add_user_action():
    name = 'name'
    password = '******'
    role_id = 1

    roles_repo = mock.Mock()
    roles_repo.one.return_value = UserRole(name='role_name')

    users_repo = mock.Mock()
    users_repo.save.return_value = User(name=name,
                                        roles=[roles_repo.one.return_value])

    request = AddUserRequest(name=name, password=password, roles=[role_id])
    action = AddUserAction(users_repo, roles_repo)

    response = action.execute(request)

    assert users_repo.save.called
    assert bool(response) is True
    assert response.value == users_repo.save.return_value
Beispiel #20
0
def test_update_user_action_with_hooks():
    id, name = 1, 'name'
    users_repo = mock.Mock()
    users_repo.update.return_value = User(id=id, name=name, roles=mock.Mock())

    request = UpdateUserRequest(id=id, name=name)

    action = UpdateUserAction(repo=users_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
    assert users_repo.update.called
    assert response.value == users_repo.update.return_value
Beispiel #21
0
def test_get_user_details_action_with_hooks():
    roles = mock.Mock()
    user = User(name='admin', id=1, roles=roles)
    users_repo = mock.Mock()
    users_repo.one.return_value = user
    request = GetUserDetailsRequest(user.id)

    action = GetUserDetailsAction(users_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
    users_repo.one.assert_called_once_with(user.id)
    assert response.value == user
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
Beispiel #23
0
def test_add_user_action_handles_bad_request():
    name = None
    password = None
    role_id = None

    roles_repo = mock.Mock()
    roles_repo.one.return_value = UserRole(name='role_name')

    users_repo = mock.Mock()
    users_repo.save.return_value = User(name='name',
                                        roles=[roles_repo.one.return_value])

    request = AddUserRequest(name=name, password=password, roles=role_id)
    action = AddUserAction(users_repo, roles_repo)

    response = action.execute(request)

    assert not users_repo.save.called
    assert bool(response) is False
    assert response.value == {
        'message':
        'name: is required\npassword: is required\nroles: is required',
        'type': ResponseFailure.PARAMETER_ERROR
    }
def users():
    return [
        User('name1', roles=mock.Mock()),
        User('name2', roles=mock.Mock()),
    ]
def test_update_user_with_not_existing_role():
    user = User(name='asdasdasd', roles=[UserRole(name='asdasd', id=99)], id=1)

    with pytest.raises(NoResultFound):
        repository.update(user)
import json
from unittest import mock
from sqlalchemy import event
from sqlalchemy.engine import Engine
from collections import namedtuple

from taskplus.core.shared.response import ResponseSuccess
from taskplus.core.domain import User, UserRole
from taskplus.apps.rest.database import Base, db_session, engine

user_name = 'admin'
user = User(name=user_name, id=1, roles=[UserRole(id=1, name='creator')])
users = [user]


def setup_function(function):
    user_ = namedtuple('user_', ['id', 'name', 'role_id', 'role_name'])
    creator_ = user_(id=1, name='creator', role_id=1, role_name='creator_role')
    doer_ = user_(id=2, name='doer', role_id=2, role_name='doer_role')

    if db_session.bind.driver == 'pysqlite':

        @event.listens_for(Engine, "connect")
        def set_sqlite_pragma(dbapi_connection, connection_record):
            cursor = dbapi_connection.cursor()
            cursor.execute("PRAGMA foreign_keys=ON")
            cursor.close()

    with mock.patch('taskplus.apps.rest.models.User._hash_password',
                    side_effect=lambda x: x):
        from taskplus.apps.rest import models
Beispiel #27
0
    def _to_domain_model(self, data):
        permissions = []

        for role in data.roles:
            if role.name == 'creator':
                permissions.append(Permission('ListTasksAction'))
                permissions.append(Permission('ListTaskStatusesAction'))
                permissions.append(Permission('ListUserRolesAction'))
                permissions.append(Permission('AddTaskAction'))
                permissions.append(Permission('CancelTaskAction', conditions=[
                    Condition('task.doer', 'eq', 'None')
                ]))
                permissions.append(Permission('GetTaskDetailsAction'))
                permissions.append(Permission('GetRoleDetailsAction'))
                permissions.append(Permission('GetTaskStatusDetailsAction'))
                permissions.append(Permission('GetUserDetailsAction', conditions=[
                    Condition('request.user_id', 'eq', 'user.id')
                ]))
                permissions.append(Permission('GetNotCompletedTasksAction'))
                permissions.append(
                    Permission('UpdateTaskAction', conditions=[
                        Condition('task.creator.id', 'eq', 'user.id')
                    ]))

            if role.name == 'doer':
                permissions.append(
                    Permission('CancelTaskAction', conditions=[
                        Condition('task.doer.id', 'eq', 'user.id')
                    ]))
                permissions.append(
                    Permission('CompleteTaskAction', conditions=[
                        Condition('task.doer.id', 'eq', 'user.id')
                    ]))
                permissions.append(
                    Permission('AssignUserToTaskAction', conditions=[
                        Condition('request.user_id', 'eq', 'user.id'),
                        Condition('task.doer', 'eq', 'None')
                    ]))
                permissions.append(
                    Permission('UnassignUserFromTaskAction', conditions=[
                        Condition('task.doer.id', 'eq', 'user.id')
                    ]))
                permissions.append(Permission('GetUserDetailsAction', conditions=[
                    Condition('request.user_id', 'eq', 'user.id')
                ]))
                permissions.append(Permission('GetTaskDetailsAction'))
                permissions.append(Permission('GetRoleDetailsAction'))
                permissions.append(Permission('GetTaskStatusDetailsAction'))
                permissions.append(Permission('ListTasksAction'))
                permissions.append(Permission('ListTaskStatusesAction'))
                permissions.append(Permission('ListUserRolesAction'))
                permissions.append(Permission('GetNotCompletedTasksAction'))

            if role.name == 'admin':
                permissions.append(Permission('AddUserRoleAction'))
                permissions.append(Permission('DeleteUserRoleAction'))
                permissions.append(Permission('ListUserRolesAction'))
                permissions.append(Permission('UpdateUserRoleAction'))
                permissions.append(Permission('AddUserAction'))
                permissions.append(Permission('ListUsersAction'))
                permissions.append(Permission('UpdateUserAction'))
                permissions.append(Permission('DeleteUserAction'))
                permissions.append(Permission('GetTaskDetailsAction'))
                permissions.append(Permission('GetRoleDetailsAction'))
                permissions.append(Permission('GetTaskStatusDetailsAction'))
                permissions.append(Permission('GetUserDetailsAction'))
                permissions.append(Permission('ListTasksAction'))
                permissions.append(Permission('ListTaskStatusesAction'))
                permissions.append(Permission('AddTaskStatusAction'))
                permissions.append(Permission('DeleteTaskStatusAction'))
                permissions.append(Permission('UpdateTaskStatusAction'))
                permissions.append(Permission('GetNotCompletedTasksAction'))
                permissions.append(Permission('UpdateTaskAction'))

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