From 7eb58d898df1b25f7ac437deef7f5ee1b047945d Mon Sep 17 00:00:00 2001 From: Viktor Andersson <30777521+VIKTORVAV99@users.noreply.github.com> Date: Fri, 12 Jan 2024 11:14:42 +0100 Subject: [PATCH] Add snapshot test for ENTSO-E exchange functions (#6285) * Add snapshot test for ENTSO-E exchange function * add test case for exchange forecasts * sort by datetime to match EventLists * format * account for change to proxy domain --- .../ENTSOE/DK-DK1_GB_exchange_exports.xml | 236 +++++ .../ENTSOE/DK-DK1_GB_exchange_imports.xml | 236 +++++ ...K-DK2_SE-SE4_exchange_forecast_exports.xml | 687 ++++++++++++++ ...K-DK2_SE-SE4_exchange_forecast_imports.xml | 687 ++++++++++++++ parsers/test/snapshots/snap_test_ENTSOE.py | 851 ++++++++++++++++++ parsers/test/test_ENTSOE.py | 89 +- 6 files changed, 2785 insertions(+), 1 deletion(-) create mode 100644 parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_exports.xml create mode 100644 parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_imports.xml create mode 100644 parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_exports.xml create mode 100644 parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_imports.xml create mode 100644 parsers/test/snapshots/snap_test_ENTSOE.py diff --git a/parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_exports.xml b/parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_exports.xml new file mode 100644 index 0000000000..d0a014ffa4 --- /dev/null +++ b/parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_exports.xml @@ -0,0 +1,236 @@ + + + dceac22608ba4d82adab1f0e9e6d9b63 + 1 + A11 + 10X1001A1001A450 + A32 + 10X1001A1001A450 + A33 + 2023-12-22T17:25:00Z + + 2023-12-20T17:00Z + 2023-12-23T00:00Z + + + 1 + A66 + 10YGB----------A + 10YDK-1--------W + MAW + A01 + + + 2023-12-20T17:00Z + 2023-12-22T08:00Z + + PT60M + + 1 + 1362 + + + 2 + 102 + + + 3 + 0 + + + 4 + 0 + + + 5 + 0 + + + 6 + 0 + + + 7 + 0 + + + 8 + 0 + + + 9 + 0 + + + 10 + 0 + + + 11 + 0 + + + 12 + 0 + + + 13 + 0 + + + 14 + 0 + + + 15 + 0 + + + 16 + 0 + + + 17 + 0 + + + 18 + 0 + + + 19 + 0 + + + 20 + 0 + + + 21 + 0 + + + 22 + 0 + + + 23 + 0 + + + 24 + 0 + + + 25 + 0 + + + 26 + 0 + + + 27 + 2 + + + 28 + 1 + + + 29 + 1 + + + 30 + 1 + + + 31 + 1 + + + 32 + 1 + + + 33 + 1 + + + 34 + 1 + + + 35 + 1 + + + 36 + 1 + + + 37 + 1 + + + 38 + 1 + + + 39 + 1 + + + + + 2 + A66 + 10YGB----------A + 10YDK-1--------W + MAW + A01 + + + 2023-12-22T09:00Z + 2023-12-22T11:00Z + + PT60M + + 1 + 1 + + + 2 + 1 + + + + + 3 + A66 + 10YGB----------A + 10YDK-1--------W + MAW + A01 + + + 2023-12-22T13:00Z + 2023-12-22T16:00Z + + PT60M + + 1 + 0 + + + 2 + 0 + + + 3 + 0 + + + + \ No newline at end of file diff --git a/parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_imports.xml b/parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_imports.xml new file mode 100644 index 0000000000..42034cc4d7 --- /dev/null +++ b/parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_imports.xml @@ -0,0 +1,236 @@ + + + 155f9f1423094d35a40a16f1c00ddfa1 + 1 + A11 + 10X1001A1001A450 + A32 + 10X1001A1001A450 + A33 + 2023-12-22T17:24:59Z + + 2023-12-20T17:00Z + 2023-12-23T00:00Z + + + 1 + A66 + 10YDK-1--------W + 10YGB----------A + MAW + A01 + + + 2023-12-20T17:00Z + 2023-12-22T08:00Z + + PT60M + + 1 + 0 + + + 2 + 0 + + + 3 + 0 + + + 4 + 0 + + + 5 + 0 + + + 6 + 0 + + + 7 + 0 + + + 8 + 0 + + + 9 + 0 + + + 10 + 0 + + + 11 + 0 + + + 12 + 0 + + + 13 + 0 + + + 14 + 0 + + + 15 + 0 + + + 16 + 0 + + + 17 + 38 + + + 18 + 710 + + + 19 + 732 + + + 20 + 1382 + + + 21 + 1400 + + + 22 + 1402 + + + 23 + 1406 + + + 24 + 1366 + + + 25 + 1326 + + + 26 + 96 + + + 27 + 0 + + + 28 + 0 + + + 29 + 0 + + + 30 + 0 + + + 31 + 0 + + + 32 + 0 + + + 33 + 0 + + + 34 + 0 + + + 35 + 0 + + + 36 + 0 + + + 37 + 0 + + + 38 + 0 + + + 39 + 0 + + + + + 2 + A66 + 10YDK-1--------W + 10YGB----------A + MAW + A01 + + + 2023-12-22T09:00Z + 2023-12-22T11:00Z + + PT60M + + 1 + 0 + + + 2 + 0 + + + + + 3 + A66 + 10YDK-1--------W + 10YGB----------A + MAW + A01 + + + 2023-12-22T13:00Z + 2023-12-22T16:00Z + + PT60M + + 1 + 2 + + + 2 + 0 + + + 3 + 0 + + + + diff --git a/parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_exports.xml b/parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_exports.xml new file mode 100644 index 0000000000..aeb22ed234 --- /dev/null +++ b/parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_exports.xml @@ -0,0 +1,687 @@ + + + 193626fb23784ea4a5dfaa40d3014339 + 1 + A09 + 10X1001A1001A450 + A32 + 10X1001A1001A450 + A33 + 2023-12-23T12:28:54Z + + 2023-12-20T23:00Z + 2023-12-24T23:00Z + + + 1 + A06 + 10Y1001A1001A47J + 10YDK-2--------M + A05 + MAW + A01 + + + 2023-12-20T23:00Z + 2023-12-21T23:00Z + + PT60M + + 1 + 1264 + + + 2 + 990 + + + 3 + 862 + + + 4 + 1022 + + + 5 + 1078 + + + 6 + 1160 + + + 7 + 1259 + + + 8 + 913 + + + 9 + 719 + + + 10 + 808 + + + 11 + 817 + + + 12 + 753 + + + 13 + 1099 + + + 14 + 1212 + + + 15 + 1309 + + + 16 + 1218 + + + 17 + 1065 + + + 18 + 810 + + + 19 + 727 + + + 20 + 673 + + + 21 + 790 + + + 22 + 85 + + + 23 + 640 + + + 24 + 986 + + + + + 2 + A06 + 10Y1001A1001A47J + 10YDK-2--------M + A05 + MAW + A01 + + + 2023-12-21T23:00Z + 2023-12-22T23:00Z + + PT60M + + 1 + 1301 + + + 2 + 1236 + + + 3 + 1358 + + + 4 + 1455 + + + 5 + 1492 + + + 6 + 1465 + + + 7 + 1386 + + + 8 + 1381 + + + 9 + 721 + + + 10 + 1148 + + + 11 + 1244 + + + 12 + 1354 + + + 13 + 1314 + + + 14 + 1285 + + + 15 + 1272 + + + 16 + 582 + + + 17 + 1338 + + + 18 + 1432 + + + 19 + 1376 + + + 20 + 1421 + + + 21 + 1187 + + + 22 + 1249 + + + 23 + 1312 + + + 24 + 619 + + + + + 3 + A06 + 10Y1001A1001A47J + 10YDK-2--------M + A05 + MAW + A01 + + + 2023-12-22T23:00Z + 2023-12-23T23:00Z + + PT60M + + 1 + 631 + + + 2 + 1191 + + + 3 + 1192 + + + 4 + 1340 + + + 5 + 1477 + + + 6 + 1578 + + + 7 + 1625 + + + 8 + 1485 + + + 9 + 1413 + + + 10 + 432 + + + 11 + 1398 + + + 12 + 1118 + + + 13 + 130 + + + 14 + 622 + + + 15 + 708 + + + 16 + 193 + + + 17 + 26 + + + 18 + 13 + + + 19 + 22 + + + 20 + 163 + + + 21 + 179 + + + 22 + 344 + + + 23 + 251 + + + 24 + 45 + + + + + 4 + A06 + 10Y1001A1001A47J + 10YDK-2--------M + A05 + MAW + A01 + + + 2023-12-23T23:00Z + 2023-12-24T23:00Z + + PT60M + + 1 + 0 + + + 2 + 0 + + + 3 + 0 + + + 4 + 0 + + + 5 + 0 + + + 6 + 0 + + + 7 + 0 + + + 8 + 0 + + + 9 + 0 + + + 10 + 0 + + + 11 + 0 + + + 12 + 0 + + + 13 + 0 + + + 14 + 0 + + + 15 + 0 + + + 16 + 0 + + + 17 + 0 + + + 18 + 0 + + + 19 + 0 + + + 20 + 0 + + + 21 + 0 + + + 22 + 0 + + + 23 + 0 + + + 24 + 0 + + + + + 5 + A06 + 10Y1001A1001A47J + 10YDK-2--------M + A01 + MAW + A01 + + + 2023-12-20T23:00Z + 2023-12-21T23:00Z + + PT60M + + 1 + 770 + + + 2 + 805 + + + 3 + 685 + + + 4 + 714 + + + 5 + 775 + + + 6 + 853 + + + 7 + 931 + + + 8 + 913 + + + 9 + 714 + + + 10 + 808 + + + 11 + 817 + + + 12 + 753 + + + 13 + 805 + + + 14 + 846 + + + 15 + 899 + + + 16 + 835 + + + 17 + 734 + + + 18 + 533 + + + 19 + 0 + + + 20 + 0 + + + 21 + 0 + + + 22 + 14 + + + 23 + 377 + + + 24 + 556 + + + + + 6 + A06 + 10Y1001A1001A47J + 10YDK-2--------M + A01 + MAW + A01 + + + 2023-12-22T23:00Z + 2023-12-23T23:00Z + + PT60M + + 1 + 585 + + + 2 + 1093 + + + 3 + 1192 + + + 4 + 1240 + + + 5 + 1407 + + + 6 + 1465 + + + 7 + 1529 + + + 8 + 1464 + + + 9 + 1413 + + + 10 + 320 + + + 11 + 1398 + + + 12 + 1118 + + + 13 + 93 + + + 14 + 0 + + + 15 + 0 + + + 16 + 0 + + + 17 + 0 + + + 18 + 0 + + + 19 + 0 + + + 20 + 0 + + + 21 + 0 + + + 22 + 0 + + + 23 + 0 + + + 24 + 0 + + + + diff --git a/parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_imports.xml b/parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_imports.xml new file mode 100644 index 0000000000..4391fdd1db --- /dev/null +++ b/parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_imports.xml @@ -0,0 +1,687 @@ + + + 98c8dff04ecc45dba48ea39fb0f1adb8 + 1 + A09 + 10X1001A1001A450 + A32 + 10X1001A1001A450 + A33 + 2023-12-23T12:28:53Z + + 2023-12-20T23:00Z + 2023-12-24T23:00Z + + + 1 + A06 + 10YDK-2--------M + 10Y1001A1001A47J + A05 + MAW + A01 + + + 2023-12-20T23:00Z + 2023-12-21T23:00Z + + PT60M + + 1 + 0 + + + 2 + 0 + + + 3 + 0 + + + 4 + 0 + + + 5 + 0 + + + 6 + 0 + + + 7 + 0 + + + 8 + 182 + + + 9 + 0 + + + 10 + 232 + + + 11 + 275 + + + 12 + 37 + + + 13 + 0 + + + 14 + 0 + + + 15 + 0 + + + 16 + 0 + + + 17 + 0 + + + 18 + 0 + + + 19 + 294 + + + 20 + 795 + + + 21 + 1075 + + + 22 + 0 + + + 23 + 0 + + + 24 + 0 + + + + + 2 + A06 + 10YDK-2--------M + 10Y1001A1001A47J + A05 + MAW + A01 + + + 2023-12-21T23:00Z + 2023-12-22T23:00Z + + PT60M + + 1 + 0 + + + 2 + 8 + + + 3 + 172 + + + 4 + 259 + + + 5 + 158 + + + 6 + 210 + + + 7 + 506 + + + 8 + 674 + + + 9 + 191 + + + 10 + 109 + + + 11 + 413 + + + 12 + 85 + + + 13 + 225 + + + 14 + 121 + + + 15 + 154 + + + 16 + 0 + + + 17 + 997 + + + 18 + 1300 + + + 19 + 1300 + + + 20 + 1300 + + + 21 + 1057 + + + 22 + 1300 + + + 23 + 1300 + + + 24 + 481 + + + + + 3 + A06 + 10YDK-2--------M + 10Y1001A1001A47J + A05 + MAW + A01 + + + 2023-12-22T23:00Z + 2023-12-23T23:00Z + + PT60M + + 1 + 0 + + + 2 + 0 + + + 3 + 44 + + + 4 + 0 + + + 5 + 0 + + + 6 + 0 + + + 7 + 0 + + + 8 + 0 + + + 9 + 161 + + + 10 + 0 + + + 11 + 257 + + + 12 + 16 + + + 13 + 0 + + + 14 + 1092 + + + 15 + 1170 + + + 16 + 555 + + + 17 + 239 + + + 18 + 1261 + + + 19 + 1261 + + + 20 + 723 + + + 21 + 1174 + + + 22 + 724 + + + 23 + 253 + + + 24 + 322 + + + + + 4 + A06 + 10YDK-2--------M + 10Y1001A1001A47J + A05 + MAW + A01 + + + 2023-12-23T23:00Z + 2023-12-24T23:00Z + + PT60M + + 1 + 0 + + + 2 + 0 + + + 3 + 0 + + + 4 + 0 + + + 5 + 0 + + + 6 + 0 + + + 7 + 0 + + + 8 + 0 + + + 9 + 0 + + + 10 + 0 + + + 11 + 0 + + + 12 + 0 + + + 13 + 0 + + + 14 + 0 + + + 15 + 0 + + + 16 + 0 + + + 17 + 0 + + + 18 + 0 + + + 19 + 0 + + + 20 + 0 + + + 21 + 0 + + + 22 + 0 + + + 23 + 0 + + + 24 + 0 + + + + + 5 + A06 + 10YDK-2--------M + 10Y1001A1001A47J + A01 + MAW + A01 + + + 2023-12-20T23:00Z + 2023-12-21T23:00Z + + PT60M + + 1 + 0 + + + 2 + 0 + + + 3 + 0 + + + 4 + 0 + + + 5 + 0 + + + 6 + 0 + + + 7 + 0 + + + 8 + 0 + + + 9 + 0 + + + 10 + 0 + + + 11 + 0 + + + 12 + 0 + + + 13 + 0 + + + 14 + 0 + + + 15 + 0 + + + 16 + 0 + + + 17 + 0 + + + 18 + 0 + + + 19 + 294 + + + 20 + 795 + + + 21 + 1075 + + + 22 + 0 + + + 23 + 0 + + + 24 + 0 + + + + + 6 + A06 + 10YDK-2--------M + 10Y1001A1001A47J + A01 + MAW + A01 + + + 2023-12-22T23:00Z + 2023-12-23T23:00Z + + PT60M + + 1 + 0 + + + 2 + 0 + + + 3 + 0 + + + 4 + 0 + + + 5 + 0 + + + 6 + 0 + + + 7 + 0 + + + 8 + 0 + + + 9 + 0 + + + 10 + 0 + + + 11 + 0 + + + 12 + 0 + + + 13 + 0 + + + 14 + 1092 + + + 15 + 1170 + + + 16 + 555 + + + 17 + 239 + + + 18 + 1261 + + + 19 + 1261 + + + 20 + 723 + + + 21 + 1174 + + + 22 + 724 + + + 23 + 253 + + + 24 + 322 + + + + \ No newline at end of file diff --git a/parsers/test/snapshots/snap_test_ENTSOE.py b/parsers/test/snapshots/snap_test_ENTSOE.py new file mode 100644 index 0000000000..06d8fd82fd --- /dev/null +++ b/parsers/test/snapshots/snap_test_ENTSOE.py @@ -0,0 +1,851 @@ +# snapshottest: v1 - https://goo.gl/zC4yUc + +from snapshottest import Snapshot + +snapshots = Snapshot() + +snapshots["TestFetchExchange::test_fetch_exchange 1"] = [ + { + "datetime": "2023-12-20T17:00:00+00:00", + "netFlow": 1362.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-20T18:00:00+00:00", + "netFlow": 102.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-20T19:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-20T20:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-20T21:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-20T22:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-20T23:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T00:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T01:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T02:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T03:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T04:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T05:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T06:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T07:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T08:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T09:00:00+00:00", + "netFlow": -38.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T10:00:00+00:00", + "netFlow": -710.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T11:00:00+00:00", + "netFlow": -732.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T12:00:00+00:00", + "netFlow": -1382.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T13:00:00+00:00", + "netFlow": -1400.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T14:00:00+00:00", + "netFlow": -1402.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T15:00:00+00:00", + "netFlow": -1406.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T16:00:00+00:00", + "netFlow": -1366.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T17:00:00+00:00", + "netFlow": -1326.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T18:00:00+00:00", + "netFlow": -96.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T19:00:00+00:00", + "netFlow": 2.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T20:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T21:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T22:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T23:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T00:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T01:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T02:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T03:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T04:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T05:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T06:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T07:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T09:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T10:00:00+00:00", + "netFlow": 1.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T13:00:00+00:00", + "netFlow": -2.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T14:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T15:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK1->GB", + "source": "entsoe.eu", + }, +] + +snapshots["TestFetchExchangeForecast::test_fetch_exchange_forecast 1"] = [ + { + "datetime": "2023-12-20T23:00:00+00:00", + "netFlow": 1264.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T00:00:00+00:00", + "netFlow": 990.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T01:00:00+00:00", + "netFlow": 862.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T02:00:00+00:00", + "netFlow": 1022.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T03:00:00+00:00", + "netFlow": 1078.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T04:00:00+00:00", + "netFlow": 1160.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T05:00:00+00:00", + "netFlow": 1259.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T06:00:00+00:00", + "netFlow": 731.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T07:00:00+00:00", + "netFlow": 719.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T08:00:00+00:00", + "netFlow": 576.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T09:00:00+00:00", + "netFlow": 542.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T10:00:00+00:00", + "netFlow": 716.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T11:00:00+00:00", + "netFlow": 1099.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T12:00:00+00:00", + "netFlow": 1212.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T13:00:00+00:00", + "netFlow": 1309.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T14:00:00+00:00", + "netFlow": 1218.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T15:00:00+00:00", + "netFlow": 1065.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T16:00:00+00:00", + "netFlow": 810.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T17:00:00+00:00", + "netFlow": 433.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T18:00:00+00:00", + "netFlow": -122.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T19:00:00+00:00", + "netFlow": -285.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T20:00:00+00:00", + "netFlow": 85.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T21:00:00+00:00", + "netFlow": 640.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T22:00:00+00:00", + "netFlow": 986.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-21T23:00:00+00:00", + "netFlow": 1301.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T00:00:00+00:00", + "netFlow": 1228.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T01:00:00+00:00", + "netFlow": 1186.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T02:00:00+00:00", + "netFlow": 1196.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T03:00:00+00:00", + "netFlow": 1334.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T04:00:00+00:00", + "netFlow": 1255.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T05:00:00+00:00", + "netFlow": 880.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T06:00:00+00:00", + "netFlow": 707.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T07:00:00+00:00", + "netFlow": 530.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T08:00:00+00:00", + "netFlow": 1039.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T09:00:00+00:00", + "netFlow": 831.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T10:00:00+00:00", + "netFlow": 1269.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T11:00:00+00:00", + "netFlow": 1089.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T12:00:00+00:00", + "netFlow": 1164.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T13:00:00+00:00", + "netFlow": 1118.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T14:00:00+00:00", + "netFlow": 582.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T15:00:00+00:00", + "netFlow": 341.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T16:00:00+00:00", + "netFlow": 132.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T17:00:00+00:00", + "netFlow": 76.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T18:00:00+00:00", + "netFlow": 121.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T19:00:00+00:00", + "netFlow": 130.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T20:00:00+00:00", + "netFlow": -51.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T21:00:00+00:00", + "netFlow": 12.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T22:00:00+00:00", + "netFlow": 138.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-22T23:00:00+00:00", + "netFlow": 631.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T00:00:00+00:00", + "netFlow": 1191.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T01:00:00+00:00", + "netFlow": 1148.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T02:00:00+00:00", + "netFlow": 1340.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T03:00:00+00:00", + "netFlow": 1477.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T04:00:00+00:00", + "netFlow": 1578.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T05:00:00+00:00", + "netFlow": 1625.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T06:00:00+00:00", + "netFlow": 1485.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T07:00:00+00:00", + "netFlow": 1252.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T08:00:00+00:00", + "netFlow": 432.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T09:00:00+00:00", + "netFlow": 1141.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T10:00:00+00:00", + "netFlow": 1102.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T11:00:00+00:00", + "netFlow": 130.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T12:00:00+00:00", + "netFlow": -470.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T13:00:00+00:00", + "netFlow": -462.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T14:00:00+00:00", + "netFlow": -362.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T15:00:00+00:00", + "netFlow": -213.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T16:00:00+00:00", + "netFlow": -1248.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T17:00:00+00:00", + "netFlow": -1239.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T18:00:00+00:00", + "netFlow": -560.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T19:00:00+00:00", + "netFlow": -995.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T20:00:00+00:00", + "netFlow": -380.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T21:00:00+00:00", + "netFlow": -2.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T22:00:00+00:00", + "netFlow": -277.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-23T23:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T00:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T01:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T02:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T03:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T04:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T05:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T06:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T07:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T08:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T09:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T10:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T11:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T12:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T13:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T14:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T15:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T16:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T17:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T18:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T19:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T20:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T21:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, + { + "datetime": "2023-12-24T22:00:00+00:00", + "netFlow": -0.0, + "sortedZoneKeys": "DK-DK2->SE-SE4", + "source": "entsoe.eu", + }, +] diff --git a/parsers/test/test_ENTSOE.py b/parsers/test/test_ENTSOE.py index 838822f6fc..3bd6b5a119 100644 --- a/parsers/test/test_ENTSOE.py +++ b/parsers/test/test_ENTSOE.py @@ -6,12 +6,13 @@ from requests import Session from requests_mock import ANY, GET, Adapter +from snapshottest import TestCase from electricitymap.contrib.lib.types import ZoneKey from parsers import ENTSOE -class TestENTSOE(unittest.TestCase): +class TestENTSOE(TestCase): def setUp(self) -> None: super().setUp() os.environ["ENTSOE_TOKEN"] = "token" @@ -160,6 +161,92 @@ def test_fetch_with_negative_values(self): mock_warning.assert_called() +class TestFetchExchange(TestENTSOE): + def test_fetch_exchange(self): + imports = None + exports = None + # Read import data from mockfile + with open( + "parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_imports.xml", "rb" + ) as import_file: + imports = import_file.read() + # Read export data from mockfile + with open( + "parsers/test/mocks/ENTSOE/DK-DK1_GB_exchange_exports.xml", "rb" + ) as export_file: + exports = export_file.read() + self.adapter.register_uri( + GET, + "?documentType=A11&in_Domain=10YDK-1--------W&out_Domain=10YGB----------A", + content=imports, + ) + self.adapter.register_uri( + GET, + "?documentType=A11&in_Domain=10YGB----------A&out_Domain=10YDK-1--------W", + content=exports, + ) + exchange = ENTSOE.fetch_exchange( + zone_key1=ZoneKey("DK-DK1"), zone_key2=ZoneKey("GB"), session=self.session + ) + exchange.sort(key=lambda x: x["datetime"]) + self.assertMatchSnapshot( + [ + { + "datetime": element["datetime"].isoformat(), + "netFlow": element["netFlow"], + "source": element["source"], + "sortedZoneKeys": element["sortedZoneKeys"], + } + for element in exchange + ] + ) + + +class TestFetchExchangeForecast(TestENTSOE): + def test_fetch_exchange_forecast(self): + imports = None + exports = None + # Read import data from mockfile + with open( + "parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_imports.xml", + "rb", + ) as import_file: + imports = import_file.read() + # Read export data from mockfile + with open( + "parsers/test/mocks/ENTSOE/DK-DK2_SE-SE4_exchange_forecast_exports.xml", + "rb", + ) as export_file: + exports = export_file.read() + self.adapter.register_uri( + GET, + "?documentType=A09&in_Domain=10YDK-2--------M&out_Domain=10Y1001A1001A47J", + content=imports, + ) + self.adapter.register_uri( + GET, + "?documentType=A09&in_Domain=10Y1001A1001A47J&out_Domain=10YDK-2--------M", + content=exports, + ) + exchange_forecast = ENTSOE.fetch_exchange_forecast( + zone_key1=ZoneKey("DK-DK2"), + zone_key2=ZoneKey("SE-SE4"), + session=self.session, + ) + exchange_forecast.sort(key=lambda x: x["datetime"]) + self.assertMatchSnapshot( + [ + { + "datetime": element["datetime"].isoformat(), + "netFlow": element["netFlow"], + "source": element["source"], + "sortedZoneKeys": element["sortedZoneKeys"], + } + for element in exchange_forecast + ] + ) + + class TestENTSOE_Refetch(unittest.TestCase): def test_fetch_uses_normal_url(self): os.environ["ENTSOE_TOKEN"] = "proxy"