Source code for tests.test_integration

"""
    tests.test_integration
    ~~~~~~~~~~~~~~~~~~~~~~

    Integration tests for Drowsy.

"""
# :copyright: (c) 2016-2020 by Nicholas Repole and contributors.
#             See AUTHORS for more details.
# :license: MIT - See LICENSE for more details.
from drowsy.parser import ModelQueryParamParser
from .base import DrowsyDatabaseTests
from .resources import *


[docs] class TestDrowsyIntegration(DrowsyDatabaseTests): """General purpose drowsy integration tests."""
[docs] @staticmethod def test_offset(db_session): """Make sure providing an offset query_param works.""" query_params = {"offset": "1"} parser = ModelQueryParamParser(query_params) album_resource = AlbumResource(session=db_session) offset_limit_info = parser.parse_offset_limit(page_max_size=30) offset = offset_limit_info.offset limit = offset_limit_info.limit result = album_resource.get_collection( filters=parser.parse_filters(album_resource.model), sorts=parser.parse_sorts(), limit=limit, offset=offset ) assert result[0]["album_id"] == 2
[docs] @staticmethod def test_limit(db_session): """Make sure providing a limit query_param works.""" query_params = {"limit": "1"} parser = ModelQueryParamParser(query_params) album_resource = AlbumResource(session=db_session) offset_limit_info = parser.parse_offset_limit(page_max_size=30) offset = offset_limit_info.offset limit = offset_limit_info.limit result = album_resource.get_collection( filters=parser.parse_filters(album_resource.model), sorts=parser.parse_sorts(), limit=limit, offset=offset ) assert len(result) == 1
[docs] @staticmethod def test_get_resources_ordered(db_session): """Test simple get_resources sort functionality.""" query_params = { "sort": "-album_id,title" } parser = ModelQueryParamParser(query_params) album_resource = AlbumResource(session=db_session) result = album_resource.get_collection( filters=parser.parse_filters(album_resource.model), sorts=parser.parse_sorts() ) assert len(result) == 347 assert result[0]["album_id"] == 347
[docs] @staticmethod def test_get_first_page(db_session): """Test that we can get the first page of a set of objects.""" query_params = { "sort": "album_id" } album_resource = AlbumResource(session=db_session) parser = ModelQueryParamParser(query_params) offset_limit_info = parser.parse_offset_limit(page_max_size=30) offset = offset_limit_info.offset limit = offset_limit_info.limit result = album_resource.get_collection( filters=parser.parse_filters(album_resource.model), sorts=parser.parse_sorts(), limit=limit, offset=offset ) assert len(result) == 30 assert result[0]["album_id"] == 1
[docs] @staticmethod def test_get_second_page(db_session): """Test that we can get the second page of a set of objects.""" query_params = { "sort": "album_id", "page": "2" } parser = ModelQueryParamParser(query_params) album_resource = AlbumResource(session=db_session) offset_limit_info = parser.parse_offset_limit(page_max_size=30) offset = offset_limit_info.offset limit = offset_limit_info.limit result = album_resource.get_collection( filters=parser.parse_filters(album_resource.model), sorts=parser.parse_sorts(), limit=limit, offset=offset ) assert len(result) == 30 assert result[0]["album_id"] == 31
[docs] @staticmethod def test_subresource_nested_query(db_session): """Ensure a simple subresource query works.""" query_params = { "tracks._subquery_.track_id-gte": 5, "tracks.playlists._subquery_.playlist_id-lte": 5 } parser = ModelQueryParamParser(query_params) album_resource = AlbumResource(session=db_session) result = album_resource.get_collection( subfilters=parser.parse_subfilters(), embeds=parser.parse_embeds() ) success = False for album in result: if album["album_id"] == 3: assert len(album["tracks"]) == 1 assert album["tracks"][0]["track_id"] == 5 success = True assert success
[docs] @staticmethod def test_subresource_simple_query(db_session): """Ensure a simple subresource query works.""" query_params = { "tracks._subquery_.track_id-gte": 5, "tracks.playlists._subquery_.playlist_id-lte": 5 } parser = ModelQueryParamParser(query_params) album_resource = AlbumResource(session=db_session) result = album_resource.get_collection( subfilters=parser.parse_subfilters(), embeds=parser.parse_embeds() ) success = False for album in result: if album["album_id"] == 3: assert len(album["tracks"]) == 1 assert album["tracks"][0]["track_id"] == 5 success = True assert success