diff --git a/app/routers/event.py b/app/routers/event.py index 546b184d..74f1fdda 100644 --- a/app/routers/event.py +++ b/app/routers/event.py @@ -125,6 +125,31 @@ async def eventview(request: Request, event_id: int, "messages": messages}) +@router.post("/{event_id}/owner") +async def change_owner(request: Request, event_id: int, + db: Session = Depends(get_db)): + form = await request.form() + if 'username' not in form: + return RedirectResponse(router.url_path_for('eventview', + event_id=event_id), + status_code=status.HTTP_302_FOUND) + username = form['username'] + user = db.query(User).filter_by(username=username).first() + try: + user_id = user.id + except AttributeError as e: + error_message = f"Username does not exist. {form['username']}" + logger.exception(str(e)) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=error_message) + owner_to_update = {'owner_id': user_id} + _update_event(db, event_id, owner_to_update) + return RedirectResponse(router.url_path_for('eventview', + event_id=event_id), + status_code=status.HTTP_302_FOUND) + + def by_id(db: Session, event_id: int) -> Event: """Get a single event by id""" if not isinstance(db, Session): diff --git a/app/templates/base.html b/app/templates/base.html index f089e4f9..fdfe2989 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -2,7 +2,7 @@ - {% block head %} + {% block head %} @@ -75,7 +75,7 @@ - + \ No newline at end of file diff --git a/app/templates/event/partials/view_event_details_tab.html b/app/templates/event/partials/view_event_details_tab.html index f8d13cdc..35c439b0 100644 --- a/app/templates/event/partials/view_event_details_tab.html +++ b/app/templates/event/partials/view_event_details_tab.html @@ -1,11 +1,11 @@
-
-

{{ event.title }}

-
-
- - -
+
+

{{ event.title }}

+
+
+ + +
ICON @@ -25,13 +25,24 @@

{{ event.title }}

{{ event.location }}
VC linkVC URL
- +{% if event.invitees %} +
+
+ + + +
+{% endif %}

- {{ event.content }} + {{event.owner.username}}

-
\ No newline at end of file + diff --git a/tests/test_event.py b/tests/test_event.py index 0c2c1c48..5f0deaa1 100644 --- a/tests/test_event.py +++ b/tests/test_event.py @@ -11,6 +11,7 @@ from app.dependencies import get_db from app.internal.utils import delete_instance from app.main import app + from app.routers import event as evt @@ -128,15 +129,9 @@ def test_eventedit(event_test_client): def test_eventview_with_id(event_test_client, session, event): event_id = event.id - event_details = [event.title, event.content, event.location, - event.vc_link, event.start, - event.end, event.color, event.category_id] response = event_test_client.get(f"/event/{event_id}") assert response.ok assert b"View Event" in response.content - for event_detail in event_details: - assert str(event_detail).encode('utf-8') in response.content, \ - f'{event_detail} not in view event page' def test_create_event_with_default_availability(client, user, session): @@ -339,9 +334,9 @@ def test_update_db_close(event): data = {"title": "Problem connecting to db in func update_event", } with pytest.raises(HTTPException): assert ( - evt.update_event(event_id=event.id, event=data, - db=None).status_code == - status.HTTP_500_INTERNAL_SERVER_ERROR + evt.update_event(event_id=event.id, event=data, + db=None).status_code == + status.HTTP_500_INTERNAL_SERVER_ERROR ) @@ -360,11 +355,11 @@ def test_db_close_update(session, event): data = {"title": "Problem connecting to db in func _update_event", } with pytest.raises(HTTPException): assert ( - evt._update_event( - event_id=event.id, - event_to_update=data, - db=None).status_code == - status.HTTP_500_INTERNAL_SERVER_ERROR + evt._update_event( + event_id=event.id, + event_to_update=data, + db=None).status_code == + status.HTTP_500_INTERNAL_SERVER_ERROR ) @@ -376,16 +371,16 @@ def test_no_connection_to_db_in_delete(event): with pytest.raises(HTTPException): response = evt.delete_event(event_id=1, db=None) assert ( - response.status_code == - status.HTTP_500_INTERNAL_SERVER_ERROR + response.status_code == + status.HTTP_500_INTERNAL_SERVER_ERROR ) def test_no_connection_to_db_in_internal_deletion(event): with pytest.raises(HTTPException): assert ( - evt._delete_event(event=event, db=None).status_code == - status.HTTP_500_INTERNAL_SERVER_ERROR + evt._delete_event(event=event, db=None).status_code == + status.HTTP_500_INTERNAL_SERVER_ERROR ) @@ -397,6 +392,33 @@ def test_successful_deletion(event_test_client, session, event): db=session, event_id=1).content +def test_change_owner(client, event_test_client, user, session, event): + """ + Test change owner of an event + """ + event_id = event.id + event_details = [event.title, event.content, event.location, event.start, + event.end, event.color, event.category_id] + response = event_test_client.post(f"/event/{event_id}/owner", + data=None) + assert response.status_code == status.HTTP_302_FOUND + assert response.ok + assert b"View Event" not in response.content + for event_detail in event_details: + assert str(event_detail).encode('utf-8') not in response.content, \ + f'{event_detail} not in view event page' + data = {'username': "worng_username"} + response = event_test_client.post(f"/event/{event_id}/owner", + data=data) + assert response.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR + assert b'Username does not exist.' in response.content + data = {'username': user.username} + response = event_test_client.post(f"/event/{event_id}/owner", + data=data) + assert response.ok + assert response.status_code == status.HTTP_302_FOUND + + def test_deleting_an_event_does_not_exist(event_test_client, event): response = event_test_client.delete("/event/2") assert response.status_code == status.HTTP_404_NOT_FOUND @@ -464,7 +486,9 @@ class TestApp: "start": date_test_data[0], "end": date_test_data[1], "content": "Any Words", - "owner_id": 123} + "owner_id": 123, + 'invitees': 'user1, user2' + } @staticmethod def test_get_db():