Skip to content

Commit c2e167a

Browse files
author
jamesalbert
committed
100% coverage
1 parent 77970af commit c2e167a

File tree

1 file changed

+67
-3
lines changed

1 file changed

+67
-3
lines changed

tests/test_sqlalchemy_data_layer.py

Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,19 @@
1010
from flask import Blueprint, make_response
1111
from marshmallow_jsonapi.flask import Schema, Relationship
1212
from marshmallow_jsonapi import fields
13+
from marshmallow import ValidationError
1314

1415
from flask_rest_jsonapi import Api, ResourceList, ResourceDetail, ResourceRelationship, JsonApiException
1516
from flask_rest_jsonapi.pagination import add_pagination_links
16-
from flask_rest_jsonapi.exceptions import RelationNotFound, InvalidSort, InvalidFilters
17+
from flask_rest_jsonapi.exceptions import RelationNotFound, InvalidSort, InvalidFilters, InvalidInclude, BadRequest
1718
from flask_rest_jsonapi.querystring import QueryStringManager as QSManager
1819
from flask_rest_jsonapi.data_layers.alchemy import SqlalchemyDataLayer
1920
from flask_rest_jsonapi.data_layers.base import BaseDataLayer
2021
from flask_rest_jsonapi.data_layers.filtering.alchemy import Node
22+
from flask_rest_jsonapi.schema import get_relationships
2123
import flask_rest_jsonapi.decorators
24+
import flask_rest_jsonapi.resource
25+
import flask_rest_jsonapi.schema
2226

2327

2428
@pytest.fixture(scope="module")
@@ -365,10 +369,70 @@ def test_Node(person_model, person_schema, monkeypatch):
365369

366370
def test_check_method_requirements(monkeypatch):
367371
self = type('self', (object,), dict())
368-
request = type('request', (object,), dict(method=None))
372+
request = type('request', (object,), dict(method='GET'))
369373
monkeypatch.setattr(flask_rest_jsonapi.decorators, 'request', request)
370374
with pytest.raises(Exception):
371-
flask_rest_jsonapi.decorators.check_method_requirements(lambda: 1)(Self())
375+
flask_rest_jsonapi.\
376+
decorators.check_method_requirements(lambda: 1)(self())
377+
378+
379+
def test_json_api_exception():
380+
JsonApiException(None, None, title='test', status='test')
381+
382+
383+
def test_query_string_manager(person_schema):
384+
query_string = {'page[slumber]': '3'}
385+
qsm = QSManager(query_string, person_schema)
386+
with pytest.raises(BadRequest):
387+
qsm.pagination
388+
qsm.qs['sort'] = 'computers'
389+
with pytest.raises(InvalidSort):
390+
qsm.sorting
391+
392+
393+
def test_resource(person_model, person_schema, session, monkeypatch):
394+
def schema_load_mock(*args):
395+
raise ValidationError(dict(errors=[dict(status=None, title=None)]))
396+
query_string = {'page[slumber]': '3'}
397+
app = type('app', (object,), dict(config=dict(DEBUG=True)))
398+
headers = {'Content-Type': 'application/vnd.api+json'}
399+
request = type('request', (object,), dict(method='POST',
400+
headers=headers,
401+
get_json=dict,
402+
args=query_string))
403+
dl = SqlalchemyDataLayer(dict(session=session, model=person_model))
404+
rl = ResourceList()
405+
rd = ResourceDetail()
406+
rl._data_layer = dl
407+
rl.schema = person_schema
408+
rd._data_layer = dl
409+
rd.schema = person_schema
410+
monkeypatch.setattr(flask_rest_jsonapi.resource, 'request', request)
411+
monkeypatch.setattr(flask_rest_jsonapi.resource, 'current_app', app)
412+
monkeypatch.setattr(flask_rest_jsonapi.decorators, 'request', request)
413+
monkeypatch.setattr(rl.schema, 'load', schema_load_mock)
414+
r = super(flask_rest_jsonapi.resource.Resource, ResourceList)\
415+
.__new__(ResourceList)
416+
with pytest.raises(Exception):
417+
r.dispatch_request()
418+
rl.post()
419+
rd.patch()
420+
421+
422+
def test_compute_schema(person_schema):
423+
query_string = {'page[number]': '3', 'fields[person]': list()}
424+
qsm = QSManager(query_string, person_schema)
425+
# print(person_schema._declared_fields)
426+
with pytest.raises(InvalidInclude):
427+
flask_rest_jsonapi.schema.compute_schema(
428+
person_schema, dict(), qsm, ['id']
429+
)
430+
# print(person_schema.opts.type_)
431+
print(person_schema.opts.type_)
432+
print(qsm.fields)
433+
s = flask_rest_jsonapi.schema.compute_schema(
434+
person_schema, dict(only=list()), qsm, list()
435+
)
372436

373437

374438
# test good cases

0 commit comments

Comments
 (0)