def test_sms_reply_in(self): if not settings.TEST_SMS: return user, event, smsuser = self.prep_for_response_sms() att = Attendant.get({u'user': user[u'id'], u'event': event[u'id']}) self.assertEqual(att[u'status'], status.INVITED, 'user is invited') response = self.post('/extras/SMS/', args={'From': smsuser[u'number'], 'To': settings.TWILIO_NUMBERS[0], 'Body': '#in'}) self.assertEqual(response.status, 200) att = Attendant.get({u'user': user[u'id'], u'event': event[u'id']}) self.assertEqual(att[u'status'], status.ATTENDING, 'user is attending')
def user_can_access(self, user): if user[u'username'] == self[u'creator']: return True if not self[u'broadcast']: att = Attendant.get({u'event': self[u'id'], u'user': user[u'id']}) return att is not None return True
def test_auto_invite(self): user = self.get_user() user2 = self.make_user() self.follow(user2, user) response = self.post('/events/', { u'broadcast': True, u'what': 'Testin event creation', }) self.assertEqual(response.status, 201, 'new event 201') event = json.loads(response.read()) att = Attendant.get({u'event': event[u'id'], u'user': user2[u'id']}) self.assertNotEqual(att, None, 'user auto-invited')
def post(self, event_id): ''' Updates an invitee's attendance ''' body = self.body_dict() username = self.get_session()[u'username'] user = User.get({u'username': username}) #make sure the event exists event = Event.get(event_id) if not event: raise HTTPError(404) #try to grab the user's existing attendance status att = Attendant.get({u'event': event[u'id'], u'user': user[u'id']}) #if the user isn't invited, we need to error out if broadcast is off if att is None: if event[u'broadcast']: att = Attendant(user=user[u'id'], event=event[u'id']) else: raise HTTPError(403) # create a list of acceptable statuses valid_statuses = [v for k, v in status.__dict__.iteritems() if k[0] != '_'] #make sure status is present and a correct value if body.get(u'status') not in valid_statuses: raise HTTPError(400) notify = (att[u'status'] == status.INVITED and body[u'status'] == status.ATTENDING) att[u'status'] = body[u'status'] att.save() if notify: #Send out the attendant notifications for uname in Attendant.to_notify(event, skip=[username]): notifications.send(uname, {u'type': 'attendant', u'event_revision': event[u'revision'], u'event_id': event[u'id'], u'attendant': username})