"""Functional tests for fetching products.""" from tests.testutils import db, mock_auth @db.test_schema_default_seed def test_get_products(auth_client, mocker, mock_account): """Test fetch account catalog.""" mock_auth(mocker, mock_account.id) result = auth_client.get( "/products", query_string={"vendor_id": mock_account.id, "limit": 2, "offset": 0}, ) assert result.json == { "items": [ {"product_id": 2}, {"product_id": 3}, ], "pagination": {"total_records": 5, "type": "standard"}, } assert result.status_code == 200 @db.test_schema_default_seed def test_get_products_without_splits(auth_client, mocker, mock_account): """Test fetch account catalog without splits.""" mock_auth(mocker, mock_account.id) result = auth_client.get( "/products", query_string={ "vendor_id": mock_account.id, "max_tracks_with_splits": 0, }, ) assert result.json == { "items": [{"product_id": 5}, {"product_id": 10050}], "pagination": {"total_records": 2, "type": "standard"}, } assert result.status_code == 200 @db.test_schema_default_seed def test_get_products_missing_splits(auth_client, mocker, mock_account): """Test fetch account catalog without splits.""" mock_auth(mocker, mock_account.id) result = auth_client.get( "/products", query_string={ "vendor_id": mock_account.id, "min_tracks_with_splits": 1, "min_tracks_without_splits": 1, }, ) assert result.json == { "items": [{"product_id": 1}], "pagination": {"total_records": 1, "type": "standard"}, } assert result.status_code == 200 @db.test_schema_default_seed def test_get_products_term(auth_client, mocker, mock_account): """Test fetch account catalog without splits.""" mock_auth(mocker, mock_account.id) result = auth_client.get( "/products", query_string={ "vendor_id": mock_account.id, "term": "and", }, ) assert result.json == { "items": [{"product_id": 2}, {"product_id": 3}], "pagination": {"total_records": 2, "type": "standard"}, } assert result.status_code == 200 @db.test_schema_default_seed def test_get_products_label_participant_ids_ids(auth_client, mocker, mock_account): """Test fetch products with label participant uuids.""" mock_auth(mocker, mock_account.id) result = auth_client.get( "/products", query_string={ "vendor_id": mock_account.id, "label_participant_uuids": "1-1-1-1,1-1-1-2,1-1-1-5", }, ) assert result.json == { "items": [ {"product_id": 2}, {"product_id": 3}, {"product_id": 5}, {"product_id": 1}, ], "pagination": {"total_records": 4, "type": "standard"}, } assert result.status_code == 200 def test_get_products_unauthorized(auth_client, mocker, mock_account): """Test fetch account catalog without splits.""" mock_auth(mocker, mock_account.id) result = auth_client.get( "/products", query_string={ "vendor_id": 999666, }, ) assert result.status_code == 403 @db.test_schema_default_seed def test_get_products_by_collaborator(auth_client, mocker, mock_account): """Test fetch account catalog by collaborator.""" mock_auth(mocker, mock_account.id) result = auth_client.get( "/products", query_string={ "collaborator_id": 1, }, ) assert result.json == { "items": [{"product_id": 1}], "pagination": {"total_records": 1, "type": "standard"}, } assert result.status_code == 200 def test_get_products_requires_exactly_one_owner(auth_client, mocker, mock_account): """Reject requests with neither or both of vendor_id/collaborator_id.""" mock_auth(mocker, mock_account.id) neither = auth_client.get("/products") assert neither.status_code == 400 both = auth_client.get( "/products", query_string={"vendor_id": mock_account.id, "collaborator_id": 1}, ) assert both.status_code == 400