"""Tests for store model.""" from oto import response as oto_response import pytest from sales_goals.connectors import mysql from sales_goals.models import store @pytest.fixture def store_data(): """Dictionary with data suitable to create Store object.""" return { 'name': 'Amazon' } def test_store_to_dict(test_database, store_data): """Assert Store object can convert itself to dict.""" store_obj = store.Store(**store_data) with mysql.sales_goals_session_scope() as session: session.add(store_obj) session.commit() store_obj = session.query(store.Store).first() store_data['store_id'] = 1 assert store_obj.to_dict() == store_data def test_store(test_database, store_data): """Assert store object can be created.""" response = store.create(**store_data) with mysql.sales_goals_session_scope() as session: tasks = session.query(store.Store).all() assert len(tasks) == 1 store_obj = session.query(store.Store).first() store_data['store_id'] = 1 assert store_obj.to_dict() == store_data assert isinstance(response, oto_response.Response) assert response.message == store_data def test_fetch_by_stores_id(test_database): """Assert store objects can be fetched.""" store_ids_to_fetch = [1, 2, 3, 4, 5] stores_data = [{'name': 'Amazon'}, {'name': 'Indie'}, {'name': 'HMV'}] expected_results = [] for one_store_data in stores_data: expected_results.append( store.create(**one_store_data).message) response = store.fetch_by_store_ids(store_ids_to_fetch) assert isinstance(response, oto_response.Response) assert response.message == expected_results def test_fetch_by_store_ids_no_stores(test_database): """Assert store fetch for not found response.""" store_ids_to_fetch = [1, 2, 3] response = store.fetch_by_store_ids(store_ids_to_fetch) assert isinstance(response, oto_response.Response) assert response.status == 404 assert response.errors['message'] == ( 'Stores with ids [1, 2, 3] do not exist')