Skip to content

Commit a9b7898

Browse files
committed
(CON-328-story): add organizer_email and room_id
- ensure the returned url is comprised with the organizer_email and room_id [Delivers CON-328]
1 parent fcfa7bc commit a9b7898

File tree

10 files changed

+166
-36
lines changed

10 files changed

+166
-36
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"""add organizer email field
2+
3+
Revision ID: 859f31384fe2
4+
Revises: c058d462a21d
5+
Create Date: 2019-11-18 09:26:07.682060
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
11+
12+
# revision identifiers, used by Alembic.
13+
revision = '859f31384fe2'
14+
down_revision = 'c058d462a21d'
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
op.add_column('events', sa.Column(
21+
'organizer_email', sa.String(), nullable=True))
22+
23+
24+
def downgrade():
25+
op.drop_column('events', 'organizer_email')

api/events/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class Events(Base, Utility):
2929
meeting_end_time = Column(String, nullable=True)
3030
auto_cancelled = Column(Boolean, nullable=True, default=False)
3131
app_booking = Column(Boolean, nullable=True, default=False)
32+
organizer_email = Column(String, nullable=True)
3233

3334

3435
def filter_events_by_date_range(query, start_date, end_date):

api/events/schema.py

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ class Meta:
4343
model = EventsModel
4444

4545

46+
class EventArguments(graphene.ObjectType):
47+
48+
"""
49+
returns common event arguments
50+
"""
51+
52+
calendar_id = graphene.String(required=True)
53+
event_id = graphene.String(required=True)
54+
start_time = graphene.String(required=True)
55+
end_time = graphene.String(required=True)
56+
57+
4658
class BookEvent(graphene.Mutation):
4759
"""
4860
Book Calendar events
@@ -74,8 +86,8 @@ def mutate(self, info, **kwargs):
7486
description: Any additional information about the event
7587
room: The meeting room where the even will be held [required]
7688
time_zone: The timezone of the event location eg. 'Africa/Kigali'
77-
organizer: The email of the co-organizer, the converge email is
78-
the default
89+
organizer: The email of the organizer. it should be gotten
90+
from the user token.
7991
8092
Returns:
8193
A string that communicates a successfully created event.
@@ -119,8 +131,23 @@ def mutate(self, info, **kwargs):
119131
}
120132
}
121133
service = credentials.set_api_credentials()
122-
service.events().insert(calendarId='primary', body=event,
123-
sendNotifications=True).execute()
134+
event_created = service.events() \
135+
.insert(calendarId='primary',
136+
body=event,
137+
sendNotifications=True).execute()
138+
new_event = EventsModel(
139+
event_id=event_created['id'],
140+
event_title=kwargs['event_title'],
141+
start_time=start_date,
142+
end_time=end_date,
143+
number_of_participants=len(guests),
144+
app_booking=True,
145+
checked_in=False,
146+
room_id=1,
147+
cancelled=False,
148+
organizer_email=organizer
149+
)
150+
new_event.save()
124151
return BookEvent(response='Event created successfully')
125152

126153

@@ -129,11 +156,11 @@ class EventCheckin(graphene.Mutation):
129156
Returns the eventcheckin payload
130157
"""
131158
class Arguments:
132-
calendar_id = graphene.String(required=True)
133-
event_id = graphene.String(required=True)
159+
calendar_id = EventArguments.calendar_id
160+
event_id = EventArguments.event_id
134161
event_title = graphene.String(required=True)
135-
start_time = graphene.String(required=True)
136-
end_time = graphene.String(required=True)
162+
start_time = EventArguments.start_time
163+
end_time = EventArguments.end_time
137164
number_of_participants = graphene.Int(required=True)
138165
check_in_time = graphene.String(required=False)
139166
event = graphene.Field(Events)
@@ -162,11 +189,11 @@ class CancelEvent(graphene.Mutation):
162189
Returns the payload on event cancelation
163190
"""
164191
class Arguments:
165-
calendar_id = graphene.String(required=True)
166-
event_id = graphene.String(required=True)
192+
calendar_id = EventArguments.calendar_id
193+
event_id = EventArguments.event_id
167194
event_title = graphene.String(required=True)
168-
start_time = graphene.String(required=True)
169-
end_time = graphene.String(required=True)
195+
start_time = EventArguments.start_time
196+
end_time = EventArguments.end_time
170197
number_of_participants = graphene.Int()
171198
event = graphene.Field(Events)
172199

@@ -212,10 +239,12 @@ class EndEvent(graphene.Mutation):
212239
Returns event payload on ending the event
213240
"""
214241
class Arguments:
215-
calendar_id = graphene.String(required=True)
216-
event_id = graphene.String(required=True)
217-
start_time = graphene.String(required=True)
218-
end_time = graphene.String(required=True)
242+
calendar_id = EventArguments.calendar_id
243+
event_id = EventArguments.event_id
244+
organizer_email = graphene.String(required=True)
245+
room_id = graphene.String(required=True)
246+
start_time = EventArguments.start_time
247+
end_time = EventArguments.end_time
219248
meeting_end_time = graphene.String(required=True)
220249
event = graphene.Field(Events)
221250

@@ -231,7 +260,10 @@ def mutate(self, info, **kwargs):
231260
)
232261
event.save()
233262
event_id = kwargs['event_id']
234-
notify_slack.delay(event_id)
263+
organizer_email = kwargs['organizer_email']
264+
room_id = kwargs['room_id']
265+
266+
notify_slack.delay(event_id, organizer_email, room_id)
235267
return EndEvent(event=event)
236268

237269

fixtures/events/end_event_fixtures.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
end_event_mutation = '''mutation {
22
endEvent(calendarId:"[email protected]",
33
eventId:"test_id5",
4+
organizerEmail:"[email protected]",
5+
roomId:"1",
46
startTime:"2018-07-10T09:00:00Z",
57
endTime:"2018-07-10T09:45:00Z",
68
meetingEndTime: "2018-07-10T09:45:00Z"){
@@ -43,6 +45,8 @@
4345
endEvent(calendarId:"[email protected]",
4446
eventId:"test_id5",
4547
startTime:"2018-07-11T09:00:00Z",
48+
organizerEmail:"[email protected]",
49+
roomId:"1",
4650
endTime:"2018-07-11T09:45:00Z",
4751
meetingEndTime: "2018-07-11T09:45:00Z"){
4852
event{
@@ -69,6 +73,8 @@
6973
endEvent(calendarId:"invalid_calendar_id",
7074
eventId:"test_id5",
7175
startTime:"2018-08-11T09:00:00Z",
76+
organizerEmail:"[email protected]",
77+
roomId:"1",
7278
endTime:"2018-08-11T09:45:00Z",
7379
meetingEndTime: "2018-08-11T09:45:00Z"){
7480
event{

helpers/calendar/events.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ def sync_single_room_events(self, room):
189189
recurring_event_id=event.get("recurringEventId"),
190190
room_id=room.id,
191191
event_title=event.get("summary"),
192+
organizer_email=organizer.get('email'),
192193
start_time=event["start"].get(
193194
"dateTime") or event["start"].get("date"),
194195
end_time=event["end"].get(

helpers/event/slack_notifier.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@
22
import celery
33
from config import Config
44

5-
"""
6-
This function call slack bot url
7-
"""
8-
95

106
@celery.task(name="notify-slack")
11-
def notify_slack(event_id):
12-
responce = requests.get(url=Config.NOTIFY_URL + event_id)
13-
return(responce.status_code)
7+
def notify_slack(event_id, organizer_email, room_id):
8+
"""
9+
This function calls the slack BOT URL
10+
and notifies the organizer.
11+
"""
12+
params_data = {
13+
"event_id": event_id,
14+
"organizer_email": organizer_email,
15+
"room_id": room_id
16+
}
17+
response = requests.get(url=Config.NOTIFY_URL, params=params_data)
18+
return(response.status_code)

requirements.txt

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,62 @@ flake8==3.5.0
3939
coveralls
4040
validators==0.12.4
4141
requests==2.22.0
42+
alembic==0.9.8
43+
amqp==1.4.9
44+
aniso8601==3.0.2
45+
anyjson==0.3.3
46+
astroid==2.3.1
47+
autopep8==1.4.4
48+
billiard==3.3.0.23
49+
blinker==1.4
50+
bugsnag==3.4.2
51+
celery==3.1.17
52+
Click==7.0
53+
coverage==4.5.1
54+
Flask==0.12.2
55+
Flask-Cors==3.0.4
56+
Flask-GraphQL==1.4.1
57+
Flask-JSON==0.3.2
58+
Flask-Mail==0.9.1
59+
Flask-Script==2.0.6
60+
google-api-python-client==1.6.7
61+
graphene==2.1
62+
graphene-sqlalchemy==2.0.0
63+
graphql-core==2.2.1
64+
graphql-relay==0.4.5
65+
httplib2==0.14.0
66+
imgkit==1.0.1
67+
iso8601==0.1.12
68+
isort==4.3.21
69+
itsdangerous==1.1.0
70+
Jinja2==2.10.1
71+
kombu==3.0.37
72+
lazy-object-proxy==1.4.2
73+
Mako==1.1.0
74+
MarkupSafe==1.0
75+
mccabe==0.6.1
76+
more-itertools==4.1.0
77+
numpy==1.15.2
78+
oauth2client==4.1.3
79+
opencv-python==3.4.3.18
80+
pandas==0.23.4
81+
pdfkit==0.6.1
82+
Pillow==5.3.0
83+
promise==2.2.1
84+
pyasn1==0.4.7
85+
pyasn1-modules==0.2.6
86+
pycodestyle==2.5.0
87+
pylint==2.4.2
88+
python-dateutil==2.7.0
89+
python-editor==1.0.3
90+
pytz==2019.2
91+
rsa==4.0
92+
Rx==1.6.1
93+
singledispatch==3.4.0.3
94+
six==1.12.0
95+
SQLAlchemy==1.2.6
96+
typed-ast==1.4.0
97+
uritemplate==3.0.0
98+
WebOb==1.8.5
99+
Werkzeug==0.16.0
100+
wrapt==1.11.2

tests/base.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ def setUp(self, mock_verify_calendar_id):
142142
event_id="test_id5",
143143
room_id=1,
144144
event_title="Onboarding",
145+
organizer_email="[email protected]",
145146
start_time="2018-07-11T09:00:00Z",
146147
end_time="2018-07-11T09:45:00Z",
147148
number_of_participants=4,
@@ -211,18 +212,18 @@ def setUp(self, mock_verify_calendar_id):
211212
)
212213
structure.save()
213214
parent_node = OfficeStructure(
214-
id='C56A4180-65AA-42EC-A945-5FD21DEC0518',
215-
name='Epic Tower',
216-
tag='Lagos Building',
217-
location_id=1
215+
id='C56A4180-65AA-42EC-A945-5FD21DEC0518',
216+
name='Epic Tower',
217+
tag='Lagos Building',
218+
location_id=1
218219
)
219220
parent_node.save()
220221
child_node = OfficeStructure(
221-
id='C56A4180-65AA-42EC-A945-5FD21DEC0519',
222-
name='Gold Coast',
223-
tag='First Floor',
224-
parent_id='C56A4180-65AA-42EC-A945-5FD21DEC0518',
225-
location_id=1
222+
id='C56A4180-65AA-42EC-A945-5FD21DEC0519',
223+
name='Gold Coast',
224+
tag='First Floor',
225+
parent_id='C56A4180-65AA-42EC-A945-5FD21DEC0518',
226+
location_id=1
226227
)
227228
child_node.save()
228229
db_session.commit()

tests/test_events/test_end_event.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from tests.base import BaseTestCase, CommonTestCases
2-
from unittest.mock import Mock, patch
2+
from unittest.mock import patch
33

44
from fixtures.events.end_event_fixtures import (
55
end_event_mutation,

tests/test_events/test_slack_notifier.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import unittest
2-
from unittest.mock import Mock, patch
2+
from unittest.mock import patch
33
from helpers.event.slack_notifier import notify_slack
44

55

@@ -11,5 +11,5 @@ def test_slack_notifier(self, mock_get_request):
1111
Test to verify that a request is made when
1212
an event ends
1313
"""
14-
notify_slack('event_id')
14+
notify_slack('event_id', '[email protected]', '18')
1515
mock_get_request.assert_called_once()

0 commit comments

Comments
 (0)