"""Tests for BookedVendorContract model.""" from unittest.mock import patch from sqlalchemy.exc import SQLAlchemyError from contracts.models import booked_vendor_contract def test_get_booked_contracts(db_fixture, monkeypatch): """Test getting booked contracts for vendor.""" expected_response = [ { 'id': 2, 'contract_id': 106, 'period_id': 100, 'vendor_id': 100, 'payment_interval': 'quarter', 'currency_id': 1, 'reserve_rate': 0.1, 'number_of_months_before_payout': 2, 'number_of_installments': 3, 'contract_terms': 'Some Text for Test Contract Term', }, { 'id': 1, 'contract_id': 105, 'period_id': 99, 'vendor_id': 100, 'payment_interval': 'month', 'currency_id': 1, 'reserve_rate': 0.6, 'number_of_months_before_payout': 6, 'number_of_installments': 6, 'contract_terms': 'Some Text for Test Contract Term', }, ] response = booked_vendor_contract.get_booked_contracts(100) assert response.status == 200 assert [item.as_dict() for item in response.message] == expected_response def test_get_booked_contracts_not_found(db_fixture, monkeypatch): """Test getting no booked contracts for vendor.""" response = booked_vendor_contract.get_booked_contracts(105) assert response.status == 404 def test_get_booked_contracts_count(db_fixture, monkeypatch): """Test getting booked contracts count for vendor.""" response = booked_vendor_contract.get_booked_contracts_count(100) assert response.status == 200 assert response.message == 2 def test_get_booked_contracts_count_is_zero(db_fixture, monkeypatch): """Test getting booked contracts count for vendor without contracts.""" response = booked_vendor_contract.get_booked_contracts_count(105) assert response.status == 200 assert response.message == 0 @patch('contracts.connectors.mysql.db_session', side_effect=SQLAlchemyError()) def test_get_booked_contracts_count_exception(monkeypatch): """Test getting booked contracts count with exception.""" response = booked_vendor_contract.get_booked_contracts_count(100) assert response.status == 500 def test_get_booked_contracts_by_period_range(db_fixture, monkeypatch): """Test getting booked contracts for vendor.""" expected_response = [ { 'id': 2, 'contract_id': 106, 'period_id': 100, 'vendor_id': 100, 'payment_interval': 'quarter', 'currency_id': 1, 'reserve_rate': 0.1, 'number_of_months_before_payout': 2, 'number_of_installments': 3, 'contract_terms': 'Some Text for Test Contract Term', }, { 'id': 1, 'contract_id': 105, 'period_id': 99, 'vendor_id': 100, 'payment_interval': 'month', 'currency_id': 1, 'reserve_rate': 0.6, 'number_of_months_before_payout': 6, 'number_of_installments': 6, 'contract_terms': 'Some Text for Test Contract Term', }, ] response = booked_vendor_contract.get_booked_contracts_by_period_range(100, 99, 100) assert response.status == 200 assert [item for item in response.message] == expected_response def test_get_booked_contracts_by_period_range_error(db_fixture, monkeypatch): """Test getting booked contracts for vendor.""" response = booked_vendor_contract.get_booked_contracts_by_period_range(100, 100, 99) assert response.status == 404