"""Unit tests for contract_term_transfer schemas.""" import pytest from marshmallow import ValidationError from abacus_contract.schemas.contract_term_transfer import ( BulkAddAttachmentsRequestSchema, ) def test_bulk_add_accepts_attachment_relations(): """attachment_relations is accepted and passed through verbatim. The lambda forwards the staged term's label scoping so the destination term can show the account on the contract detail page. """ body = { 'contract_id': 99, 'upcs': ['111'], 'isrcs': [], 'conditions': [], 'attachment_relations': {'label_ids': ['789']}, } loaded = BulkAddAttachmentsRequestSchema().load(body) assert loaded['attachment_relations'] == {'label_ids': ['789']} def test_bulk_add_attachment_relations_defaults_to_none(): """attachment_relations is optional and defaults to None when omitted.""" body = {'contract_id': 99, 'upcs': ['111'], 'isrcs': [], 'conditions': []} loaded = BulkAddAttachmentsRequestSchema().load(body) assert loaded['attachment_relations'] is None def test_bulk_add_accepts_name(): """Accepts name and uses it as the created term's contract_term_name.""" body = { 'contract_id': 99, 'upcs': ['111'], 'isrcs': [], 'conditions': [], 'name': 'Product Term', } loaded = BulkAddAttachmentsRequestSchema().load(body) assert loaded['name'] == 'Product Term' def test_bulk_add_name_defaults_to_none(): """Omitting name defaults it to None.""" body = {'contract_id': 99, 'upcs': ['111'], 'isrcs': [], 'conditions': []} loaded = BulkAddAttachmentsRequestSchema().load(body) assert loaded['name'] is None def test_bulk_add_still_requires_at_least_one_value(): """The at-least-one-of upcs/isrcs rule is unaffected by the new field.""" body = { 'contract_id': 99, 'upcs': [], 'isrcs': [], 'conditions': [], 'attachment_relations': {'label_ids': ['789']}, } with pytest.raises(ValidationError, match='At least one'): BulkAddAttachmentsRequestSchema().load(body)