"""Tests for ows_contracts model.""" from unittest.mock import MagicMock from urllib.parse import urlencode from owsrequest import request from owsrequest import test_utils import pytest from ows_accounting.constants import header from ows_accounting.models import ows_contracts @pytest.mark.parametrize( ', '.join(['account_type', 'account_id', 'page_offset', 'page_limit', 'sort_order', 'expected_status', 'expected_message']), [ (header.GRASS_ACCOUNT_TYPE_VENDOR, 100, None, None, None, 200, {'foo': 'bar'}), (header.GRASS_ACCOUNT_TYPE_SUBACCOUNT, 111, 50, None, 'asc', 200, {'foo': 'bar'}), (header.GRASS_ACCOUNT_TYPE_VENDOR, 120, 0, None, 'desc', 400, None)]) def test_get_booked_contracts( monkeypatch, account_type, account_id, page_offset, page_limit, sort_order, expected_status, expected_message): """Test get_booked_contracts.""" expected_offset = page_offset if expected_offset is None: expected_offset = 0 params_dict = { 'page_offset': page_offset, 'page_limit': page_limit, 'sort_order': sort_order } params = urlencode({k: v for k, v in params_dict.items() if v is not None}) path = '/booked/{account_type}/{account_id}?{params}'.format( account_type=account_type, account_id=account_id, params=params) call_specs = [{ 'service': ows_contracts.CONTRACTS_SERVICE, 'path': path, 'status': expected_status, 'json': expected_message}] monkeypatch.setattr( request, 'get', test_utils.mock_ows_requests(call_specs)) response = ows_contracts.get_booked_contracts( account_type, account_id, page_offset=page_offset, page_limit=page_limit, sort_order=sort_order) assert response.message == expected_message assert response.status == expected_status def test_get_booked_contracts_for_wrong_account_type(monkeypatch): """Test get booked contracts for wrong account type.""" monkeypatch.setattr(request, 'get', MagicMock()) response = ows_contracts.get_booked_contracts('wrong_type', 100) assert response.status == 400 request.get.assert_not_called()