def test_document_list_handles_bad_request():
    repo = mock.Mock()

    document_list_use_case = uc.DocumentListUseCase(repo)
    request_object = ro.DocumentListRequestObject.from_dict({'filters': 5})

    response_object = document_list_use_case.execute(request_object)

    assert bool(response_object) is False
    assert response_object.value == {
        'type': res.ResponseFailure.PARAMETERS_ERROR,
        'message': "filters: Is not iterable"
    }
def test_document_list_without_parameters(domain_documents):
    repo = mock.Mock()
    repo.list.return_value = domain_documents

    document_list_use_case = uc.DocumentListUseCase(repo)
    request_object = ro.DocumentListRequestObject.from_dict({})

    response_object = document_list_use_case.execute(request_object)

    assert bool(response_object) is True
    repo.list.assert_called_with(filters=None)

    assert response_object.value == domain_documents
def test_document_list_handles_generic_error():
    repo = mock.Mock()
    repo.list.side_effect = Exception('Just an error message')

    document_list_use_case = uc.DocumentListUseCase(repo)
    request_object = ro.DocumentListRequestObject.from_dict({})

    response_object = document_list_use_case.execute(request_object)

    assert bool(response_object) is False
    assert response_object.value == {
        'type': res.ResponseFailure.SYSTEM_ERROR,
        'message': "Exception: Just an error message"
    }
def test_document_list_with_filters(domain_documents):
    repo = mock.Mock()
    repo.list.return_value = domain_documents

    document_list_use_case = uc.DocumentListUseCase(repo)
    qry_filters = {'a': 5}
    request_object = ro.DocumentListRequestObject.from_dict(
        {'filters': qry_filters})

    response_object = document_list_use_case.execute(request_object)

    assert bool(response_object) is True
    repo.list.assert_called_with(filters=qry_filters)
    assert response_object.value == domain_documents
Esempio n. 5
0
def documents():
    qrystr_params = {
        'filters': {},
    }

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

    request_object = req.DocumentListRequestObject.from_dict(qrystr_params)

    repo = MongoDBRepo()
    use_case = uc.DocumentListUseCase(repo)

    response = use_case.execute(request_object)

    return Response(json.dumps(response.value, cls=ser.DocumentEncoder),
                    mimetype='application/json',
                    status=STATUS_CODES[response.type])