def test_refused_meeting_send_push_notification_to_participants(self): """ No message for actuator and users who declined the meeting. """ meeting = create_meeting(get_user_model().objects.exclude(id=self.user.id).first()) my_participant = Participant.objects.get(user=self.user) my_participant.accepted = None my_participant.save(update_fields=("accepted",)) other_participants = meeting.participants\ .exclude(Q(id=self.user.id) | Q(participant__accepted=False))\ .all() self.put(dict(accepted=False), url=API_V1 + "meetings/{}/participants/".format(meeting.id)) self.mocked_send_fcm_bulk_message.assert_called_once_with( registration_ids=[u.get_device().registration_id for u in other_participants], message_title=ANY, message_body=ANY, message_icon=ANY, data_message={"type": "user-refused-meeting", "meeting": meeting.id, "participant": self.user.id}, sound=ANY, badge=ANY, )
def test_can_post_position_send_push_notification(self): """ No message for actuator and users who declined the meeting or have not yet answered. """ meeting = create_meeting(self.user) meeting.status = Meeting.STATUS_PROGRESS meeting.save(update_fields=("status", )) my_participant = Participant.objects.get(user=self.user) my_participant.accepted = True my_participant.save(update_fields=("accepted", )) other_participants = meeting.participants\ .filter(~Q(id=self.user.id) & Q(participant__accepted=True))\ .all() self.mocked_send_fcm_bulk_message.reset_mock() self.post(dict(latitude=self.latitude, longitude=self.longitude)) self.mocked_send_fcm_bulk_message.assert_called_once_with( registration_ids=[ u.get_device().registration_id for u in other_participants ], message_title=ANY, message_body=ANY, message_icon=ANY, data_message={ "type": "user-position-update", "meeting": meeting.id, "participant": my_participant.id }, sound=ANY, badge=ANY, )
def test_everybody_arrived_send_push_notification_to_participants(self): """ No message the users who declined the meeting. """ meeting = create_meeting(self.user) for participant in meeting.participant_set.filter(accepted=None).all(): participant.accepted = True participant.save(update_fields=("accepted",)) for participant in meeting.participant_set.filter(~Q(id=self.user.id) & Q(accepted=True)).all(): participant.arrived = True participant.save(update_fields=("arrived",)) self.mocked_send_fcm_bulk_message.reset_mock() self.put(dict(arrived=True), url=API_V1 + "meetings/{}/participants/".format(meeting.id)) participants = meeting.participants.filter(~Q(participant__accepted=False)).all() self.mocked_send_fcm_bulk_message.assert_called_with( registration_ids=[u.get_device().registration_id for u in participants], message_title=ANY, message_body=ANY, message_icon=ANY, data_message={ "type": "finished-meeting", "meeting": meeting.id, }, sound=ANY, badge=ANY, )
def test_only_organiser_can_update_meeting(self): meeting = create_meeting( get_user_model().objects.exclude(id=self.user.id).first()) self.assertEqual( self.put(dict(status=Meeting.STATUS_ENDED), url=self.url.format(meeting.id)).status_code, status.HTTP_403_FORBIDDEN)
def test_canceled_meeting_cancel_related_deferred_messages(self): self.mocked_send_fcm_message.return_value = dict(success=0) meeting = create_meeting(self.user) self.put(dict(status=Meeting.STATUS_CANCELED), url=self.url.format(meeting.id)) self.assertEqual(DeferredMessage.objects.count(), 0)
def test_organiser_can_set_meeting_status_has_canceled(self): meeting = create_meeting(self.user) self.assertEqual( self.put(dict(status=Meeting.STATUS_CANCELED), url=self.url.format(meeting.id)).status_code, status.HTTP_200_OK) self.assertEqual( Meeting.objects.get(id=meeting.id).status, Meeting.STATUS_CANCELED)
def test_cannot_set_meeting_has_pending(self): meeting = create_meeting(self.user) meeting.status = Meeting.STATUS_PROGRESS meeting.save(update_fields=("status", )) self.assertEqual( self.put(dict(status=Meeting.STATUS_PENDING), url=self.url.format(meeting.id)).status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( Meeting.objects.get(id=meeting.id).status, Meeting.STATUS_PROGRESS)
def test_cannot_update_canceled_meeting(self): meeting = create_meeting(self.user) meeting.status = Meeting.STATUS_CANCELED meeting.save(update_fields=("status", )) self.assertEqual( self.put(dict(status=Meeting.STATUS_ENDED), url=self.url.format(meeting.id)).status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( Meeting.objects.get(id=meeting.id).status, Meeting.STATUS_CANCELED)
def test_canceled_meeting_send_push_notification_to_participants(self): """ No message for users who declined the meeting. """ meeting = create_meeting(self.user) meeting.status = Meeting.STATUS_CANCELED meeting.save(update_fields=("status",)) other_participants = meeting.participants\ .filter(~Q(participant__accepted=False))\ .all() self.mocked_send_fcm_bulk_message.assert_called_once_with( registration_ids=[u.get_device().registration_id for u in other_participants], message_title=ANY, message_body=ANY, message_icon=ANY, data_message={"type": "canceled-meeting", "meeting": meeting.id}, sound=ANY, badge=ANY, )
def test_can_retrieve_own_meetings_details(self): meeting = create_meeting(self.user) self.assertEqual( self.get(url=self.url.format(meeting.id)).status_code, status.HTTP_200_OK)
def test_cannot_retrieve_meetings_details_when_unauthenticated(self): meeting = create_meeting(self.user) self.assertEqual( self.get(url=self.url.format(meeting.id)).status_code, status.HTTP_401_UNAUTHORIZED)