Beispiel #1
0
class TestPickupDateSeriesModel(TestCase):
    def setUp(self):
        self.place = PlaceFactory()

    def test_create_all_pickup_dates_inactive_places(self):
        self.place.status = PlaceStatus.ARCHIVED.value
        self.place.save()

        start_date = self.place.group.timezone.localize(datetime.now().replace(2017, 3, 18, 15, 0, 0, 0))

        PickupDateSeriesFactory(place=self.place, start_date=start_date)

        PickupDate.objects.all().delete()
        PickupDateSeries.objects.update_pickups()
        self.assertEqual(PickupDate.objects.count(), 0)

    def test_daylight_saving_time_to_summer(self):
        start_date = self.place.group.timezone.localize(datetime.now().replace(2017, 3, 18, 15, 0, 0, 0))

        before_dst_switch = timezone.now().replace(2017, 3, 18, 4, 40, 13)
        with freeze_time(before_dst_switch, tick=True):
            series = PickupDateSeriesFactory(place=self.place, start_date=start_date)

        expected_dates = []
        for month, day in [(3, 18), (3, 25), (4, 1), (4, 8)]:
            expected_dates.append(self.place.group.timezone.localize(datetime(2017, month, day, 15, 0)))
        for actual_date, expected_date in zip(PickupDate.objects.filter(series=series), expected_dates):
            self.assertEqual(actual_date.date.start, expected_date)

    def test_daylight_saving_time_to_winter(self):
        start_date = self.place.group.timezone.localize(datetime.now().replace(2016, 10, 22, 15, 0, 0, 0))

        before_dst_switch = timezone.now().replace(2016, 10, 22, 4, 40, 13)
        with freeze_time(before_dst_switch, tick=True):
            series = PickupDateSeriesFactory(place=self.place, start_date=start_date)

        expected_dates = []
        for month, day in [(10, 22), (10, 29), (11, 5), (11, 12)]:
            expected_dates.append(self.place.group.timezone.localize(datetime(2016, month, day, 15, 0)))
        for actual_date, expected_date in zip(PickupDate.objects.filter(series=series), expected_dates):
            self.assertEqual(actual_date.date.start, expected_date)

    def test_delete(self):
        now = timezone.now()
        two_weeks_ago = now - relativedelta(weeks=2)
        with freeze_time(two_weeks_ago, tick=True):
            series = PickupDateSeriesFactory(place=self.place, start_date=two_weeks_ago)

        pickup_dates = series.pickup_dates.all()
        past_date_count = pickup_dates.filter(date__startswith__lt=now).count()
        self.assertGreater(pickup_dates.count(), 2)
        series.delete()
        upcoming_pickups = PickupDate.objects.filter(date__startswith__gte=now, is_disabled=False)
        self.assertEqual(upcoming_pickups.count(), 0, upcoming_pickups)
        self.assertEqual(PickupDate.objects.filter(date__startswith__lt=now).count(), past_date_count)
Beispiel #2
0
class PlaceReceiverTests(WSTestCase):
    def setUp(self):
        super().setUp()
        self.member = UserFactory()
        self.group = GroupFactory(members=[self.member])
        self.place = PlaceFactory(group=self.group)

    def test_receive_place_changes(self):
        client = self.connect_as(self.member)

        name = faker.name()
        self.place.name = name
        self.place.save()

        response = client.messages_by_topic.get('places:place')[0]
        self.assertEqual(response['payload']['name'], name)

        self.assertEqual(len(client.messages), 1)
Beispiel #3
0
class TestPlaceChangesActivitySeriesAPI(APITestCase, ExtractPaginationMixin):
    def setUp(self):

        self.now = timezone.now()
        self.url = '/api/places/'
        self.member = UserFactory()
        self.group = GroupFactory(members=[self.member])
        self.place = PlaceFactory(group=self.group)
        self.place_url = self.url + str(self.place.id) + '/'
        self.series = ActivitySeriesFactory(max_participants=3,
                                            place=self.place)

    def test_reduce_weeks_in_advance(self):
        self.client.force_login(user=self.member)

        url = '/api/activities/'
        response = self.get_results(url, {
            'series': self.series.id,
            'date_min': self.now
        })
        self.assertEqual(response.status_code, status.HTTP_200_OK,
                         response.data)

        response = self.client.patch(self.place_url, {'weeks_in_advance': 2})
        self.assertEqual(response.status_code, status.HTTP_200_OK,
                         response.data)
        self.assertEqual(response.data['weeks_in_advance'], 2)

        url = '/api/activities/'
        response = self.get_results(url, {'series': self.series.id})
        self.assertEqual(response.status_code, status.HTTP_200_OK,
                         response.data)
        for _ in response.data:
            self.assertLessEqual(parse(_['date'][0]),
                                 self.now + relativedelta(weeks=2, hours=1))

    def test_increase_weeks_in_advance(self):
        self.client.force_login(user=self.member)

        url = '/api/activities/'
        response = self.get_results(url, {
            'series': self.series.id,
            'date_min': self.now
        })
        self.assertEqual(response.status_code, status.HTTP_200_OK,
                         response.data)
        original_dates = [parse(_['date'][0]) for _ in response.data]

        response = self.client.patch(self.place_url, {'weeks_in_advance': 10})
        self.assertEqual(response.status_code, status.HTTP_200_OK,
                         response.data)
        self.assertEqual(response.data['weeks_in_advance'], 10)

        url = '/api/activities/'
        response = self.get_results(url, {'series': self.series.id})
        self.assertEqual(response.status_code, status.HTTP_200_OK,
                         response.data)
        self.assertGreater(len(response.data), len(original_dates))
        for return_date in response.data:
            self.assertLessEqual(parse(return_date['date'][0]),
                                 self.now + relativedelta(weeks=10))

    def test_set_weeks_to_invalid_low_value(self):
        self.client.force_login(user=self.member)
        response = self.client.patch(self.place_url, {'weeks_in_advance': 0})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST,
                         response.data)

    def test_set_weeks_to_invalid_high_value(self):
        self.client.force_login(user=self.member)
        response = self.client.patch(self.place_url, {'weeks_in_advance': 99})
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST,
                         response.data)
        self.assertIn('Do not set more than',
                      response.data['weeks_in_advance'][0])

    def test_set_place_active_status_updates_activities(self):
        self.place.status = PlaceStatus.ARCHIVED.value
        self.place.save()
        self.place.activities.all().delete()
        self.client.force_login(user=self.member)
        response = self.client.patch(self.place_url,
                                     {'status': PlaceStatus.ACTIVE.value},
                                     format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertGreater(self.place.activities.count(), 0)