"""Tests for company handlers.""" from unittest import mock from flask import testing as flask_testing from account.models import company_brand, parent_company def _make_pc(): return parent_company.ParentCompany( id=1, name='PC1', uuid='pc-uuid-1', display_name='PC1 Display' ) @mock.patch('account.handlers.company.company_brand_model') def test_get_brands( mock_model: mock.MagicMock, fixture_client: flask_testing.FlaskClient, ): """Test GET /brands returns a flat list.""" pc = _make_pc() cb1 = company_brand.CompanyBrand( id=10, name='Brand1', uuid='brand-uuid-1', display_name='B1', logo_url='https://cdn.theorchard.io/assets/brand1/icons/brand.svg', parent_company_id=1, ) cb1.parent_company = pc cb2 = company_brand.CompanyBrand( id=11, name='Brand2', uuid='brand-uuid-2', display_name='B2', logo_url=None, parent_company_id=1, ) cb2.parent_company = pc mock_model.get_company_brands.return_value = [cb1, cb2] response = fixture_client.get('/brands') assert response.status_code == 200 assert response.json == [ { 'id': 10, 'name': 'Brand1', 'uuid': 'brand-uuid-1', 'display_name': 'B1', 'logo_url': 'https://cdn.theorchard.io/assets/brand1/icons/brand.svg', 'parent_company_id': 1, 'parent_company_uuid': 'pc-uuid-1', }, { 'id': 11, 'name': 'Brand2', 'uuid': 'brand-uuid-2', 'display_name': 'B2', 'logo_url': None, 'parent_company_id': 1, 'parent_company_uuid': 'pc-uuid-1', }, ] @mock.patch('account.handlers.company.company_brand_model') def test_get_companies( mock_model: mock.MagicMock, fixture_client: flask_testing.FlaskClient, ): """Test GET /companies returns wrapped list.""" pc = _make_pc() cb1 = company_brand.CompanyBrand( id=10, name='Brand1', uuid='brand-uuid-1', display_name='B1', logo_url='https://cdn.theorchard.io/assets/brand1/icons/brand.svg', parent_company_id=1, ) cb1.parent_company = pc mock_model.get_company_brands.return_value = [cb1] response = fixture_client.get('/companies') assert response.status_code == 200 assert response.json == { 'companies': [ { 'id': 10, 'name': 'Brand1', 'uuid': 'brand-uuid-1', 'display_name': 'B1', 'logo_url': 'https://cdn.theorchard.io/assets/brand1/icons/brand.svg', 'parent_company_id': 1, 'parent_company_uuid': 'pc-uuid-1', }, ] } @mock.patch('account.handlers.company.company_brand_model') def test_get_company_not_found( mock_model: mock.MagicMock, fixture_client: flask_testing.FlaskClient, ): """Test get_company_brand_by_uuid returns 404 when not found.""" mock_model.get_company_brand.return_value = None response = fixture_client.get('/companies/unknown-uuid') assert response.status_code == 404 @mock.patch('account.handlers.company.company_brand_model') def test_get_company( mock_model: mock.MagicMock, fixture_client: flask_testing.FlaskClient, ): """Test get_company_brand_by_uuid returns a single company.""" pc = _make_pc() cb = company_brand.CompanyBrand( id=10, name='Brand1', uuid='brand-uuid-1', display_name='B1', logo_url='https://cdn.theorchard.io/assets/brand1/icons/brand.svg', parent_company_id=1, ) cb.parent_company = pc mock_model.get_company_brand.return_value = cb response = fixture_client.get('/companies/brand-uuid-1') assert response.status_code == 200 assert response.json == { 'id': 10, 'name': 'Brand1', 'uuid': 'brand-uuid-1', 'display_name': 'B1', 'logo_url': 'https://cdn.theorchard.io/assets/brand1/icons/brand.svg', 'parent_company_id': 1, 'parent_company_uuid': 'pc-uuid-1', } mock_model.get_company_brand.assert_called_once_with('brand-uuid-1')