Source code for wolfhece._builtin_plugins.dtm_wallonia_1m.tests.test_companion_unit

from __future__ import annotations

from pathlib import Path
from unittest.mock import MagicMock

import pytest

from wolfhece._builtin_plugins.dtm_wallonia_1m.companion import DtmWallonia1mCompanion
import wolfhece.services.dtm_wallonia as dtm_wallonia


@pytest.fixture
[docs] def companion(): viewer = MagicMock() c = DtmWallonia1mCompanion() c.proxy.attach(viewer) c._dtm_service = None c._load_count = 0 return c
[docs] class TestDtmWallonia1mCompanionUnit:
[docs] def test_ensure_service_caches_instance(self, monkeypatch, companion): created = [] class FakeService: pass def _factory(): svc = FakeService() created.append(svc) return svc monkeypatch.setattr(dtm_wallonia, 'DtmWalloniaService', _factory) first = companion._ensure_service() second = companion._ensure_service() assert first is second assert len(created) == 1 companion.proxy._viewer.set_statusbar_text.assert_called_once()
[docs] def test_download_index_uses_service(self, companion): fake_service = MagicMock() fake_service.force_download_index.return_value = Path('idx.shp') companion._dtm_service = fake_service companion._do_download_index() fake_service.force_download_index.assert_called_once_with() assert companion.proxy._viewer.set_statusbar_text.call_count == 2
[docs] def test_get_dtm_1m_delegates_to_service(self, companion): fake_service = MagicMock() fake_bounds = object() fake_result = object() fake_service.get_dtm_1m.return_value = fake_result companion._dtm_service = fake_service result = companion.get_dtm_1m(fake_bounds, force=True) assert result is fake_result fake_service.get_dtm_1m.assert_called_once_with(fake_bounds, force=True)
[docs] def test_get_dtm_1m_xx_yy_delegates_to_service(self, companion): fake_service = MagicMock() fake_result = object() fake_service.get_dtm_1m_xx_yy.return_value = fake_result companion._dtm_service = fake_service result = companion.get_dtm_1m_xx_yy(1.0, 5.0, 2.0, 8.0, force=True) assert result is fake_result fake_service.get_dtm_1m_xx_yy.assert_called_once_with( xmin=1.0, xmax=5.0, ymin=2.0, ymax=8.0, force=True, )
[docs] def test_get_dtm_2m_rebins_result(self, monkeypatch, companion): fake_bounds = object() fake_dtm_1m = MagicMock() fake_dtm_2m = object() fake_dtm_1m.rebin.return_value = fake_dtm_2m monkeypatch.setattr(companion, 'get_dtm_1m', MagicMock(return_value=fake_dtm_1m)) result = companion.get_dtm_2m(fake_bounds, force=True) assert result is fake_dtm_2m companion.get_dtm_1m.assert_called_once_with(fake_bounds, force=True) fake_dtm_1m.rebin.assert_called_once_with(factor=2, operation='mean')
[docs] def test_load_from_zoom_adds_array_layer(self, monkeypatch, companion): fake_array = object() companion.proxy._viewer.get_current_zoom.return_value = { 'xmin': 1.0, 'xmax': 5.0, 'ymin': 2.0, 'ymax': 8.0, } monkeypatch.setattr(companion, 'get_dtm_1m', MagicMock(return_value=fake_array)) companion._do_load_from_zoom(force=False) companion.get_dtm_1m.assert_called_once() companion.proxy._viewer.add_object.assert_called_once_with( 'array', newobj=fake_array, ToCheck=True, id='DTM_Wallonia_1', )