def test_calendar_reservation_url(self, now_mock): now_mock.return_value = local_to_date( timezone.datetime(2018, 12, 9, 12, 24)) user = User.objects.create_user("user", "*****@*****.**", "weak_pass") user.save() machine_type_printer = MachineTypeField.get_machine_type(1) Quota.objects.create(user=user, number_of_reservations=2, ignore_rules=True, machine_type=machine_type_printer) printer = Machine.objects.create(name="U1", location="S1", machine_model="Ultimaker", status="F", machine_type=machine_type_printer) Printer3DCourse.objects.create(user=user, username=user.username, name=user.get_full_name(), date=timezone.now()) reservation = Reservation.objects.create(user=user, machine=printer, event=None, start_time=timezone.now(), end_time=timezone.now() + timedelta(hours=2)) self.assertEqual(current_calendar_url(printer), calendar_url_reservation(reservation))
def test_disallow_overlapping_reservations(self, now_mock): now_mock.return_value = local_to_date(datetime(2018, 3, 12, 12, 0, 0)) self.user_quota.max_number_of_reservations = 3 self.user_quota.save() self.check_reservation_valid(self.create_reservation(timedelta(hours=1), timedelta(hours=2)), "Saving should be valid") # Start before, end inside self.check_reservation_invalid(self.create_reservation(timedelta(minutes=50), timedelta(hours=1, minutes=50)), "Reservation should not be able to end inside another") # Start inside, end after self.check_reservation_invalid( self.create_reservation(timedelta(hours=1, minutes=10), timedelta(hours=2, minutes=10)), "Reservation should not be able to end inside another") # Start inside, end inside self.check_reservation_invalid( self.create_reservation(timedelta(hours=1, minutes=10), timedelta(hours=1, minutes=50)), "Reservation should not be able to start and end inside another") # Start before, end after self.check_reservation_invalid(self.create_reservation(timedelta(minutes=50), timedelta(hours=2, minutes=10)), "Reservation should not be able to encapsulate another") # End at the start time of other self.check_reservation_valid(self.create_reservation(timedelta(hours=0), timedelta(hours=1)), "A reservation should be allowed to end at the same time another one starts") # Start at the end time of other self.check_reservation_valid(self.create_reservation(timedelta(hours=2), timedelta(hours=3)), "A reservation should be allowed to start at the same time another one ends")
def get_week_days_with_reservations(year, week, machine): """ Creates a list of the week days with reservation for the given year, week and machine :param year: The year the week is in :param week: The week to retrieve reservations for :param machine: The machine to retrieve reservations for :return: A list of week days with reservations """ first_date_of_week = local_to_date(year_and_week_to_monday(year, week)) return [{ "date": date, "reservations": list( map( lambda x: ReservationCalendarComponentView. format_reservation(x, date), machine.reservations_in_period(date, date + timedelta(days=1)))) } for date in [ first_date_of_week + timedelta(days=day_number) for day_number in range(7) ]]
def test_form_valid_event_reservation(self, now_mock): now_mock.return_value = local_to_date( timezone.datetime(2018, 8, 12, 12, 0, 0)) self.user.user_permissions.add( Permission.objects.get(name="Can create event reservation")) view = self.get_view() reservation = ReservationSewing.objects.create( start_time=timezone.now() + timedelta(hours=1), machine=self.machine, event=self.timeplace, end_time=timezone.now() + timedelta(hours=2), user=self.user) self.timeplace = TimePlace.objects.create( event=self.event, start_time=(timezone.now() + timedelta(hours=1)).time(), start_date=(timezone.now() + timedelta(hours=1)).date(), end_time=(timezone.now() + timedelta(hours=2)).time(), end_date=(timezone.now() + timedelta(hours=2)).date()) form = self.create_form(1, 2, event=self.timeplace) self.assertTrue(form.is_valid()) response = view.form_valid(form, reservation=reservation) self.assertEqual(ReservationSewing.objects.count(), 1) self.assertTrue(response.status_code, 302) self.assertEqual(ReservationSewing.objects.first().event, self.timeplace)
def test_special_case(self, now_mock): now_mock.return_value = local_to_date( timezone.datetime(2018, 11, 16, 10, 0, 0)) reservation = Reservation.objects.create( machine=self.machine, start_time=timezone.now() + timedelta(minutes=1), end_time=timezone.now() + timedelta(hours=6), user=self.user) reservation2 = Reservation.objects.create( machine=self.machine, start_time=timezone.now() + timedelta(hours=6), end_time=timezone.now() + timedelta(hours=6, minutes=26), user=User.objects.create_user("test2")) now_mock.return_value = local_to_date( timezone.datetime(2018, 11, 16, 15, 56, 0)) response = self.post_to_view(reservation) self.assertEqual(302, response.status_code) self.assertEqual(timezone.now(), Reservation.objects.get(pk=reservation.pk).end_time)
def test_post_unchangeable_reservation(self, now_mock): now_mock.return_value = local_to_date( timezone.datetime(2018, 8, 12, 12, 0, 0)) view = self.get_view() view.request.method = "POST" reservation = self.create_reservation(self.create_form(1, 2)) now_mock.return_value = timezone.now() + timedelta(hours=2, minutes=1) response = view.dispatch(view.request, reservation=reservation) # An unchangeable reservation should have redirect self.assertEqual(302, response.status_code)
def test_local_to_date(self): local_date = datetime(2018, 3, 12, 11, 20, 20) self.assertEqual( timezone.datetime(2018, 3, 12, 10, 20, 20, tzinfo=pytz.timezone("UTC")), local_to_date(local_date))
def test_form_valid_normal_reservation(self, now_mock): now_mock.return_value = local_to_date( timezone.datetime(2018, 8, 12, 12, 0, 0)) view = self.get_view() reservation = self.create_reservation(self.create_form(1, 2)) form = self.create_form(1, 3) self.assertTrue(form.is_valid()) response = view.form_valid(form, reservation=reservation) self.assertEqual(Reservation.objects.count(), 1) self.assertTrue(response.status_code, 302) self.assertEqual(Reservation.objects.first().end_time, timezone.now() + timedelta(hours=3))
def test_post_after_reservation(self, now_mock): now_mock.return_value = local_to_date( timezone.datetime(2018, 8, 12, 12, 0, 0)) reservation = Reservation.objects.create( machine=self.machine, start_time=timezone.now() + timedelta(hours=1), end_time=timezone.now() + timedelta(hours=2), user=self.user) now_mock.return_value = timezone.now() + timedelta(hours=3) response = self.post_to_view(reservation) self.assertEqual(302, response.status_code) self.assertEqual( reservation, Reservation.objects.get(pk=reservation.pk), "Marking a reservation in the past as done should not do anything")
def test_form_valid_changed_machine(self, now_mock): now_mock.return_value = local_to_date( timezone.datetime(2018, 8, 12, 12, 0, 0)) view = self.get_view() reservation = self.create_reservation(self.create_form(1, 2)) old_machine = self.machine self.machine = SewingMachine.objects.create(name="M1", model="Generic") form = self.create_form(1, 3) self.assertTrue(form.is_valid()) response = view.form_valid(form, reservation=reservation) self.assertTrue(response.status_code, 302) self.assertEqual(ReservationSewing.objects.count(), 1) self.assertEqual(ReservationSewing.objects.first().end_time, timezone.now() + timedelta(hours=2)) self.assertEqual(ReservationSewing.objects.first().get_machine(), old_machine)
def test_post_valid(self, now_mock): now_mock.return_value = local_to_date( timezone.datetime(2018, 8, 12, 12, 0, 0)) reservation = Reservation.objects.create( machine=self.machine, start_time=timezone.now() + timedelta(hours=1), end_time=timezone.now() + timedelta(hours=2), user=self.user) now_mock.return_value = timezone.now() + timedelta(hours=1.1) self.assertTrue(reservation.can_change_end_time(self.user)) response = self.post_to_view(reservation) # Will always be redirected self.assertEqual(302, response.status_code) self.assertEqual( Reservation.objects.get(pk=reservation.pk).end_time, timezone.now())
def test_form_valid_special_reservation(self, now_mock): now_mock.return_value = local_to_date( timezone.datetime(2018, 8, 12, 12, 0, 0)) self.user.user_permissions.add( Permission.objects.get(name="Can create event reservation")) view = self.get_view() reservation = Reservation.objects.create( start_time=timezone.now() + timedelta(hours=1), machine=self.machine, special=True, end_time=timezone.now() + timedelta(hours=2), user=self.user, special_text="Test") form = self.create_form(1, 2, special=True, special_text="Test2") self.assertTrue(form.is_valid()) response = view.form_valid(form, reservation=reservation) self.assertEqual(Reservation.objects.count(), 1) self.assertTrue(response.status_code, 302) self.assertEqual(Reservation.objects.first().special_text, "Test2")