Beispiel #1
0
    def test_upload_timetable(self):
        """
        create classes between given dates
        """
        start_date = datetime(2016, 3, 22, tzinfo=timezone.utc) # tues
        end_date = datetime(2016, 3, 23, tzinfo=timezone.utc) # wed
        self.assertEquals(Event.objects.all().count(), 0)

        # create some timetabled sessions for mondays, tuesdays and Wednesdays
        mommy.make_recipe('flex_bookings.mon_session', _quantity=3)
        mommy.make_recipe('flex_bookings.tue_session', _quantity=3)
        mommy.make_recipe('flex_bookings.wed_session', _quantity=3)

        session_ids = [session.id for session in Session.objects.all()]

        upload_timetable(start_date, end_date, session_ids)
        # check that there are now classes on the dates specified
        tue_classes = Event.objects.filter(
            date__gte=self._start_of_day(start_date),
            date__lte=self._end_of_day(start_date)
            )
        wed_classes = Event.objects.filter(
            date__gte=self._start_of_day(end_date),
            date__lte=self._end_of_day(end_date)
            )
        # total number of classes created is 6, as no monday classes created
        self.assertEquals(tue_classes.count(), 3)
        self.assertEquals(wed_classes.count(), 3)
        self.assertEquals(Event.objects.count(), 6)
Beispiel #2
0
    def upload_timetable_specified_sessions_only(self):
        start_date = datetime(2016, 3, 22, tzinfo=timezone.utc) # tues
        end_date = datetime(2016, 3, 23, tzinfo=timezone.utc) # wed
        self.assertEquals(Event.objects.all().count(), 0)

        # create some timetabled sessions for mondays, tuesdays and Wednesdays
        tues_sessions = mommy.make_recipe('flex_bookings.tue_session', _quantity=3)
        mommy.make_recipe('flex_bookings.wed_session', _quantity=3)

        session_ids = [
            session.id for session in Session.objects.all() if
            session in tues_sessions
            ]
        # choose tues-wed as date range, but specify the tues sessions only
        upload_timetable(start_date, end_date, session_ids)
        # check that there are now classes on the dates specified
        tue_classes = Event.objects.filter(
            date__gte=self._start_of_day(start_date),
            date__lte=self._end_of_day(start_date)
            )
        wed_classes = Event.objects.filter(
            date__gte=self._start_of_day(end_date),
            date__lte=self._end_of_day(end_date)
            )
        # total number of classes created is 3, as no wed classes created
        self.assertEquals(tue_classes.count(), 3)
        self.assertEquals(wed_classes.count(), 0)
        self.assertEquals(Event.objects.count(), 3)
Beispiel #3
0
def upload_timetable_view(
        request, template_name="studioadmin/upload_timetable_form.html"
):
    if request.method == 'POST':
        form = UploadTimetableForm(request.POST)
        if form.is_valid():
            start_date = form.cleaned_data['start_date']
            end_date = form.cleaned_data['end_date']
            session_ids = form.cleaned_data['sessions']

            created_classes, existing_classes = \
                utils.upload_timetable(
                    start_date, end_date, session_ids, request.user
                )
            context = {'start_date': start_date,
                       'end_date': end_date,
                       'created_classes': created_classes,
                       'existing_classes': existing_classes,
                       'sidenav_selection': 'upload_timetable'}
            return render(
                request, 'studioadmin/upload_timetable_confirmation.html',
                context
            )
    else:
        form = UploadTimetableForm()
    return render(request, template_name,
                  {'form': form, 'sidenav_selection': 'upload_timetable'})
Beispiel #4
0
    def test_upload_timetable_only_matches_main_fields(self):
        """
        Test that uploading timetable only checks name, event type, date and
        location on existing classes and doesn't create duplicates if the
        same class exists with a minor difference
        """
        start_date = datetime(2016, 3, 21, tzinfo=timezone.utc) # monday
        end_date = datetime(2016, 3, 22, tzinfo=timezone.utc) # tuesday
        self.assertEquals(Event.objects.all().count(), 0)

        # create some timetabled sessions for mondays, tuesdays and Wednesdays
        mommy.make_recipe('flex_bookings.mon_session', _quantity=3)
        mommy.make_recipe('flex_bookings.tue_session', _quantity=3)
        mommy.make_recipe('flex_bookings.wed_session', _quantity=3)

        session_ids = [session.id for session in Session.objects.all()]

        upload_timetable(start_date, end_date, session_ids)
        # check that there are now classes on the dates specified
        mon_classes = Event.objects.filter(
            date__gte=self._start_of_day(start_date),
            date__lte=self._end_of_day(start_date)
            )
        tue_classes = Event.objects.filter(
            date__gte=self._start_of_day(end_date),
            date__lte=self._end_of_day(end_date)
            )
        self.assertEquals(mon_classes.count(), 3)
        self.assertEquals(tue_classes.count(), 3)

        # make some minor changes to one of the newly uploaded classes
        # should NOT cause a new class to be uploaded
        tue_class = tue_classes[0]
        tue_class.description = "A new description"
        tue_class.save()

        # upload timetable with overlapping dates
        start_date = datetime(2016, 3, 22, tzinfo=timezone.utc) # tuesday
        end_date = datetime(2016, 3, 23, tzinfo=timezone.utc) # Wednesday
        upload_timetable(start_date, end_date, session_ids)
        tue_classes = Event.objects.filter(
            date__gte=self._start_of_day(start_date),
            date__lte=self._end_of_day(start_date)
            )
        wed_classes = Event.objects.filter(
            date__gte=self._start_of_day(end_date),
            date__lte=self._end_of_day(end_date)
            )
        # tue classes is still 3
        self.assertEquals(tue_classes.count(), 3)
        self.assertEquals(wed_classes.count(), 3)

        # total number of classes created is now 9
        self.assertEquals(Event.objects.all().count(), 9)

        # make some major changes to one of the newly uploaded classes
        # SHOULD cause a new class to be uploaded
        tue_class = tue_classes[0]
        tue_class.name = "New Pole Class"
        tue_class.save()

        # upload timetable with overlapping dates
        start_date = datetime(2016, 3, 22, tzinfo=timezone.utc) # tuesday
        end_date = datetime(2016, 3, 23, tzinfo=timezone.utc) # Wednesday
        upload_timetable(start_date, end_date, session_ids)
        tue_classes = Event.objects.filter(
            date__gte=self._start_of_day(start_date),
            date__lte=self._end_of_day(start_date)
            )
        wed_classes = Event.objects.filter(
            date__gte=self._start_of_day(end_date),
            date__lte=self._end_of_day(end_date)
            )
        # tue classes is now 4
        self.assertEquals(tue_classes.count(), 4)
        self.assertEquals(wed_classes.count(), 3)

        # total number of classes created is now 10
        self.assertEquals(Event.objects.all().count(), 10)