예제 #1
0
def test_request_with_valid_params_calls_repo_with_filt(books):
    mock_repo = mock.Mock()
    mock_repo.list.return_value = books

    use_case = uc.BookListUseCase(mock_repo)
    filters = {'title__eq': 'Moby Dick'}
    request = req.BookListRequest.from_dict({'filters': filters})

    response = use_case.execute(request)

    assert bool(response) is True
    mock_repo.list.assert_called_with(filters=filters)
예제 #2
0
def test_book_list_uc_bools_to_false_with_invalid_req(books):
    mock_repo = mock.Mock()
    mock_repo.list.return_value = books

    use_case = uc.BookListUseCase(mock_repo)
    filters = {'bad_request': 'Moby Dick'}
    request = req.BookListRequest.from_dict({'filters': filters})

    response = use_case.execute(request)

    assert bool(request) is False
    assert bool(response) is False
예제 #3
0
def test_book_list_uc_executes_with_empty_request(books):
    mock_repo = mock.Mock()
    mock_repo.list.return_value = books

    use_case = uc.BookListUseCase(mock_repo)

    request = req.BookListRequest()
    response = use_case.execute(request)

    assert response.value == books
    assert bool(response) is True
    mock_repo.list.assert_called_with(filters=None)
예제 #4
0
def test_use_case_catches_generic_error(books):
    mock_repo = mock.Mock()
    mock_repo.list.side_effect = Exception('generic exception')

    use_case = uc.BookListUseCase(mock_repo)

    filters = {'title__eq': 'Moby Dick'}
    request = req.BookListRequest.from_dict({'filters': filters})

    response = use_case.execute(request)

    assert bool(response) is False
    assert response.type == res.ResponseFailure.SYSTEM_ERROR
    assert response.message == 'Exception: generic exception'
예제 #5
0
def book():
    query_string = {'filters': {}}

    for arg, values in request.args.items():
        query_string['filters'][arg.replace('filter_', '')] = values

    request_object = req.BookListRequest.from_dict(query_string)

    repo = mr.MemRepo(book_list)
    use_case = uc.BookListUseCase(repo)
    response_object = use_case.execute(request_object)

    return Response(json.dumps(response_object.value, cls=ser.BookJsonEncoder),
                    mimetype='application/json',
                    status=STATUS_CODES[response_object.type])
예제 #6
0
def test_book_list_uc_initiates(books):
    mock_repo = mock.Mock()
    mock_repo.list.return_value = books

    use_case = uc.BookListUseCase(mock_repo)
    assert use_case.repo == mock_repo