예제 #1
0
    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))
예제 #2
0
    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")
예제 #3
0
    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)
        ]]
예제 #4
0
 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)
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
파일: test_time.py 프로젝트: Marcusntnu/web
 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))
예제 #8
0
 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))
예제 #9
0
 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")
예제 #10
0
 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)
예제 #11
0
    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())
예제 #12
0
 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")