From 91eb35f3527d1173f60bfc71ead802c61cde33a4 Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Sun, 7 Feb 2021 18:26:48 +0200 Subject: [PATCH 01/28] add color to category --- app/routers/categories.py | 106 +++++++++++++++--- app/static/categories_style.css | 29 +++++ app/static/event/eventedit.css | 6 +- app/templates/base.html | 3 + app/templates/categories.html | 36 ++++++ .../partials/edit_event_details_tab.html | 14 ++- app/templates/partials/index/navigation.html | 3 + tests/category_fixture.py | 8 ++ tests/test_categories.py | 52 +++++---- 9 files changed, 212 insertions(+), 45 deletions(-) create mode 100644 app/static/categories_style.css create mode 100644 app/templates/categories.html diff --git a/app/routers/categories.py b/app/routers/categories.py index 0bc9eaf5..9277e903 100644 --- a/app/routers/categories.py +++ b/app/routers/categories.py @@ -1,19 +1,21 @@ from typing import Dict, List, Any -from fastapi import APIRouter, Depends, HTTPException, Request +from fastapi import APIRouter, Depends, Form, HTTPException, Request from pydantic import BaseModel from sqlalchemy.exc import IntegrityError, SQLAlchemyError from sqlalchemy.orm import Session from starlette import status from starlette.datastructures import ImmutableMultiDict +from starlette.templating import _TemplateResponse + from app.database.database import get_db +from tests.conftest import get_test_db from app.database.models import Category +from app.dependencies import templates + -router = APIRouter( - prefix="/categories", - tags=["categories"], -) +router = APIRouter() class CategoryModel(BaseModel): @@ -32,7 +34,7 @@ class Config: # TODO(issue#29): get current user_id from session -@router.get("/") +@router.get("/categories/by_parameters") def get_categories(request: Request, db_session: Session = Depends(get_db)) -> List[Category]: if validate_request_params(request.query_params): @@ -43,22 +45,56 @@ def get_categories(request: Request, f"unallowed params.") +@router.get("/event/edit") +def your_categories(request: Request, + db_session: Session = Depends(get_db)) -> List[Category]: + """ + will add all user categories to dropdown list + + """ + user_id = 1 + categories_list = get_user_categories(db_session, user_id) + return templates.TemplateResponse("event/eventedit.html", { + "request": request, + "categories_list": categories_list, + }) + +@router.get("/categories") +def category_color_insert(request: Request) -> _TemplateResponse: + return templates.TemplateResponse("categories.html", { + "request": request + }) + # TODO(issue#29): get current user_id from session -@router.post("/") -async def set_category(category: CategoryModel, - db_sess: Session = Depends(get_db)) -> Dict[str, Any]: +@router.post("/categories") +async def set_category(request: Request, + category_name: str = Form(None), + chosen_color: str = Form(None), + db_sess: Session = Depends(get_db)): + + message = "" + user_id = 1 # until issue#29 will get current user_id from session try: - cat = Category.create(db_sess, - name=category.name, - color=category.color, - user_id=category.user_id) + Category.create(db_sess, + name=category_name, + color=chosen_color, + user_id=user_id) except IntegrityError: db_sess.rollback() - raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, - detail=f"category is already exists for " - f"user {category.user_id}.") - else: - return {"category": cat.to_dict()} + message = f"Category is already exists" + return templates.TemplateResponse("categories.html", { + "request": request, + "message": message, + "category_name": category_name, + "chosen_color": chosen_color, + }) + message = f"Congratulation! You have created the category: {category_name}" + return templates.TemplateResponse("categories.html", { + "request": request, + "message": message, + "category_name": category_name, + "chosen_color": chosen_color, + }) def validate_request_params(query_params: ImmutableMultiDict) -> bool: @@ -87,3 +123,37 @@ def get_user_categories(db_session: Session, return [] else: return categories + +@router.post("/for_categories_test") +async def for_category_test(request: Request, + category_name: str = Form(None), + chosen_color: str = Form(None), + db_sess: Session = Depends(get_test_db)): + """ + This route is only for run tests, user can't know this url and even + if he will try he will get error: Method Not Allowed. + """ + + message = "" + user_id = 1 + try: + Category.create(db_sess, + name=category_name, + color=chosen_color, + user_id=user_id) + except IntegrityError: + db_sess.rollback() + message = f"category is already exists" + return templates.TemplateResponse("categories.html", { + "request": request, + "message": message, + "category_name": category_name, + "chosen_color": chosen_color, + }) + message = f"You have created the category {category_name}" + return templates.TemplateResponse("categories.html", { + "request": request, + "message": message, + "category_name": category_name, + "chosen_color": chosen_color, + }) diff --git a/app/static/categories_style.css b/app/static/categories_style.css new file mode 100644 index 00000000..a025aaed --- /dev/null +++ b/app/static/categories_style.css @@ -0,0 +1,29 @@ +body { + color: #333; + margin: auto; + font: 1.2em / 1.2 Arial, Helvetica, sans-serif; + } + +h1 { + color: black; + font-size: 150%; + text-align: center; +} + +form { + text-align: center; +} + +input { + border-radius: 0.5em; + color: plum; + padding: 0.5em; +} +input[type="color"].custom { + padding: 0; + border: none; + height: 30px; + width: 150px; + vertical-align: middle; + border-radius: 0.5em; +} \ No newline at end of file diff --git a/app/static/event/eventedit.css b/app/static/event/eventedit.css index 28f4c3b0..c4e962ad 100644 --- a/app/static/event/eventedit.css +++ b/app/static/event/eventedit.css @@ -30,12 +30,14 @@ form { .form_row, .form_row_start, -.form_row_end { +.form_row_end +.user_categories { display: flex } .form_row_start, -.form_row_end { +.form_row_end +.user_categories { flex: 1; } diff --git a/app/templates/base.html b/app/templates/base.html index 4cc5d825..441cae17 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -45,6 +45,9 @@ + diff --git a/app/templates/categories.html b/app/templates/categories.html new file mode 100644 index 00000000..d39484e5 --- /dev/null +++ b/app/templates/categories.html @@ -0,0 +1,36 @@ +{% extends "base.html" %} + +{% block head %} +{{ super() }} + + + +{% endblock %} + +{% block content %} +
+

It's time to make some decisions

+

+ Here you can create your unique categories and choose your favorite color +

+ +
+

Name your category:

+

+

Choose your favorite color:

+

+

+
+
+{% if message %} +
+

{{ message }}

+
+{% endif %} + +{% endblock %} \ No newline at end of file diff --git a/app/templates/event/partials/edit_event_details_tab.html b/app/templates/event/partials/edit_event_details_tab.html index 4c682c3e..a49b3835 100644 --- a/app/templates/event/partials/edit_event_details_tab.html +++ b/app/templates/event/partials/edit_event_details_tab.html @@ -33,7 +33,19 @@ - +
+ +
+

+

Choose your favorite color:

-

+

diff --git a/tests/test_categories.py b/tests/test_categories.py index d795f096..dd9e3d7d 100644 --- a/tests/test_categories.py +++ b/tests/test_categories.py @@ -5,12 +5,12 @@ from starlette import status from starlette.datastructures import ImmutableMultiDict -from app.database.models import Event +from app.database.models import Event, Category from app.routers.categories import get_user_categories, validate_request_params class TestCategories: - CATEGORY_ALREADY_EXISTS_MSG = b"category is already exists" + CATEGORY_ALREADY_EXISTS_MSG = b"category already exists" CREATE_CATEGORY = b"You have created" UNALLOWED_PARAMS = "contains unallowed params" @@ -18,22 +18,32 @@ class TestCategories: def test_get_categories_logic_succeeded(session, user, category): assert get_user_categories(session, category.user_id) == [category] + # @staticmethod + # def test_mocking_constant_a(user, mocker, category, client): + # mocker.patch(Category.create, return_value=Category(name='Foo', color='eecc11', user_id=category.user_id)) + # response = client.post("/categories", + # data={"user_id": user.id, + # "category": "Foo", + # "color": "eecc11",}) + # assert response.ok + # assert TestCategories.CREATE_CATEGORY in response.content + @staticmethod def test_creating_new_category(session, client, user): response = client.post("/for_categories_test", data={"user_id": user.id, - "category_name": "Foo", - "chosen_color": "eecc11"}) + "category": "Foo", + "color": "eecc11",}) assert response.ok assert TestCategories.CREATE_CATEGORY in response.content @staticmethod def test_creating_not_unique_category_failed(client, sender, category): response = client.post("/for_categories_test", - data={"category_name": "Guitar Lesson", - "chosen_color": "121212", + data={"category": "Guitar Lesson", + "color": "121212", "user_id": sender.id}) - assert response.status_code == status.HTTP_200_OK + assert response.ok assert TestCategories.CATEGORY_ALREADY_EXISTS_MSG in response.content @staticmethod @@ -83,7 +93,7 @@ def test_get_category_by_color(client, sender, category): @staticmethod def test_get_category_ok_request(client): response = client.get("/categories") - assert response.status_code == status.HTTP_200_OK + assert response.ok @staticmethod def test_repr(category): @@ -118,7 +128,7 @@ def raise_error(param): session.query = mock.Mock(side_effect=raise_error) assert get_user_categories(session, 1) == [] - @staticmethod - def test_event_status_ok(client): - response = client.get("/event/edit") - assert response.ok + # @staticmethod + # def test_event_status_ok(client): + # response = client.get("/event/edit") + # assert response.ok \ No newline at end of file From 758ef50c466e5fecdb877300825c911ad584b47d Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Tue, 16 Feb 2021 17:30:20 +0200 Subject: [PATCH 05/28] did some changes --- app/routers/categories.py | 27 ++++++++----------- .../partials/edit_event_details_tab.html | 4 +-- tests/test_categories.py | 21 +++------------ 3 files changed, 16 insertions(+), 36 deletions(-) diff --git a/app/routers/categories.py b/app/routers/categories.py index 0af70dd5..30e17f1a 100644 --- a/app/routers/categories.py +++ b/app/routers/categories.py @@ -1,5 +1,5 @@ import re -from typing import Any, Dict, List +from typing import List from fastapi import APIRouter, Depends, Form, HTTPException, Request from pydantic import BaseModel @@ -47,21 +47,6 @@ def get_categories(request: Request, f"unallowed params.") -# @router.get("/event/edit") -# def your_categories(request: Request, -# db_session: Session = Depends(get_db)) -> List[Category]: -# """ -# Return all categories created by user. -# user categories will be shown in dropdown list -# """ -# user_id = 1 -# categories_list = get_user_categories(db_session, user_id) -# return templates.TemplateResponse("event/eventedit.html", { -# "request": request, -# "categories_list": categories_list, -# }) - - @router.get("/categories") def category_color_insert(request: Request) -> _TemplateResponse: return templates.TemplateResponse("categories.html", { @@ -78,6 +63,11 @@ async def set_category(request: Request, message = "" user_id = 1 # until issue#29 will get current user_id from session + color = color.replace('#', '') + if not validate_color_format(color): + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, + detail=f"Color {color} if not from " + f"expected format.") try: Category.create(db_sess, name=category, @@ -154,6 +144,11 @@ async def for_category_test(request: Request, message = "" user_id = 1 + color = color.replace('#', '') + if not validate_color_format(color): + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, + detail=f"Color {color} if not from " + f"expected format.") try: Category.create(db_sess, name=category, diff --git a/app/templates/event/partials/edit_event_details_tab.html b/app/templates/event/partials/edit_event_details_tab.html index 6a5f42f7..9218aad2 100644 --- a/app/templates/event/partials/edit_event_details_tab.html +++ b/app/templates/event/partials/edit_event_details_tab.html @@ -61,11 +61,11 @@
diff --git a/tests/test_categories.py b/tests/test_categories.py index f0c737f4..ef2d5bda 100644 --- a/tests/test_categories.py +++ b/tests/test_categories.py @@ -21,16 +21,6 @@ class TestCategories: def test_get_categories_logic_succeeded(session, user, category): assert get_user_categories(session, category.user_id) == [category] - # @staticmethod - # def test_mocking_constant_a(user, mocker, category, client): - # mocker.patch(Category.create, return_value=Category(name='Foo', color='eecc11', user_id=category.user_id)) - # response = client.post("/categories", - # data={"user_id": user.id, - # "category": "Foo", - # "color": "eecc11",}) - # assert response.ok - # assert TestCategories.CREATE_CATEGORY in response.content - @staticmethod def test_creating_new_category(session, client, user): response = client.post("/for_categories_test", @@ -51,8 +41,8 @@ def test_creating_not_unique_category_failed(client, sender, category): @staticmethod def test_creating_new_category_bad_color_format(client, user): - response = client.post("/categories/", - json={"user_id": user.id, "name": "Foo", + response = client.post("/categories", + data={"user_id": user.id, "category": "Foo", "color": "bad format"}) assert response.status_code == status.HTTP_400_BAD_REQUEST assert TestCategories.BAD_COLOR_FORMAT in response.json()["detail"] @@ -152,9 +142,4 @@ def raise_error(param): raise SQLAlchemyError() session.query = mock.Mock(side_effect=raise_error) - assert get_user_categories(session, 1) == [] - - # @staticmethod - # def test_event_status_ok(client): - # response = client.get("/event/edit") - # assert response.ok \ No newline at end of file + assert get_user_categories(session, 1) == [] \ No newline at end of file From c7c0b8638240955b10908943164bc80c18869a5a Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Tue, 16 Feb 2021 18:43:09 +0200 Subject: [PATCH 06/28] fixfix lint --- app/routers/event.py | 30 ++++++++++++++---------------- tests/test_categories.py | 4 ++-- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/app/routers/event.py b/app/routers/event.py index 94ca0667..fd94c90c 100644 --- a/app/routers/event.py +++ b/app/routers/event.py @@ -1,8 +1,18 @@ -from datetime import datetime as dt import json +from datetime import datetime as dt from operator import attrgetter from typing import Any, Dict, List, Optional, Tuple +from app.database.models import Comment, Event, User, UserEvent +from app.dependencies import get_db, logger, templates +from app.internal import comment as cmt +from app.internal.emotion import get_emotion +from app.internal.event import (get_invited_emails, get_messages, + get_uninvited_regular_emails, + raise_if_zoom_link_invalid) + +from app.internal.utils import create_model, get_current_user +from app.routers.categories import get_user_categories from fastapi import APIRouter, Depends, HTTPException, Request from pydantic import BaseModel from sqlalchemy.exc import SQLAlchemyError @@ -11,19 +21,6 @@ from starlette import status from starlette.responses import RedirectResponse, Response -from app.database.models import Comment, Event, User, UserEvent -from app.dependencies import get_db, logger, templates -from app.internal.event import ( - get_invited_emails, get_messages, get_uninvited_regular_emails, - raise_if_zoom_link_invalid, - -) -from app.internal import comment as cmt -from app.internal.emotion import get_emotion -from app.internal.utils import create_model, get_current_user -from app.routers.categories import get_user_categories - - EVENT_DATA = Tuple[Event, List[Dict[str, str]], str, str] TIME_FORMAT = '%Y-%m-%d %H:%M' START_FORMAT = '%A, %d/%m/%Y %H:%M' @@ -75,12 +72,13 @@ async def create_event_api(event: EventModel, session=Depends(get_db)): @router.get("/edit", include_in_schema=False) @router.get("/edit") -async def eventedit(request: Request, db_session: Session = Depends(get_db)) -> Response: +async def eventedit(request: Request, + db_session: Session = Depends(get_db)) -> Response: user_id = 1 # until issue#29 will get current user_id from session categories_list = get_user_categories(db_session, user_id) return templates.TemplateResponse("event/eventedit.html", {"request": request, - "categories_list": categories_list}) + "categories_list": categories_list}) @router.post("/edit", include_in_schema=False) diff --git a/tests/test_categories.py b/tests/test_categories.py index ef2d5bda..f5460d88 100644 --- a/tests/test_categories.py +++ b/tests/test_categories.py @@ -26,7 +26,7 @@ def test_creating_new_category(session, client, user): response = client.post("/for_categories_test", data={"user_id": user.id, "category": "Foo", - "color": "eecc11",}) + "color": "eecc11"}) assert response.ok assert TestCategories.CREATE_CATEGORY in response.content @@ -142,4 +142,4 @@ def raise_error(param): raise SQLAlchemyError() session.query = mock.Mock(side_effect=raise_error) - assert get_user_categories(session, 1) == [] \ No newline at end of file + assert get_user_categories(session, 1) == [] From c3583c76c6cf036f49447c5ccffae12858d42df5 Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Tue, 16 Feb 2021 18:47:28 +0200 Subject: [PATCH 07/28] fixfix more lint --- app/routers/categories.py | 2 +- app/routers/event.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/routers/categories.py b/app/routers/categories.py index 30e17f1a..6ef34fa1 100644 --- a/app/routers/categories.py +++ b/app/routers/categories.py @@ -169,4 +169,4 @@ async def for_category_test(request: Request, "message": message, "category": category, "color": color, - }) \ No newline at end of file + }) diff --git a/app/routers/event.py b/app/routers/event.py index fd94c90c..e54110ec 100644 --- a/app/routers/event.py +++ b/app/routers/event.py @@ -35,7 +35,6 @@ 'category_id': (int, type(None)), } -from app.routers.categories import get_user_categories router = APIRouter( prefix="/event", From fdfeb8c1d783345f7d0fba5f2e65269e76b3efff Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Tue, 16 Feb 2021 19:28:18 +0200 Subject: [PATCH 08/28] need to fix line --- app/templates/base.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/templates/base.html b/app/templates/base.html index 55c12c15..4ab86208 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -53,11 +53,11 @@ Search + {{ gettext("About Us") }} +
From 81a1a7e771972fd6d94724b7be8f71d76b6b774d Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Tue, 16 Feb 2021 19:44:42 +0200 Subject: [PATCH 09/28] fix forgoted line --- app/routers/categories.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/routers/categories.py b/app/routers/categories.py index 6ef34fa1..e9eae93f 100644 --- a/app/routers/categories.py +++ b/app/routers/categories.py @@ -17,7 +17,11 @@ HEX_COLOR_FORMAT = r"^(?:[0-9a-fA-F]{3}){1,2}$" -router = APIRouter() +router = APIRouter( + prefix="/categories", + tags=["categories"], +) + class CategoryModel(BaseModel): @@ -36,7 +40,7 @@ class Config: # TODO(issue#29): get current user_id from session -@router.get("/categories/by_parameters", include_in_schema=False) +@router.get("/by_parameters", include_in_schema=False) def get_categories(request: Request, db_session: Session = Depends(get_db)) -> List[Category]: if validate_request_params(request.query_params): @@ -47,7 +51,7 @@ def get_categories(request: Request, f"unallowed params.") -@router.get("/categories") +@router.get("/") def category_color_insert(request: Request) -> _TemplateResponse: return templates.TemplateResponse("categories.html", { "request": request @@ -55,7 +59,7 @@ def category_color_insert(request: Request) -> _TemplateResponse: # TODO(issue#29): get current user_id from session -@router.post("/categories") +@router.post("/") async def set_category(request: Request, category: str = Form(None), color: str = Form(None), From fb76b71ba098a703fb0889799d35a8b4582b3a86 Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Tue, 16 Feb 2021 19:47:01 +0200 Subject: [PATCH 10/28] delete blanck line --- app/routers/categories.py | 1 - 1 file changed, 1 deletion(-) diff --git a/app/routers/categories.py b/app/routers/categories.py index e9eae93f..c82eb8d9 100644 --- a/app/routers/categories.py +++ b/app/routers/categories.py @@ -23,7 +23,6 @@ ) - class CategoryModel(BaseModel): name: str color: str From a22b981ab6b389bdafd0dd20f16b2d738cb85434 Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Tue, 16 Feb 2021 19:52:50 +0200 Subject: [PATCH 11/28] fixfix more line --- tests/test_categories.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_categories.py b/tests/test_categories.py index f5460d88..33b9944a 100644 --- a/tests/test_categories.py +++ b/tests/test_categories.py @@ -23,7 +23,7 @@ def test_get_categories_logic_succeeded(session, user, category): @staticmethod def test_creating_new_category(session, client, user): - response = client.post("/for_categories_test", + response = client.post("/categories/for_categories_test", data={"user_id": user.id, "category": "Foo", "color": "eecc11"}) @@ -32,7 +32,7 @@ def test_creating_new_category(session, client, user): @staticmethod def test_creating_not_unique_category_failed(client, sender, category): - response = client.post("/for_categories_test", + response = client.post("/categories/for_categories_test", data={"category": "Guitar Lesson", "color": "121212", "user_id": sender.id}) From 07a88aac083e403913764106751e5584e19be558 Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Tue, 16 Feb 2021 20:31:41 +0200 Subject: [PATCH 12/28] some changes --- app/routers/categories.py | 20 ++++++++++---------- app/templates/categories.html | 2 +- tests/test_categories.py | 8 ++++---- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/routers/categories.py b/app/routers/categories.py index c82eb8d9..4d96b070 100644 --- a/app/routers/categories.py +++ b/app/routers/categories.py @@ -60,7 +60,7 @@ def category_color_insert(request: Request) -> _TemplateResponse: # TODO(issue#29): get current user_id from session @router.post("/") async def set_category(request: Request, - category: str = Form(None), + name: str = Form(None), color: str = Form(None), db_sess: Session = Depends(get_db)): @@ -73,7 +73,7 @@ async def set_category(request: Request, f"expected format.") try: Category.create(db_sess, - name=category, + name=name, color=color, user_id=user_id) except IntegrityError: @@ -82,14 +82,14 @@ async def set_category(request: Request, return templates.TemplateResponse("categories.html", { "request": request, "message": message, - "category": category, + "name": name, "color": color, }) - message = f"Congratulation! You have created a new category: {category}" + message = f"Congratulation! You have created a new category: {name}" return templates.TemplateResponse("categories.html", { "request": request, "message": message, - "category": category, + "name": name, "color": color, }) @@ -137,7 +137,7 @@ def get_user_categories(db_session: Session, @router.post("/for_categories_test") async def for_category_test(request: Request, - category: str = Form(None), + name: str = Form(None), color: str = Form(None), db_sess: Session = Depends(get_test_db)): """ @@ -154,7 +154,7 @@ async def for_category_test(request: Request, f"expected format.") try: Category.create(db_sess, - name=category, + name=name, color=color, user_id=user_id) except IntegrityError: @@ -163,13 +163,13 @@ async def for_category_test(request: Request, return templates.TemplateResponse("categories.html", { "request": request, "message": message, - "category": category, + "name": name, "color": color, }) - message = f"Congratulation! You have created a new category: {category}" + message = f"Congratulation! You have created a new category: {name}" return templates.TemplateResponse("categories.html", { "request": request, "message": message, - "category": category, + "name": name, "color": color, }) diff --git a/app/templates/categories.html b/app/templates/categories.html index 609dfb4a..fbf42d24 100644 --- a/app/templates/categories.html +++ b/app/templates/categories.html @@ -21,7 +21,7 @@

Name your category:

-

+

Choose your favorite color:

diff --git a/tests/test_categories.py b/tests/test_categories.py index 33b9944a..86fcb1b7 100644 --- a/tests/test_categories.py +++ b/tests/test_categories.py @@ -25,7 +25,7 @@ def test_get_categories_logic_succeeded(session, user, category): def test_creating_new_category(session, client, user): response = client.post("/categories/for_categories_test", data={"user_id": user.id, - "category": "Foo", + "name": "Foo", "color": "eecc11"}) assert response.ok assert TestCategories.CREATE_CATEGORY in response.content @@ -33,7 +33,7 @@ def test_creating_new_category(session, client, user): @staticmethod def test_creating_not_unique_category_failed(client, sender, category): response = client.post("/categories/for_categories_test", - data={"category": "Guitar Lesson", + data={"name": "Guitar Lesson", "color": "121212", "user_id": sender.id}) assert response.ok @@ -41,8 +41,8 @@ def test_creating_not_unique_category_failed(client, sender, category): @staticmethod def test_creating_new_category_bad_color_format(client, user): - response = client.post("/categories", - data={"user_id": user.id, "category": "Foo", + response = client.post("/categories/", + data={"user_id": user.id, "name": "Foo", "color": "bad format"}) assert response.status_code == status.HTTP_400_BAD_REQUEST assert TestCategories.BAD_COLOR_FORMAT in response.json()["detail"] From 62cbf7364a82f43f9f442d29a714a59e64f3164f Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Wed, 17 Feb 2021 18:31:15 +0200 Subject: [PATCH 13/28] another fix --- app/routers/categories.py | 40 --------------------------------------- tests/client_fixture.py | 7 ++++++- tests/test_categories.py | 24 +++++++++++++---------- 3 files changed, 20 insertions(+), 51 deletions(-) diff --git a/app/routers/categories.py b/app/routers/categories.py index 4d96b070..370bba2f 100644 --- a/app/routers/categories.py +++ b/app/routers/categories.py @@ -133,43 +133,3 @@ def get_user_categories(db_session: Session, return [] else: return categories - - -@router.post("/for_categories_test") -async def for_category_test(request: Request, - name: str = Form(None), - color: str = Form(None), - db_sess: Session = Depends(get_test_db)): - """ - This route is only for run tests, user can't know this url and even - if he will try he will get error: Method Not Allowed. - """ - - message = "" - user_id = 1 - color = color.replace('#', '') - if not validate_color_format(color): - raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, - detail=f"Color {color} if not from " - f"expected format.") - try: - Category.create(db_sess, - name=name, - color=color, - user_id=user_id) - except IntegrityError: - db_sess.rollback() - message = "category already exists" - return templates.TemplateResponse("categories.html", { - "request": request, - "message": message, - "name": name, - "color": color, - }) - message = f"Congratulation! You have created a new category: {name}" - return templates.TemplateResponse("categories.html", { - "request": request, - "message": message, - "name": name, - "color": color, - }) diff --git a/tests/client_fixture.py b/tests/client_fixture.py index 9e1c3207..847d491a 100644 --- a/tests/client_fixture.py +++ b/tests/client_fixture.py @@ -1,4 +1,4 @@ -from app.routers import agenda, event, invitation, profile, google_connect +from app.routers import agenda, event, invitation, profile, google_connect, categories from typing import Iterator from fastapi.testclient import TestClient @@ -61,6 +61,11 @@ def invitation_test_client() -> Iterator[TestClient]: yield from create_test_client(invitation.get_db) +@pytest.fixture(scope="session") +def categories_test_client() -> Iterator[TestClient]: + yield from create_test_client(categories.get_db) + + @pytest.fixture(scope="session") def profile_test_client() -> Iterator[TestClient]: Base.metadata.create_all(bind=test_engine) diff --git a/tests/test_categories.py b/tests/test_categories.py index 86fcb1b7..9bd303dc 100644 --- a/tests/test_categories.py +++ b/tests/test_categories.py @@ -1,4 +1,5 @@ import pytest +import json from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.testing import mock @@ -12,7 +13,7 @@ class TestCategories: - CATEGORY_ALREADY_EXISTS_MSG = b"category already exists" + CATEGORY_ALREADY_EXISTS_MSG = b"Category already exists" CREATE_CATEGORY = b"You have created" UNALLOWED_PARAMS = "contains unallowed params" BAD_COLOR_FORMAT = "if not from expected format" @@ -22,20 +23,23 @@ def test_get_categories_logic_succeeded(session, user, category): assert get_user_categories(session, category.user_id) == [category] @staticmethod - def test_creating_new_category(session, client, user): - response = client.post("/categories/for_categories_test", - data={"user_id": user.id, + def test_creating_new_category(categories_test_client, session, user): + CORRECT_ADD_CATEGORY_DATA = {"user_id": user.id, "name": "Foo", - "color": "eecc11"}) + "color": "eecc11"} + response = categories_test_client.post("/categories/", + data=CORRECT_ADD_CATEGORY_DATA) assert response.ok assert TestCategories.CREATE_CATEGORY in response.content @staticmethod - def test_creating_not_unique_category_failed(client, sender, category): - response = client.post("/categories/for_categories_test", - data={"name": "Guitar Lesson", - "color": "121212", - "user_id": sender.id}) + def test_create_not_unique_category_failed(categories_test_client, sender, category): + CATEGORY_ALREADY_EXISTS = {"name": "Guitar Lesson", + "color": "121212", + "user_id": sender.id} + response = categories_test_client.post("/categories/", + data=CATEGORY_ALREADY_EXISTS) + print(response.content) assert response.ok assert TestCategories.CATEGORY_ALREADY_EXISTS_MSG in response.content From aaa19600e157b271765f5f8e270d405926acdefc Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Wed, 17 Feb 2021 18:34:40 +0200 Subject: [PATCH 14/28] fixing fixing --- tests/client_fixture.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/client_fixture.py b/tests/client_fixture.py index 847d491a..dc995cfd 100644 --- a/tests/client_fixture.py +++ b/tests/client_fixture.py @@ -1,4 +1,4 @@ -from app.routers import agenda, event, invitation, profile, google_connect, categories +from app.routers import agenda, categories, event, invitation, profile, google_connect from typing import Iterator from fastapi.testclient import TestClient From 82abccb650a615473f974aa54a51a09f4559b72e Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Wed, 17 Feb 2021 18:51:14 +0200 Subject: [PATCH 15/28] fix lint fix lint --- app/routers/categories.py | 1 - tests/client_fixture.py | 3 ++- tests/test_categories.py | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/routers/categories.py b/app/routers/categories.py index 370bba2f..c2c3ab36 100644 --- a/app/routers/categories.py +++ b/app/routers/categories.py @@ -13,7 +13,6 @@ from app.database.models import Category from app.dependencies import get_db from app.dependencies import templates -from tests.conftest import get_test_db HEX_COLOR_FORMAT = r"^(?:[0-9a-fA-F]{3}){1,2}$" diff --git a/tests/client_fixture.py b/tests/client_fixture.py index bc59967e..2e634c99 100644 --- a/tests/client_fixture.py +++ b/tests/client_fixture.py @@ -1,4 +1,5 @@ -from app.routers import agenda, categories, event, friendview, invitation, profile +from app.routers import ( + agenda, categories, event, friendview, invitation, profile) from app.routers import google_connect from typing import Iterator diff --git a/tests/test_categories.py b/tests/test_categories.py index 9bd303dc..4753f0c0 100644 --- a/tests/test_categories.py +++ b/tests/test_categories.py @@ -1,5 +1,4 @@ import pytest -import json from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.testing import mock @@ -28,17 +27,18 @@ def test_creating_new_category(categories_test_client, session, user): "name": "Foo", "color": "eecc11"} response = categories_test_client.post("/categories/", - data=CORRECT_ADD_CATEGORY_DATA) + data=CORRECT_ADD_CATEGORY_DATA) assert response.ok assert TestCategories.CREATE_CATEGORY in response.content @staticmethod - def test_create_not_unique_category_failed(categories_test_client, sender, category): + def test_create_not_unique_category_failed(categories_test_client, sender, + category): CATEGORY_ALREADY_EXISTS = {"name": "Guitar Lesson", - "color": "121212", - "user_id": sender.id} + "color": "121212", + "user_id": sender.id} response = categories_test_client.post("/categories/", - data=CATEGORY_ALREADY_EXISTS) + data=CATEGORY_ALREADY_EXISTS) print(response.content) assert response.ok assert TestCategories.CATEGORY_ALREADY_EXISTS_MSG in response.content From 35d7b462e5512bd0e3c88d0067d51e24e50002ca Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Wed, 17 Feb 2021 18:54:15 +0200 Subject: [PATCH 16/28] more fix fixing lint --- tests/test_categories.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_categories.py b/tests/test_categories.py index 4753f0c0..f3f82cf6 100644 --- a/tests/test_categories.py +++ b/tests/test_categories.py @@ -32,7 +32,7 @@ def test_creating_new_category(categories_test_client, session, user): assert TestCategories.CREATE_CATEGORY in response.content @staticmethod - def test_create_not_unique_category_failed(categories_test_client, sender, + def test_create_not_unique_category_failed(categories_test_client, sender, category): CATEGORY_ALREADY_EXISTS = {"name": "Guitar Lesson", "color": "121212", From 134e4e92238650455bd1cbc031c9920672ab99f7 Mon Sep 17 00:00:00 2001 From: Adi Faibish Date: Wed, 17 Feb 2021 19:02:40 +0200 Subject: [PATCH 17/28] change something fix --- app/templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/templates/base.html b/app/templates/base.html index f5010ba3..36363100 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -56,7 +56,7 @@ Friend View