Skip to content

Commit

Permalink
Merge pull request #36 from akvo/feature/35-potential-duplicate-check…
Browse files Browse the repository at this point in the history
…er-bug

Feature/35 potential duplicate checker bug
  • Loading branch information
ifirmawan committed May 31, 2023
2 parents 5b4e87d + 1b218b4 commit 6d82064
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 6 deletions.
19 changes: 19 additions & 0 deletions dev/backend/sources/category.json
Original file line number Diff line number Diff line change
Expand Up @@ -84,5 +84,24 @@
]
}
]
},
{
"name": "Toilet Category",
"form": 554360198,
"categories": [
{
"name": "Improved",
"questions": [
{
"id": 567800083,
"name": "School Has Toilet",
"options": ["Yes"],
"else": {
"name": "Unimproved"
}
}
]
}
]
}
]
33 changes: 31 additions & 2 deletions dev/backend/tests/test_03_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ async def test_views_filtering_by_form(
assert data[0]["form"] == 554360198

@pytest.mark.asyncio
async def test_views_filtering_by_name(
async def test_views_filtering_by_name_water(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
data = get_categories(session=session, name="water")
assert data[0]["name"] == "Water"

@pytest.mark.asyncio
async def test_views_filtering_by_category(
async def test_views_filtering_by_category_water_limited(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
data = get_categories(session=session, category="limited")
Expand All @@ -57,6 +57,35 @@ async def test_views_filtering_by_category_n_form(
assert data[0]["category"] == "Basic"
assert data[0]["form"] == 554360198

@pytest.mark.asyncio
async def test_views_filtering_by_name_toilet_category(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
data = get_categories(session=session, name="Toilet Category")
assert data[0]["name"] == "Toilet Category"

@pytest.mark.asyncio
async def test_views_filtering_by_category_toilet_category_improved(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
data = get_categories(
session=session,
name="Toilet Category",
category="Improved"
)
assert data[0]["category"] == "Improved"

@pytest.mark.asyncio
async def test_views_filtering_by_category_toilet_category_limited(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
data = get_categories(
session=session,
name="Toilet Category",
category="Limited"
)
assert data == []

@pytest.mark.asyncio
async def test_views_get_result_keys(
self, app: FastAPI, session: Session, client: AsyncClient
Expand Down
6 changes: 4 additions & 2 deletions src/AkvoResponseGrouper/cli/checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,9 @@ def check_config(file_config: str, info: bool = True):
data = f.read()
data = json.loads(data)
errors = []
items = []
duplicates = []
for config in data:
items = []
qs = []
cname = config.get("name")
errors += find_errors_in_config(config=config, name=cname)
Expand All @@ -163,7 +164,8 @@ def check_config(file_config: str, info: bool = True):
"questions": qs,
}
)
duplicates = get_potential_duplicates(items=items)
# move duplicates check inside each config
duplicates += get_potential_duplicates(items=items)
questions = [i["questions"] for i in items]
errors = get_error_messages(errors=errors)
if info:
Expand Down
10 changes: 8 additions & 2 deletions src/AkvoResponseGrouper/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,16 @@ def get_valid_list(opt, c, category):
return category


def get_category(opt: dict, file_path: str = "./.category.json"):
def get_category(data: dict, file_path: str = "./.category.json"):
name = data["name"]
opt = data["opt"]
with open(f"{file_path}") as config_file:
configs = json.load(config_file)
category = False
# filter config with data name (e.g. water == water)
configs = list(filter(
lambda x: x["name"].lower() == name.lower(), configs
))
for config in configs:
for c in config["categories"]:
category = get_valid_list(opt, c, category)
Expand All @@ -129,7 +135,7 @@ def transform_categories_to_df(
df = pd.DataFrame(categories)
results = df.to_dict("records")
for d in results:
d.update({"category": get_category(opt=d["opt"], file_path=file_path)})
d.update({"category": get_category(data=d, file_path=file_path)})
res = pd.DataFrame(results)
if list(res) != ["id", "data", "form", "name", "opt", "category"]:
return pd.DataFrame(
Expand Down

0 comments on commit 6d82064

Please sign in to comment.