diff --git a/basedosdados_api/api/v1/models.py b/basedosdados_api/api/v1/models.py index ee894a27..e00caad3 100644 --- a/basedosdados_api/api/v1/models.py +++ b/basedosdados_api/api/v1/models.py @@ -1087,21 +1087,36 @@ def full_coverage(self) -> str: "type": "open", } ) - if first_closed_datetime_range: + if first_closed_datetime_range: + if not first_open_datetime_range: full_coverage.append( { - "year": str(first_closed_datetime_range.end_year) - if first_closed_datetime_range.end_year + "year": str(first_closed_datetime_range.start_year) + if first_closed_datetime_range.start_year else None, - "month": str(first_closed_datetime_range.end_month).zfill(2) - if first_closed_datetime_range.end_month + "month": str(first_closed_datetime_range.start_month).zfill(2) + if first_closed_datetime_range.start_month else None, - "day": str(first_closed_datetime_range.end_day).zfill(2) - if first_closed_datetime_range.end_day + "day": str(first_closed_datetime_range.start_day).zfill(2) + if first_closed_datetime_range.start_day else None, "type": "closed", } ) + full_coverage.append( + { + "year": str(first_closed_datetime_range.end_year) + if first_closed_datetime_range.end_year + else None, + "month": str(first_closed_datetime_range.end_month).zfill(2) + if first_closed_datetime_range.end_month + else None, + "day": str(first_closed_datetime_range.end_day).zfill(2) + if first_closed_datetime_range.end_day + else None, + "type": "closed", + } + ) return json.dumps(full_coverage) diff --git a/basedosdados_api/api/v1/tests/test_models.py b/basedosdados_api/api/v1/tests/test_models.py index c2dfaed8..6bb56ab9 100644 --- a/basedosdados_api/api/v1/tests/test_models.py +++ b/basedosdados_api/api/v1/tests/test_models.py @@ -277,3 +277,47 @@ def test_table_with_multiple_coverages( ] assert tabela_bairros.full_coverage == json.dumps(table_expected_coverage) + + +@pytest.mark.django_db +def test_table_with_open_coverages( + tabela_bairros, + coverage_tabela_open, + datetime_range_1, +): + """Test for Dataset with multiple coverages.""" + tabela_bairros.save() + coverage_tabela_open.save() + datetime_range_1.coverage = coverage_tabela_open + datetime_range_1.save() + tabela_bairros.coverages.add(coverage_tabela_open) + tabela_bairros.save() + + table_expected_coverage = [ + {"year": "2021", "month": "06", "day": None, "type": "open"}, + {"year": "2023", "month": "06", "day": None, "type": "open"}, + ] + + assert tabela_bairros.full_coverage == json.dumps(table_expected_coverage) + + +@pytest.mark.django_db +def test_table_with_closed_coverages( + tabela_bairros, + coverage_tabela_closed, + datetime_range_3, +): + """Test for Dataset with multiple coverages.""" + tabela_bairros.save() + coverage_tabela_closed.save() + datetime_range_3.coverage = coverage_tabela_closed + datetime_range_3.save() + tabela_bairros.coverages.add(coverage_tabela_closed) + tabela_bairros.save() + + table_expected_coverage = [ + {"year": "2023", "month": "07", "day": None, "type": "closed"}, + {"year": "2026", "month": "06", "day": None, "type": "closed"}, + ] + + assert tabela_bairros.full_coverage == json.dumps(table_expected_coverage)