Skip to content

Commit

Permalink
Merge a830348 into 1c98e41
Browse files Browse the repository at this point in the history
  • Loading branch information
ifirmawan committed May 22, 2023
2 parents 1c98e41 + a830348 commit 843de7c
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 18 deletions.
27 changes: 27 additions & 0 deletions dev/backend/tests/test_02_category.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,30 @@ async def test_if_question_n_options_exists(
options=None,
)
assert cn == [1]

@pytest.mark.asyncio
async def test_get_grouped_categories_route(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
res = await client.get(
app.url_path_for("collection:get_grouped_categories")
)
assert res.status_code == 200
res = await client.get(
app.url_path_for("collection:get_grouped_categories"),
params={
"form": 554360198,
"category": "limited",
},
)
assert res.status_code == 200
res = await client.get(
app.url_path_for(
"collection:get_grouped_categories",
),
params={
"form": 1,
},
)
assert res.status_code == 200
assert res.json() == []
2 changes: 1 addition & 1 deletion dev/backend/tests/test_03_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ async def test_views_filtering_by_data(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
random = get_random_data(session=session)
res = get_categories(session=session, data=str(random.data))
res = get_categories(session=session, data=random.data)
assert len(res) > 0

@pytest.mark.asyncio
Expand Down
3 changes: 3 additions & 0 deletions dev/backend/tests/test_04_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ async def test_if_route_successfully_attached(
)
assert response.status_code == 200

@pytest.mark.asyncio
async def test_if_grouped_categories_route_successfully_added(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
Expand All @@ -27,6 +28,7 @@ async def test_if_grouped_categories_route_successfully_added(
)
assert response.status_code == 200

@pytest.mark.asyncio
async def test_if_refresh_route_successfully_added(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
Expand All @@ -35,6 +37,7 @@ async def test_if_refresh_route_successfully_added(
)
assert response.status_code == 200

@pytest.mark.asyncio
async def test_if_view_is_exists(
self, app: FastAPI, session: Session, client: AsyncClient
) -> None:
Expand Down
1 change: 1 addition & 0 deletions src/AkvoResponseGrouper/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ async def get_index_category(
data: Optional[str] = Query(default=None),
session: Session = Depends(get_session),
):
data = data.split(",") if data else None
res = get_categories(
form=form, name=name, category=category, data=data, session=session
)
Expand Down
39 changes: 22 additions & 17 deletions src/AkvoResponseGrouper/views.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
from typing import List, Optional
from sqlalchemy import func
from sqlalchemy.orm import Session
from .models import Category, CategoryDict
from .utils import transform_categories_to_df, get_counted_category


def get_data_categories(session: Session):
categories = session.query(Category).all()
def get_data_categories(
session: Session,
form: Optional[int] = None,
name: Optional[str] = None,
data: Optional[List[int]] = None,
):
queries = []
if form:
queries.append(Category.form == form)
if name:
queries.append(func.lower(Category.name) == name.lower())
if data:
queries.append(Category.data == data)
categories = session.query(Category).filter(*queries).all()
categories = [c.serialize for c in categories]
return categories

Expand All @@ -20,23 +33,15 @@ def get_categories(
form: Optional[int] = None,
name: Optional[str] = None,
category: Optional[str] = None,
data: Optional[str] = None,
data: Optional[List[int]] = None,
) -> List[CategoryDict]:
res = get_results(session=session)
queries = []
if form:
queries.append(f"form == {form}")
if name:
queries.append(f"name.str.lower() == '{name.lower()}'")
categories = get_data_categories(
session=session, form=form, name=name, data=data
)
df = transform_categories_to_df(categories=categories)
if category:
queries.append(f"category.str.lower() == '{category.lower()}'")
if data:
data = [int(d) for d in data.split(",")]
queries.append("data.isin(@data).values")
if len(queries):
queries = " & ".join(queries)
res = res.query(queries)
return res.to_dict("records")
df = df.query(f"category.str.lower() == '{category.lower()}'")
return df.to_dict("records")


def get_group_by_category(
Expand Down

0 comments on commit 843de7c

Please sign in to comment.