Skip to content

Commit 5d8a5ec

Browse files
committed
Added checking for zoom link and saving the event
1 parent 2055db7 commit 5d8a5ec

File tree

2 files changed

+71
-1
lines changed

2 files changed

+71
-1
lines changed

app/routers/event.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
1-
from fastapi import APIRouter, Request
1+
import re
2+
from datetime import datetime as dt
3+
from fastapi import APIRouter, Request, Depends, HTTPException
4+
from fastapi.responses import RedirectResponse
5+
from starlette.status import HTTP_303_SEE_OTHER
26

7+
from app.database.database import get_db
8+
from app.database.models import Event, User
39
from app.dependencies import templates
410

11+
ZOOM_REGEX = re.compile('https://.*?\.zoom.us/[a-z]/.[^.,\b\t\n]+')
12+
513
router = APIRouter(
614
prefix="/event",
715
tags=["event"],
@@ -15,6 +23,28 @@ async def eventedit(request: Request):
1523
{"request": request})
1624

1725

26+
@router.post("/edit")
27+
async def create_event(request: Request, session=Depends(get_db)):
28+
data = await request.form()
29+
print(data)
30+
title = data['title']
31+
content = data['description']
32+
start = dt.strptime(data['start_date'] + ' ' + data['start_time'], '%Y-%m-%d %H:%M')
33+
end = dt.strptime(data['end_date'] + ' ' + data['end_time'], '%Y-%m-%d %H:%M')
34+
user = session.query(User).filter_by(id=1).first()
35+
owner_id = user.id
36+
location_type = data['location_type']
37+
is_zoom = location_type == 'vc_url'
38+
location = data['location']
39+
40+
if is_zoom and not ZOOM_REGEX.findall(location):
41+
raise HTTPException(status_code=400, detail="VC type with no valid zoom link")
42+
event = Event(title=title, content=content, start=start, end=end, owner_id=owner_id)
43+
session.add(event)
44+
session.commit()
45+
return RedirectResponse(f'/event/view/{event.id}', status_code=HTTP_303_SEE_OTHER)
46+
47+
1848
@router.get("/view/{id}")
1949
async def eventview(request: Request, id: int):
2050
return templates.TemplateResponse("event/eventview.html",

tests/test_event.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,36 @@
11
from fastapi.testclient import TestClient
2+
from starlette.status import HTTP_303_SEE_OTHER
23

34
from app.main import app
45

6+
CORRECT_EVENT_FORM_DATA = {
7+
'title': 'test title',
8+
'start_date': '2021-01-28',
9+
'start_time': '15:59',
10+
'end_date': '2021-01-27',
11+
'end_time': '15:01',
12+
'location_type': 'vc_url',
13+
'location': 'https://us02web.zoom.us/j/875384596',
14+
'description': 'content',
15+
'color': 'red',
16+
'availability': 'busy',
17+
'privacy': 'public'
18+
}
19+
20+
WRONG_EVENT_FORM_DATA = {
21+
'title': 'test title',
22+
'start_date': '2021-01-28',
23+
'start_time': '15:59',
24+
'end_date': '2021-01-27',
25+
'end_time': '15:01',
26+
'location_type': 'vc_url',
27+
'location': 'not a zoom link',
28+
'description': 'content',
29+
'color': 'red',
30+
'availability': 'busy',
31+
'privacy': 'public'
32+
}
33+
534
client = TestClient(app)
635

736

@@ -11,6 +40,17 @@ def test_eventedit():
1140
assert b"Edit Event" in response.content
1241

1342

43+
def test_eventedit_post_correct(user):
44+
response = client.post("/event/edit", data=CORRECT_EVENT_FORM_DATA)
45+
assert response.status_code == HTTP_303_SEE_OTHER
46+
assert '/event/view/' in response.headers['location']
47+
48+
49+
def test_eventedit_post_wrong(user):
50+
response = client.post("/event/edit", data=WRONG_EVENT_FORM_DATA)
51+
assert response.json()['detail'] == 'VC type with no valid zoom link'
52+
53+
1454
def test_eventview_with_id():
1555
response = client.get("/event/view/1")
1656
assert response.status_code == 200

0 commit comments

Comments
 (0)