"""Tests for MySQL connector module.""" from datetime import datetime from flexmock import flexmock from sqlalchemy.exc import SQLAlchemyError from deliveryhistory.connectors import mysql from deliveryhistory.models import masters_delivery_history data = { 'items': [{ 'isrc': 'ISRC1234', 'tuid': 1000758877862, 'upc': '100075897922', 'partner_id': 453, 'delivery_date': datetime.utcnow() }, { 'isrc': 'ISRC5678', 'tuid': 1000758877862, 'upc': '100075897922', 'partner_id': 453, 'delivery_date': datetime.utcnow() }] } duplicate_data = { 'items': [{ 'isrc': 'ISRC1234', 'tuid': 1000758877862, 'upc': '100075897922', 'partner_id': 453, 'delivery_date': datetime.utcnow() }, { 'isrc': 'ISRC1234', 'tuid': 1000758877862, 'upc': '100075897922', 'partner_id': 453, 'delivery_date': datetime.utcnow() }] } def test_db_insert(db_fixture): """Testing availability of MySQL connection. Args: db_fixture: pytest fixture for mysql-connection. """ insert_result = masters_delivery_history.save_delivery_history( data['items']) with mysql.session_scope() as dbs: record = dbs.query( masters_delivery_history.MastersDeliveryHistory).first() assert record assert insert_result.message['records_created'] == len(data['items']) def test_save_delivery_history_failed(): """Test fail scenario of save_delivery_history function.""" flexmock(mysql).should_receive('session_scope').and_raise(SQLAlchemyError) result = masters_delivery_history.save_delivery_history(data['items']) assert result.status == 500 def test_save_delivery_history_success(db_fixture): """Test save_delivery_history function.""" result = masters_delivery_history.save_delivery_history(data['items']) assert result.message['records_created'] == len(data['items']) def test_save_delivery_history_duplicate_success(db_fixture): """Test save_delivery_history function with duplicate data.""" result = masters_delivery_history.save_delivery_history( duplicate_data['items']) # expected 'records_created' count is 1 as two same records are inserted assert result.message['records_created'] == 1 def test_get_delivery_history_success(db_fixture): """Test get_delivery_history success scenario.""" result = masters_delivery_history.get_delivery_history(453, ['ISRC5678']) assert result def test_get_delivery_history_exception(): """Test get_delivery_history exception throwing.""" flexmock(mysql).should_receive('session_scope').and_raise(SQLAlchemyError) result = masters_delivery_history.get_delivery_history(453, ['ISRC5678']) assert result.status == 500