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)
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)
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'})
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)