"""Tests for PhfPublishingEscrow model.""" import datetime import pytest from models import phf_mechadmin_track from models import phf_publishing_escrow import mysql import test_utils @pytest.mark.parametrize( 'test_net_revenue, expected_net_revenue, test_dist_fee, ' 'expected_dist_fee, test_period_id', [ (1, 1.0, 1, 1.0, 11), ('string_value', None, 'string_value', None, None) ] ) @test_utils.test_schema def test_insert_phf_publishing_escrow_success( track_required_data, test_net_revenue, expected_net_revenue, test_dist_fee, expected_dist_fee, test_period_id): """Test phf_publishing_escrow can be inserted into db.""" track_id = track_required_data['track_id'] phf_mechadmin_track.insert_phf_mechadmin_track(track_required_data) escrow_data = { 'track_id': track_id, 'store': 'Amazon', 'qty': 1, 'royalty_rate_calculated': 1, 'royalty_calculated': 1, 'gross_revenue': 1, 'net_revenue': test_net_revenue, 'dist_fee': test_dist_fee, 'sales_file_name': 'name', 'period_id': test_period_id } result = phf_publishing_escrow.insert_phf_publishing_escrow(escrow_data) assert result with mysql.ar_db_session() as session: escrow_obj = session.query( phf_publishing_escrow.PhfPublishingEscrow).filter_by( phf_transaction_id=result).first() assert escrow_obj.track_id == track_id assert escrow_obj.period_id == test_period_id assert escrow_obj.net_revenue == expected_net_revenue assert escrow_obj.dist_fee == expected_dist_fee @pytest.mark.parametrize( 'sales_file_name, expected_result', [ ('test_name', 1), ('non_existing_name', 0) ] ) @test_utils.test_schema def test_get_phf_publishing_escrow_by_sales_file_name( escrow_data, sales_file_name, expected_result): """Test get_phf_publishing_escrow_by_sales_file_name function.""" phf_publishing_escrow.insert_phf_publishing_escrow(escrow_data) phf_publishing_escrow_objs = ( phf_publishing_escrow .get_phf_publishing_escrow_by_sales_file_name(sales_file_name)) assert len(phf_publishing_escrow_objs) == expected_result @test_utils.test_schema def test_phf_publishing_escrow_dict(escrow_data): """Test PhfPublishingEscrow to_dict.""" phf_publishing_escrow.insert_phf_publishing_escrow(escrow_data) test_datetime = datetime.datetime(2018, 2, 8, 13, 21, 11) with mysql.ar_db_session() as session: escrow_obj = session.query( phf_publishing_escrow.PhfPublishingEscrow).first() escrow_obj.last_modified = test_datetime assert escrow_obj.to_dict() == { 'phf_transaction_id': 1, 'transaction_type': None, 'track_id': '1', 'store': 'Amazon', 'qty': 1, 'royalty_rate_calculated': 1, 'royalty_calculated': 1, 'royalty_rate': None, 'royalty': None, 'gross_revenue': 1, 'net_revenue': 1, 'dist_fee': 1, 'sales_file_name': 'test_name', 'period_id': 1, 'usage_type': None, 'ownership': 1, 'admin_fee': None, 'active': 'Y', 'last_modified': test_datetime } @pytest.mark.parametrize( 'updated_dist_fee, expected_dist_fee, updated_net_revenue, ' 'expected_net_revenue, updated_usage_type, expected_usage_type', [ (1, 1.0, 1, 1.0, 10, 10), ('N/A', None, 'N/A', None, 'N/A', None), ('N/A', None, 'N/A', None, '', None) ] ) @test_utils.test_schema def test_update_phf_publishing_escrow( escrow_data, updated_dist_fee, expected_dist_fee, updated_net_revenue, expected_net_revenue, updated_usage_type, expected_usage_type): """Test successful update of a phf_publishing_escrow.""" phf_publishing_escrow.insert_phf_publishing_escrow(escrow_data) with mysql.ar_db_session() as session: saved_publishing_escrow_obj = session.query( phf_publishing_escrow.PhfPublishingEscrow).first() assert saved_publishing_escrow_obj.store == 'Amazon' phf_transaction_id = saved_publishing_escrow_obj.phf_transaction_id updated_store = 'Itunes' phf_publishing_escrow.update( phf_transaction_id, { 'store': updated_store, 'dist_fee': updated_dist_fee, 'net_revenue': updated_net_revenue, 'usage_type': updated_usage_type }) with mysql.ar_db_session() as session: updated_publishing_escrow_obj = session.query( phf_publishing_escrow.PhfPublishingEscrow).filter_by( phf_transaction_id=phf_transaction_id).first() assert updated_publishing_escrow_obj.store == updated_store assert updated_publishing_escrow_obj.dist_fee == expected_dist_fee assert updated_publishing_escrow_obj.net_revenue == ( expected_net_revenue) assert updated_publishing_escrow_obj.usage_type == expected_usage_type @pytest.mark.parametrize('expected_not_int_usage_type', ('N/A', '')) @test_utils.test_schema def test_bulk_insert_phf_publishing_escrow_success( track_required_data, expected_not_int_usage_type): """Test bulk phf publishing escrows can be inserted into db.""" track_id = track_required_data['track_id'] phf_mechadmin_track.insert_phf_mechadmin_track(track_required_data) escrows_data = [{ 'track_id': track_id, 'store': 'Amazon', 'qty': 1, 'royalty_rate_calculated': 1, 'royalty_calculated': 1, 'gross_revenue': 1, 'net_revenue': 1, 'dist_fee': 1, 'sales_file_name': 'name', 'period_id': 1 }, { 'track_id': track_id, 'store': 'ITunes', 'qty': 1, 'royalty_rate_calculated': 1, 'royalty_calculated': 1, 'gross_revenue': 1, 'net_revenue': 'N/A', 'dist_fee': 'N/A', 'usage_type': expected_not_int_usage_type, 'sales_file_name': 'name', 'period_id': 1 }] phf_publishing_escrow.bulk_insert_phf_publishing_escrow(escrows_data) with mysql.ar_db_session() as session: escrows = session.query( phf_publishing_escrow.PhfPublishingEscrow).all() assert len(escrows) == 2 assert escrows[1].dist_fee is None assert escrows[1].net_revenue is None assert escrows[1].usage_type is None @test_utils.test_schema def test_set_all_publishing_escrows_from_file_inactive_success( track_required_data): """Test all file escrow set to inactive.""" track_id = track_required_data['track_id'] file_name = 'filename' phf_mechadmin_track.insert_phf_mechadmin_track(track_required_data) escrows_data = [{ 'track_id': track_id, 'store': 'Amazon', 'qty': 1, 'royalty_rate_calculated': 1, 'royalty_calculated': 1, 'gross_revenue': 1, 'net_revenue': 1, 'dist_fee': 1, 'sales_file_name': file_name, 'period_id': 1 }, { 'track_id': track_id, 'store': 'ITunes', 'qty': 1, 'royalty_rate_calculated': 1, 'royalty_calculated': 1, 'gross_revenue': 1, 'net_revenue': 1, 'dist_fee': 1, 'sales_file_name': file_name, 'period_id': 1 }, { 'track_id': track_id, 'store': 'Spotify', 'qty': 1, 'royalty_rate_calculated': 1, 'royalty_calculated': 1, 'gross_revenue': 1, 'net_revenue': 1, 'dist_fee': 1, 'sales_file_name': 'another_filename', 'period_id': 1 }] phf_publishing_escrow.bulk_insert_phf_publishing_escrow(escrows_data) phf_publishing_escrow.set_all_publishing_escrows_from_file_inactive( file_name) with mysql.ar_db_session() as session: active_escrows = session.query( phf_publishing_escrow.PhfPublishingEscrow).filter_by( active='Y').all() assert len(active_escrows) == 1