"""Test service.""" from unittest.mock import MagicMock import pytest from grass.connectors import service from grass.protocols import rest, utils def test_service_missing_protocol(): """Test when the service is created with a missing protocol.""" with pytest.raises(AssertionError) as exc: service.Service(None) assert str(exc.value) == 'The protocol is required.' def test_service_with_valid_protocol(monkeypatch): """Test when the service is created with a a valid protocol.""" monkeypatch.setattr(utils, 'validate_protocol', MagicMock()) current_service = service.Service(rest) assert utils.validate_protocol.called assert current_service.protocol is rest with pytest.raises(NotImplementedError): current_service.resolve('get', 'relative_url') def test_orchard_web_service_is_subclassed(): """Test orchard web service is derived from Service.""" assert issubclass(service.OrchardWebService, service.Service) def test_orchard_web_service_with_port(): """Test orchard web service with provided port.""" domain = 'api.theorchard.io' port = 90 current_service = service.OrchardWebService( domain, port=port, root='/analytics/', protocol=rest ) assert current_service.domain == domain assert current_service.port == port resolve = current_service.resolve('get', 'metric/dt/') assert resolve == 'https://api.theorchard.io:90/analytics/metric/dt/' def test_orchard_web_service_without_port(): """Test orchard web service without specified port.""" domain = 'api.theorchard.io' port = None current_service = service.OrchardWebService( domain, port=port, root='/analytics/', protocol=rest ) assert current_service.domain == domain assert current_service.port == port resolve = current_service.resolve('get', 'metric/dt/') assert resolve == 'https://api.theorchard.io/analytics/metric/dt/' def test_orchard_web_service_https_with_port(): """Test orchard web service using https and specified port.""" domain = 'api.theorchard.io' port = 443 url_protocol = 'https' current_service = service.OrchardWebService( domain, port=port, root='/analytics/', protocol=rest, url_protocol=url_protocol ) assert current_service.domain == domain assert current_service.port == port assert current_service.url_protocol == url_protocol resolve = current_service.resolve('get', 'metric/dt/') assert resolve == 'https://api.theorchard.io:443/analytics/metric/dt/' def test_orchard_web_service_https_without_port(): """Test orchard web service using https without specified port.""" domain = 'api.theorchard.io' port = None url_protocol = 'https' current_service = service.OrchardWebService( domain, port=port, root='/analytics/', protocol=rest, url_protocol=url_protocol ) assert current_service.domain == domain assert current_service.port == port assert current_service.url_protocol == url_protocol resolve = current_service.resolve('get', 'metric/dt/') assert resolve == 'https://api.theorchard.io/analytics/metric/dt/'