Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

precommit #66

Merged
merged 3 commits into from
Apr 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## 0.10 (unreleased)


- Nothing changed yet.
- Added gmw/gmn/upload/import


## 0.9 (2024-04-23)
Expand Down
64 changes: 62 additions & 2 deletions api/tests/test_bro_import.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import pytest
from django.conf import settings
from requests.exceptions import RequestException
from requests.exceptions import HTTPError, RequestException

from api.bro_import import bulk_import
from api.bro_import import bulk_import, object_import
from api.tests import fixtures

organisation = fixtures.organisation
Expand Down Expand Up @@ -44,3 +44,63 @@ def test_fetch_bro_ids_fail(mocker, bulk_importer):

with pytest.raises(bulk_import.FetchBROIDsError):
bulk_importer._fetch_bro_ids("url.com")


@pytest.fixture
def gmn_object_importer(organisation):
return object_import.GMNObjectImporter(
bro_domain="GMN", bro_id="GMN1234567890", data_owner=organisation.uuid
)


@pytest.mark.django_db
def test_object_importer_create_download_url(gmn_object_importer):
url = gmn_object_importer._create_download_url()

assert (
url
== f"{settings.BRO_UITGIFTE_SERVICE_URL}/gm/gmn/v1/objects/GMN1234567890?fullHistory=nee"
)


@pytest.mark.django_db
def test_object_importer_download_xml(mocker, gmn_object_importer):
expected_content = b"<xml>fake_data</xml>"
mock_get = mocker.patch("requests.get")
mock_response = mocker.Mock()
mock_response.raise_for_status = mocker.Mock()
mock_response.content = expected_content
mock_get.return_value = mock_response

# Test
url = "https://example.com/data.xml"
result = gmn_object_importer._download_xml(url)

# Assert
assert result == expected_content


@pytest.mark.django_db
def test_download_xml_http_error(mocker, gmn_object_importer):
# Setup
mock_get = mocker.patch("requests.get")
mock_response = mocker.Mock()
mock_response.raise_for_status.side_effect = HTTPError("Error occurred")
mock_get.return_value = mock_response

# Test
url = "https://example.com/data.xml"

# Assert that an HTTPError is raised
with pytest.raises(HTTPError):
gmn_object_importer._download_xml(url)


@pytest.mark.django_db
def test_convert_xml_to_json(gmn_object_importer):
xml = b"<xml>fake_data</xml>"
expected_json = {"xml": "fake_data"}

json_data = gmn_object_importer._convert_xml_to_json(xml)

assert json_data == expected_json
37 changes: 36 additions & 1 deletion api/tests/test_bro_upload.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import pytest

from api.bro_upload import delivery
from api.bro_upload import delivery, utils

expected_xml_str = """<registrationRequest xmlns="http://www.broservices.nl/xsd/isgmn/1.0"
xmlns:brocom="http://www.broservices.nl/xsd/brocommon/3.0"
Expand Down Expand Up @@ -94,3 +94,38 @@ def test_xml_generator2():
sourcedocs_data={},
)
generator.create_xml_file()


def test_simlify_validation_errors():
input_data = [
{
"type": "missing",
"loc": ["requestReference"],
"msg": "Field required",
"input": {},
"url": "https://errors.pydantic.dev/2.7/v/missing",
},
{
"type": "missing",
"loc": ["deliveryAccountableParty"],
"msg": "Field required",
"input": {},
"url": "https://errors.pydantic.dev/2.7/v/missing",
},
{
"type": "missing",
"loc": ["qualityRegime"],
"msg": "Field required",
"input": {},
"url": "https://errors.pydantic.dev/2.7/v/missing",
},
]
expected_output = {
"requestReference": "Field required",
"deliveryAccountableParty": "Field required",
"qualityRegime": "Field required",
}

output = utils.simplify_validation_errors(input_data)

assert output == expected_output
37 changes: 37 additions & 0 deletions gmn/tests/test_gmn_serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from datetime import date, datetime

import pytest

from api.tests import fixtures
from gmn import serializers

# this setup is chosen because ruff removes the fixture imports in other methods
organisation = fixtures.organisation
gmn = fixtures.gmn
gmw = fixtures.gmw


@pytest.mark.django_db
def test_gmn_serialization(gmn):
serializer = serializers.GMNSerializer(instance=gmn)
assert serializer.data["bro_id"] == gmn.bro_id


@pytest.mark.django_db
def test_gmn_deserialization(gmn, organisation):
input_data = {
"data_owner": organisation.uuid,
"bro_id": "GMN123456789",
"delivery_accountable_party": "12345678",
"quality_regime": "IMBRO",
"name": "test",
"delivery_context": "test",
"monitoring_purpose": "test",
"groundwater_aspect": "test",
"start_date_monitoring": date(2000, 1, 1),
"object_registration_time": datetime(2000, 1, 1),
"registration_status": "test",
"color": "#000fff",
}
serializer = serializers.GMNSerializer(data=input_data)
assert serializer.is_valid(), serializer.errors
14 changes: 14 additions & 0 deletions gmw/tests/test_gmw_serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import pytest

from api.tests import fixtures
from gmw import serializers

# this setup is chosen because ruff removes the fixture imports in other methods
organisation = fixtures.organisation
gmw = fixtures.gmw


@pytest.mark.django_db
def test_gmw_serialization(gmw):
serializer = serializers.GMWSerializer(instance=gmw)
assert serializer.data["bro_id"] == gmw.bro_id