Browse Source

[DATALAD] Recorded changes

Daniel Busch 5 months ago
parent
commit
122e331aaa
39 changed files with 253 additions and 38 deletions
  1. 0 1
      downloaded_data/farm_gate_agriculture_energy/2023-12-13/Emissions_Agriculture_Energy_E_All_Data.csv
  2. 0 1
      downloaded_data/farm_gate_agriculture_energy/2023-12-13/Emissions_Agriculture_Energy_E_All_Data_NOFLAG.csv
  3. 0 1
      downloaded_data/farm_gate_agriculture_energy/2023-12-13/Emissions_Agriculture_Energy_E_AreaCodes.csv
  4. 0 1
      downloaded_data/farm_gate_agriculture_energy/2023-12-13/Emissions_Agriculture_Energy_E_Flags.csv
  5. 0 1
      downloaded_data/farm_gate_agriculture_energy/2023-12-13/farm_gate_agriculture_energy.zip
  6. 0 1
      downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_All_Data.csv
  7. 0 1
      downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_All_Data_NOFLAG.csv
  8. 0 1
      downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_AreaCodes.csv
  9. 0 1
      downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_Flags.csv
  10. 0 1
      downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_ItemCodes.csv
  11. 0 1
      downloaded_data/farm_gate_emissions_crops/2023-11-09/farm_gate_emissions_crops.zip
  12. 0 1
      downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_All_Data.csv
  13. 0 1
      downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_All_Data_NOFLAG.csv
  14. 0 1
      downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_AreaCodes.csv
  15. 0 1
      downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_Flags.csv
  16. 0 1
      downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_ItemCodes.csv
  17. 0 1
      downloaded_data/farm_gate_livestock/2023-11-09/farm_gate_livestock.zip
  18. 0 1
      downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_All_Data.csv
  19. 0 1
      downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_All_Data_NOFLAG.csv
  20. 0 1
      downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_AreaCodes.csv
  21. 0 1
      downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_Flags.csv
  22. 0 1
      downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_ItemCodes.csv
  23. 0 1
      downloaded_data/land_use_drained_organic_soils/2023-11-09/land_use_drained_organic_soils.zip
  24. 0 1
      downloaded_data/land_use_fires/2023-11-09/Emissions_Land_Use_Fires_E_All_Data.csv
  25. 0 1
      downloaded_data/land_use_fires/2023-11-09/Emissions_Land_Use_Fires_E_All_Data_NOFLAG.csv
  26. 0 1
      downloaded_data/land_use_fires/2023-11-09/Emissions_Land_Use_Fires_E_AreaCodes.csv
  27. 0 1
      downloaded_data/land_use_fires/2023-11-09/Emissions_Land_Use_Fires_E_Flags.csv
  28. 0 1
      downloaded_data/land_use_fires/2023-11-09/land_use_fires.zip
  29. 0 1
      downloaded_data/land_use_forests/2023-11-09/Emissions_Land_Use_Forests_E_All_Data.csv
  30. 0 1
      downloaded_data/land_use_forests/2023-11-09/Emissions_Land_Use_Forests_E_All_Data_NOFLAG.csv
  31. 0 1
      downloaded_data/land_use_forests/2023-11-09/Emissions_Land_Use_Forests_E_AreaCodes.csv
  32. 0 1
      downloaded_data/land_use_forests/2023-11-09/Emissions_Land_Use_Forests_E_Flags.csv
  33. 0 1
      downloaded_data/land_use_forests/2023-11-09/land_use_forests.zip
  34. 0 1
      downloaded_data/pre_post_agricultural_production/2023-11-09/Emissions_Pre_Post_Production_E_All_Data.csv
  35. 0 1
      downloaded_data/pre_post_agricultural_production/2023-11-09/Emissions_Pre_Post_Production_E_All_Data_NOFLAG.csv
  36. 0 1
      downloaded_data/pre_post_agricultural_production/2023-11-09/Emissions_Pre_Post_Production_E_AreaCodes.csv
  37. 0 1
      downloaded_data/pre_post_agricultural_production/2023-11-09/Emissions_Pre_Post_Production_E_Flags.csv
  38. 0 1
      downloaded_data/pre_post_agricultural_production/2023-11-09/pre_post_agricultural_production.zip
  39. 253 0
      tests/unit/test_download.py

+ 0 - 1
downloaded_data/farm_gate_agriculture_energy/2023-12-13/Emissions_Agriculture_Energy_E_All_Data.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/K2/xM/MD5E-s3747984--5c8e2441e4d635b94dbeca29d8a1cd0d.csv/MD5E-s3747984--5c8e2441e4d635b94dbeca29d8a1cd0d.csv

+ 0 - 1
downloaded_data/farm_gate_agriculture_energy/2023-12-13/Emissions_Agriculture_Energy_E_All_Data_NOFLAG.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/1V/8w/MD5E-s2905364--66bf9d1c3aba04a26b1acc2554e7c2d5.csv/MD5E-s2905364--66bf9d1c3aba04a26b1acc2554e7c2d5.csv

+ 0 - 1
downloaded_data/farm_gate_agriculture_energy/2023-12-13/Emissions_Agriculture_Energy_E_AreaCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/ww/m4/MD5E-s6291--0c7df737cb3e007c75cbc38ab03cb1ae.csv/MD5E-s6291--0c7df737cb3e007c75cbc38ab03cb1ae.csv

+ 0 - 1
downloaded_data/farm_gate_agriculture_energy/2023-12-13/Emissions_Agriculture_Energy_E_Flags.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/ZJ/33/MD5E-s56--49ffa55879a2eb0ff6dba98c17944376.csv/MD5E-s56--49ffa55879a2eb0ff6dba98c17944376.csv

+ 0 - 1
downloaded_data/farm_gate_agriculture_energy/2023-12-13/farm_gate_agriculture_energy.zip

@@ -1 +0,0 @@
-../../../.git/annex/objects/4m/p0/MD5E-s1131872--3a3329f2115c62bab08ba71183623db7.zip/MD5E-s1131872--3a3329f2115c62bab08ba71183623db7.zip

+ 0 - 1
downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_All_Data.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/9X/27/MD5E-s18421900--06c176efdfe8eba45d3c55fe10f6d483.csv/MD5E-s18421900--06c176efdfe8eba45d3c55fe10f6d483.csv

+ 0 - 1
downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_All_Data_NOFLAG.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/x2/Jq/MD5E-s13411273--09d470954a229689107df6f1c44d28b4.csv/MD5E-s13411273--09d470954a229689107df6f1c44d28b4.csv

+ 0 - 1
downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_AreaCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/ww/m4/MD5E-s6291--0c7df737cb3e007c75cbc38ab03cb1ae.csv/MD5E-s6291--0c7df737cb3e007c75cbc38ab03cb1ae.csv

+ 0 - 1
downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_Flags.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/gW/QQ/MD5E-s134--7852035bf48ab964ef4b9a62152be7dc.csv/MD5E-s134--7852035bf48ab964ef4b9a62152be7dc.csv

+ 0 - 1
downloaded_data/farm_gate_emissions_crops/2023-11-09/Emissions_crops_E_ItemCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/W7/5Z/MD5E-s272--615170d0f5f83341b7a3783c59dfe51b.csv/MD5E-s272--615170d0f5f83341b7a3783c59dfe51b.csv

+ 0 - 1
downloaded_data/farm_gate_emissions_crops/2023-11-09/farm_gate_emissions_crops.zip

@@ -1 +0,0 @@
-../../../.git/annex/objects/mG/4x/MD5E-s5025708--d6b35891c494f61bb1699f669611a959.zip/MD5E-s5025708--d6b35891c494f61bb1699f669611a959.zip

+ 0 - 1
downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_All_Data.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/Jk/Z7/MD5E-s130221694--993f534b79c1479b4487a34d48d05948.csv/MD5E-s130221694--993f534b79c1479b4487a34d48d05948.csv

+ 0 - 1
downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_All_Data_NOFLAG.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/P0/9j/MD5E-s96060625--9f782ebc87a0dc22ed20f488dc9aae0e.csv/MD5E-s96060625--9f782ebc87a0dc22ed20f488dc9aae0e.csv

+ 0 - 1
downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_AreaCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/4P/vG/MD5E-s6251--d86a24d9bb5f28127ff8970b7c033be9.csv/MD5E-s6251--d86a24d9bb5f28127ff8970b7c033be9.csv

+ 0 - 1
downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_Flags.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/gW/QQ/MD5E-s134--7852035bf48ab964ef4b9a62152be7dc.csv/MD5E-s134--7852035bf48ab964ef4b9a62152be7dc.csv

+ 0 - 1
downloaded_data/farm_gate_livestock/2023-11-09/Emissions_livestock_E_ItemCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/GP/ZJ/MD5E-s611--12df116591f7c201ca38e86a76846d24.csv/MD5E-s611--12df116591f7c201ca38e86a76846d24.csv

+ 0 - 1
downloaded_data/farm_gate_livestock/2023-11-09/farm_gate_livestock.zip

@@ -1 +0,0 @@
-../../../.git/annex/objects/1M/0X/MD5E-s33910537--28bb5f9131517238e7a112e6871d5898.zip/MD5E-s33910537--28bb5f9131517238e7a112e6871d5898.zip

+ 0 - 1
downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_All_Data.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/99/M8/MD5E-s2243842--559f478afc2a52862be39d60763caef5.csv/MD5E-s2243842--559f478afc2a52862be39d60763caef5.csv

+ 0 - 1
downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_All_Data_NOFLAG.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/WZ/34/MD5E-s1666995--fcefba6724146fdbcdb43f0d0d4b79e3.csv/MD5E-s1666995--fcefba6724146fdbcdb43f0d0d4b79e3.csv

+ 0 - 1
downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_AreaCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/ww/m4/MD5E-s6291--0c7df737cb3e007c75cbc38ab03cb1ae.csv/MD5E-s6291--0c7df737cb3e007c75cbc38ab03cb1ae.csv

+ 0 - 1
downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_Flags.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/ZJ/33/MD5E-s56--49ffa55879a2eb0ff6dba98c17944376.csv/MD5E-s56--49ffa55879a2eb0ff6dba98c17944376.csv

+ 0 - 1
downloaded_data/land_use_drained_organic_soils/2023-11-09/Emissions_Drained_Organic_Soils_E_ItemCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/Vg/XG/MD5E-s25--91eb7aa7ff09282acaf3300f619b8934.csv/MD5E-s25--91eb7aa7ff09282acaf3300f619b8934.csv

+ 0 - 1
downloaded_data/land_use_drained_organic_soils/2023-11-09/land_use_drained_organic_soils.zip

@@ -1 +0,0 @@
-../../../.git/annex/objects/FK/vp/MD5E-s387900--a022e0142fa658793302f93ce4820f51.zip/MD5E-s387900--a022e0142fa658793302f93ce4820f51.zip

+ 0 - 1
downloaded_data/land_use_fires/2023-11-09/Emissions_Land_Use_Fires_E_All_Data.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/X6/F8/MD5E-s8494656--8dd8d98e2b93871d065d3ab61cbbb2d0.csv/MD5E-s8494656--8dd8d98e2b93871d065d3ab61cbbb2d0.csv

+ 0 - 1
downloaded_data/land_use_fires/2023-11-09/Emissions_Land_Use_Fires_E_All_Data_NOFLAG.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/0j/QW/MD5E-s6357447--b13bfb628607550945857dff7ab22a90.csv/MD5E-s6357447--b13bfb628607550945857dff7ab22a90.csv

+ 0 - 1
downloaded_data/land_use_fires/2023-11-09/Emissions_Land_Use_Fires_E_AreaCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/ww/m4/MD5E-s6291--0c7df737cb3e007c75cbc38ab03cb1ae.csv/MD5E-s6291--0c7df737cb3e007c75cbc38ab03cb1ae.csv

+ 0 - 1
downloaded_data/land_use_fires/2023-11-09/Emissions_Land_Use_Fires_E_Flags.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/ZJ/33/MD5E-s56--49ffa55879a2eb0ff6dba98c17944376.csv/MD5E-s56--49ffa55879a2eb0ff6dba98c17944376.csv

+ 0 - 1
downloaded_data/land_use_fires/2023-11-09/land_use_fires.zip

@@ -1 +0,0 @@
-../../../.git/annex/objects/8j/pF/MD5E-s1749124--dc55869803658e9cd776b60ae24107eb.zip/MD5E-s1749124--dc55869803658e9cd776b60ae24107eb.zip

+ 0 - 1
downloaded_data/land_use_forests/2023-11-09/Emissions_Land_Use_Forests_E_All_Data.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/67/69/MD5E-s1110885--79f06db2c0b50d9d6262ad87e9981db7.csv/MD5E-s1110885--79f06db2c0b50d9d6262ad87e9981db7.csv

+ 0 - 1
downloaded_data/land_use_forests/2023-11-09/Emissions_Land_Use_Forests_E_All_Data_NOFLAG.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/K5/XV/MD5E-s806494--d3d276b80c5dbe86be357eacb9ce1869.csv/MD5E-s806494--d3d276b80c5dbe86be357eacb9ce1869.csv

+ 0 - 1
downloaded_data/land_use_forests/2023-11-09/Emissions_Land_Use_Forests_E_AreaCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/8F/gx/MD5E-s6442--bb95e21597ca3104fc033daa29e87e2c.csv/MD5E-s6442--bb95e21597ca3104fc033daa29e87e2c.csv

+ 0 - 1
downloaded_data/land_use_forests/2023-11-09/Emissions_Land_Use_Forests_E_Flags.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/ZJ/33/MD5E-s56--49ffa55879a2eb0ff6dba98c17944376.csv/MD5E-s56--49ffa55879a2eb0ff6dba98c17944376.csv

+ 0 - 1
downloaded_data/land_use_forests/2023-11-09/land_use_forests.zip

@@ -1 +0,0 @@
-../../../.git/annex/objects/km/WQ/MD5E-s177332--a1265221e2763f2048a45f727864166e.zip/MD5E-s177332--a1265221e2763f2048a45f727864166e.zip

+ 0 - 1
downloaded_data/pre_post_agricultural_production/2023-11-09/Emissions_Pre_Post_Production_E_All_Data.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/F2/2V/MD5E-s9990445--1884fe626fe79701aef21dd62a7d999b.csv/MD5E-s9990445--1884fe626fe79701aef21dd62a7d999b.csv

+ 0 - 1
downloaded_data/pre_post_agricultural_production/2023-11-09/Emissions_Pre_Post_Production_E_All_Data_NOFLAG.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/ZW/65/MD5E-s7957490--02212a350da3de62f437750ff2190da7.csv/MD5E-s7957490--02212a350da3de62f437750ff2190da7.csv

+ 0 - 1
downloaded_data/pre_post_agricultural_production/2023-11-09/Emissions_Pre_Post_Production_E_AreaCodes.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/5F/x7/MD5E-s6898--e6afc975758367037e97b7a51601eef6.csv/MD5E-s6898--e6afc975758367037e97b7a51601eef6.csv

+ 0 - 1
downloaded_data/pre_post_agricultural_production/2023-11-09/Emissions_Pre_Post_Production_E_Flags.csv

@@ -1 +0,0 @@
-../../../.git/annex/objects/8f/5K/MD5E-s37--c802d00a3f6701103f12b45fd77c936d.csv/MD5E-s37--c802d00a3f6701103f12b45fd77c936d.csv

+ 0 - 1
downloaded_data/pre_post_agricultural_production/2023-11-09/pre_post_agricultural_production.zip

@@ -1 +0,0 @@
-../../../.git/annex/objects/0z/JM/MD5E-s4159211--d529d764b672c1b778d13a7ca2cc3d13.zip/MD5E-s4159211--d529d764b672c1b778d13a7ca2cc3d13.zip

+ 253 - 0
tests/unit/test_download.py

@@ -0,0 +1,253 @@
+import pytest
+import requests
+
+from src.faostat_data_primap.download import (
+    calculate_checksum,
+    download_methodology,
+    find_previous_release_path,
+)
+
+
+@pytest.fixture
+def temp_domain_directories(tmp_path):
+    """
+    Sets up a temporary directory structure for domains and releases for testing.
+
+    Parameters
+    ----------
+    tmp_path : pathlib.Path
+        A pytest-provided temporary directory path.
+
+    Returns
+    -------
+    dict
+        A dictionary containing the paths to the `downloaded_data` directory,
+        the specific domain directory, and a list of sorted release paths.
+    """
+    downloaded_data = tmp_path / "downloaded_data"
+    downloaded_data.mkdir()
+
+    domains = (
+        "farm_gate_emissions_crops",
+        "farm_gate_livestock",
+        "farm_gate_agriculture_energy",
+        "land_use_forests",
+        "land_use_fires",
+        "land_use_drained_organic_soils",
+        "pre_post_agricultural_production",
+    )
+    domain_paths = []
+
+    for domain in domains:
+        domain_path = downloaded_data / domain
+        domain_path.mkdir()
+        domain_paths.append(domain_path)
+
+    return {
+        "downloaded_data": downloaded_data,
+        "domain_paths": domain_paths,
+    }
+
+
+@pytest.mark.parametrize(
+    "releases," "current_release_date, " "expected_result_date",
+    [
+        pytest.param(
+            ["2023-12-13", "2022-03-18", "2024-11-29", "2024-11-09"],
+            "2024-11-29",
+            "2024-11-09",
+            id="current release is latest release",
+        ),
+        pytest.param(
+            ["2023-12-13", "2022-03-18", "2024-11-29", "2024-11-09"],
+            "2023-12-13",
+            "2022-03-18",
+            id="current somewhere not the latest release",
+        ),
+    ],
+)
+def test_find_previous_release_path_exists(
+    temp_domain_directories, releases, current_release_date, expected_result_date
+):
+    domain_path = temp_domain_directories["domain_paths"][
+        0
+    ]  # farm_gate_emissions_crops
+    current_release_path = domain_path / current_release_date
+    expected_result = domain_path / expected_result_date
+
+    release_paths = []
+    for release in releases:
+        release_path = domain_path / release
+        release_path.mkdir()
+        release_paths.append(release_path)
+
+    result = find_previous_release_path(current_release_path)
+
+    assert result == expected_result
+
+
+@pytest.mark.parametrize(
+    "releases,current_release_date",
+    [
+        pytest.param(
+            ["2023-12-13", "2022-03-18", "2024-11-29", "2024-11-09"],
+            "2022-03-18",
+            id="current release is oldest release",
+        ),
+        pytest.param(
+            ["2024-11-09"], "2024-11-09", id="current release is only release"
+        ),
+    ],
+)
+def test_find_previous_release_path_that_does_not_exists(
+    temp_domain_directories, releases, current_release_date
+):
+    domain_path = temp_domain_directories["domain_paths"][
+        0
+    ]  # farm_gate_emissions_crops
+    current_release_path = domain_path / current_release_date
+
+    release_paths = []
+    for release in releases:
+        release_path = domain_path / release
+        release_path.mkdir()
+        release_paths.append(release_path)
+
+    result = find_previous_release_path(current_release_path)
+
+    assert not result
+
+
+@pytest.mark.parametrize(
+    "releases,current_release_date",
+    [
+        pytest.param(
+            ["2023-12-13", "2022-03-18", "2024-11-29", "20240-11-09"],
+            "2022-03-18",
+            id="typo",
+        ),
+        pytest.param(
+            ["20231213", "2022-03-18", "2024-11-29", "2024-11-09"],
+            "2022-03-18",
+            id="missing hyphen",
+        ),
+    ],
+)
+def test_find_previous_release_path_wrong_dir_format(
+    temp_domain_directories, releases, current_release_date
+):
+    domain_path = temp_domain_directories["domain_paths"][
+        0
+    ]  # farm_gate_emissions_crops
+    current_release_path = domain_path / current_release_date
+
+    release_paths = []
+    for release in releases:
+        release_path = domain_path / release
+        release_path.mkdir()
+        release_paths.append(release_path)
+
+    with pytest.raises(ValueError) as excinfo:
+        result = find_previous_release_path(current_release_path)  # noqa: F841
+
+    assert str(excinfo.value) == "All release folders must be in YYYY-MM-DD format"
+
+
+def test_calculate_checksum(tmp_path):
+    filepath_a = tmp_path / "test_file_a.txt"
+    with open(filepath_a, "w") as f:
+        f.write("content of file a")
+
+    filepath_b = tmp_path / "test_file_b.txt"
+    with open(filepath_b, "w") as f:
+        f.write("content of file a")
+
+    filepath_c = tmp_path / "test_file_c.txt"
+    with open(filepath_c, "w") as f:
+        f.write("content of file c")
+
+    checksum_a = calculate_checksum(filepath_a)
+
+    checksum_b = calculate_checksum(filepath_b)
+
+    checksum_c = calculate_checksum(filepath_c)
+
+    assert checksum_a == checksum_b
+
+    assert checksum_b != checksum_c
+
+
+def test_file_exists_in_previous_release_and_is_the_same(temp_domain_directories):
+    # set up temporary directories
+    downloaded_data_path = temp_domain_directories["downloaded_data"]
+    domain_path = temp_domain_directories["domain_paths"][
+        0
+    ]  # farm_gate_emissions_crops
+
+    # make folders for different releases
+    for release in ["2023-12-13", "2022-03-18", "2024-11-29", "2024-11-09"]:
+        release_path = domain_path / release
+        release_path.mkdir()
+
+    file_to_compare_path = domain_path / "2024-11-09" / "GCE_e.pdf"
+    response = requests.get(
+        "https://files-faostat.fao.org/production/GCE/GCE_e.pdf",
+        stream=True,
+        timeout=30,
+    )
+    response.raise_for_status()  # Check for successful request
+    with open(file_to_compare_path, "wb") as f:
+        f.write(response.content)
+    save_path = downloaded_data_path / "farm_gate_emissions_crops" / "2024-11-29"
+    download_methodology(
+        "https://files-faostat.fao.org/production/GCE/GCE_e.pdf", save_path=save_path
+    )
+    downloaded_file_path = domain_path / "2024-11-29" / "GCE_e.pdf"
+    assert downloaded_file_path.is_symlink()
+
+
+def test_methodology_document_exists_in_previous_release_but_is_different(
+    temp_domain_directories,
+):
+    # set up temporary directories
+    domain_path = temp_domain_directories["domain_paths"][
+        0
+    ]  # farm_gate_emissions_crops
+
+    # make folders for different releases
+    for release in ["2023-12-13", "2022-03-18", "2024-11-29", "2024-11-09"]:
+        release_path = domain_path / release
+        release_path.mkdir()
+
+    file_to_compare_path = domain_path / "2024-11-09" / "GCE_e.pdf"
+    with open(file_to_compare_path, "wb") as f:
+        s = "hi"
+        f.write(s.encode("utf-8"))
+
+    save_path = domain_path / "2024-11-29"
+    download_methodology(
+        "https://files-faostat.fao.org/production/GCE/GCE_e.pdf", save_path=save_path
+    )
+    downloaded_file_path = domain_path / "2024-11-29" / "GCE_e.pdf"
+    assert downloaded_file_path.exists()
+
+
+def test_methodology_document_does_not_exist_in_previous_release(
+    temp_domain_directories,
+):
+    # set up temporary directories
+    domain_path = temp_domain_directories["domain_paths"][
+        0
+    ]  # farm_gate_emissions_crops
+
+    # make folders for different releases
+    for release in ["2023-12-13", "2022-03-18", "2024-11-29", "2024-11-09"]:
+        release_path = domain_path / release
+        release_path.mkdir()
+
+    save_path = domain_path / "2024-11-29"
+    download_methodology(
+        "https://files-faostat.fao.org/production/GCE/GCE_e.pdf", save_path=save_path
+    )
+    downloaded_file_path = domain_path / "2024-11-29" / "GCE_e.pdf"
+    assert downloaded_file_path.exists()