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,
        )
Пример #2
0
    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,
        )
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
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)
Пример #7
0
    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)
Пример #8
0
    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,
        )
Пример #10
0
    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)
Пример #11
0
    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)