"""Test the Transaction(BaseModel) class.""" import pytest from accounting.models.base_model import DataIntegrityException from accounting.models.transaction import Transaction def test_transaction_instance(txn_required_fields): """Test instantiating model.""" txn = Transaction(**txn_required_fields) assert txn.get_value('upc') == 1 def test_transaction_invalid_required_fields(): """Test validation with invalid fields.""" txn = Transaction() with pytest.raises(DataIntegrityException): txn.validate() def test_transaction_valid_required_fields(txn_required_fields): """Test validation with valid fields.""" txn = Transaction(**txn_required_fields) assert txn.validate() is None def test_transaction_invalid_int(): """Test setting a non-int on an int field.""" txn = Transaction() with pytest.raises(ValueError): txn.set_value('statement_id', 'foo') def test_transaction_valid_int(): """Test setting an int on an int field.""" txn = Transaction() txn.set_value('statement_id', 1) assert txn.get_value('statement_id') == 1 def test_transaction_valid_float(): """Test setting a float on a float field.""" txn = Transaction() txn.set_value('total', 0.1) assert txn.get_value('total') == 0.1 def test_transaction_invalid_float(): """Test setting a non-float on a float field.""" txn = Transaction() with pytest.raises(ValueError): txn.set_value('total', 'foo') def test_transaction_invalid_tt_price_combo(txn_required_fields): """Test not setting fields that are required based on trans_type.""" txn_required_fields['trans_type'] = 'FOO' txn_required_fields['unit_price'] = 0 txn_required_fields['original_price'] = 0 txn = Transaction(**txn_required_fields) with pytest.raises(DataIntegrityException): txn.validate()