def form_valid(self, form): if not self.request.user.is_authenticated: messages.add_message(self.request, messages.ERROR, 'You need to be logged in to book a Pod.') return super(BookingFormView, self).form_invalid(form) user = self.request.user booking = Booking(start=form.cleaned_data['start'], end=form.cleaned_data['end'], purpose=form.cleaned_data['purpose'], installer=form.cleaned_data['installer'], scenario=form.cleaned_data['scenario'], resource=self.resource, user=user) try: booking.save() except ValueError as err: messages.add_message(self.request, messages.ERROR, err) return super(BookingFormView, self).form_invalid(form) try: if settings.CREATE_JIRA_TICKET: create_jira_ticket(user, booking) except JIRAError: messages.add_message( self.request, messages.ERROR, 'Failed to create Jira Ticket. ' 'Please check your Jira ' 'permissions.') booking.delete() return super(BookingFormView, self).form_invalid(form) messages.add_message(self.request, messages.SUCCESS, 'Booking saved') return super(BookingFormView, self).form_valid(form)
class test_booking(TestCase): def setUp(self): self.loc = Location.objects.create( name="BroGym", address="Brophessor st. 12", description= "best gym get swole 100\%\ gains guaranteed live large die large leave a huge coffin" ) self.user = User.objects.create_superuser(customer_number="92837465", email="*****@*****.**", password="******") self.b1 = Booking(id=1, person=self.user, title="Baiceps", description="get de big baiceps", location=self.loc, start="2019-05-15T12:00:00Z", end="2019-05-15T14:00:00Z") self.b1.save() self.b2 = Booking(id=2, person=self.user, title="legs", description="skip legday", location=self.loc, start="2019-05-15T12:00:00Z", end="2019-05-15T14:00:00Z") self.b2.save() def test_name(self): self.assertTrue(str(self.b1) == "Baiceps") def test_absolute_url(self): pass def test_move_queue(self): before1 = self.b1.queueNo before2 = self.b2.queueNo queue = [self.b1, self.b2] self.b1.move_queue(queue, 1) self.assertGreater(self.b1.queueNo, before1) self.assertGreater(self.b2.queueNo, before2) def test_save(self): before = self.b2.queueNo self.b2.start = datetime(2019, 5, 15, 14) #'2019-05-15T14:00:00Z' self.b2.end = datetime(2019, 5, 15, 16) #'2019-05-15T16:00:00Z' self.b2.save() self.assertGreater(before, self.b2.queueNo) def test_delete(self): before = self.b2.queueNo self.b1.delete() q1 = Booking.objects.all()[0] self.assertGreater(before, q1.queueNo) def test_get_groups(self): groups = self.b1.get_groups() self.assertEqual([], groups) def test_get_date(self): pass
def save(self, user, force_insert=False, force_update=False, commit=True): booking = Booking() booking.user = user booking.name = self.cleaned_data.get("name") booking.start_date = self.cleaned_data.get("start_date") booking.end_date = self.cleaned_data.get("end_date") booking.place = self.cleaned_data.get("place") weekdays = self.cleaned_data.get("week_days") #if user.profile_user.is_admin(): # booking.engineering = self.cleaned_data.get("engineering_choice") # booking.responsible = self.cleaned_data.get("responsible") # name = re.search('[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+', # booking.responsible) # if name is not None: # name = name.group() # users = User.objects.filter(username=name) # ONE_FOUND = 1 # if user.profile_user.is_admin() and (users.count() is ONE_FOUND): # booking.user = users[0] #else: # booking.engineering = user.profile_user.engineering # booking.responsible = str(user.profile_user) book = BookTime() book.date_booking = booking.start_date book.start_hour = self.cleaned_data.get("start_hour") book.end_hour = self.cleaned_data.get("end_hour") try: booking.save() if booking.exists(book.start_hour, book.end_hour, weekdays): booking.delete() return None else: for day in date_range(book.date_booking, booking.end_date): if (day.isoweekday() - 1 in map(int, weekdays)): newBookTime = BookTime(start_hour=book.start_hour, end_hour=book.end_hour, date_booking=day) newBookTime.save() booking.time.add(newBookTime) #tags = self.cleaned_data['tags'] #if tags: # tags = ast.literal_eval(tags) # for name in tags: # if not Tag.objects.filter(name=name).exists(): # tag = Tag(name=name) # tag.save() # tag = Tag.objects.get(name=name) # booking.tags.add(tag) #booking.save() except Exception as e: booking.delete() msg = _('Failed to book selected period') print(e) raise forms.ValidationError(msg) return None return booking
class SimpleTest(TestCase): def setUp(self): # User objects.Non auth user self.user1 = OAuthUser.objects.create_user("temporary", "*****@*****.**", "temporary") # Auth user self.user2 = OAuthUser.objects.create_user("temporary2", "*****@*****.**", "temporary") self.user2.is_auth = True self.user2.save() # Auth user self.user3 = OAuthUser.objects.create_user("temporary3", "*****@*****.**", "temporary") self.user3.is_banned = True self.user3.save() # Create Booking object self.order = Booking( user=self.user2, swim_lane=3, start_date=datetime.datetime.now().date(), start_time="11:30:00", end_time="12:00:00", ) self.order.save() # non exists order id self.fake_id = 9999 self.client = Client() def tearDown(self): self.user1.delete() self.user2.delete() self.order.delete() ######################## # List of orders - GET # ######################## def test_get_booking_list(self): url = reverse("booking_list_api") # Get by non login user response = self.client.get(url) self.assertEqual(response.status_code, 403) # Get by no auth user self.client.login(email="*****@*****.**", password="******") response = self.client.get(url) self.assertEqual(response.status_code, 403) # Get by banned user self.client.login(email="*****@*****.**", password="******") response = self.client.get(url) self.assertEqual(response.status_code, 403) # Get by auth user self.client.login(email="*****@*****.**", password="******") response = self.client.get(url) self.assertEqual(response.status_code, 200) ######################### # List of orders - POST # ######################### def test_post_booking_list(self): url = reverse("booking_list_api") post = {"start_date": datetime.datetime.now().date(), "start_time": "11:30:00", "end_time": "12:00:00"} post_invalid_date_max = { "start_date": datetime.datetime.now().date() + datetime.timedelta(days=6), "start_time": "11:30:00", "end_time": "12:00:00", } post_invalid_date_min = { "start_date": datetime.datetime.now().date() - datetime.timedelta(days=2), "start_time": "11:30:00", "end_time": "12:00:00", } post_invalid_time = { "start_date": datetime.datetime.now().date(), "start_time": "11:31:00", "end_time": "12:00:00", } # Post by non login user response = self.client.post(url, post) self.assertEqual(response.status_code, 403) # Post by no auth user self.client.login(email="*****@*****.**", password="******") response = self.client.post(url, post) self.assertEqual(response.status_code, 403) # Post by banned user self.client.login(email="*****@*****.**", password="******") response = self.client.post(url, post) self.assertEqual(response.status_code, 403) # Post by auth user self.client.login(email="*****@*****.**", password="******") response = self.client.post(url, post) self.assertEqual(response.status_code, 201) # Post by auth user with invalid date - max response = self.client.post(url, post_invalid_date_max) self.assertEqual(response.status_code, 400) # Post by auth user with invalid date - post past date response = self.client.post(url, post_invalid_date_min) # print(response.content) self.assertEqual(response.status_code, 400) # Post by auth user with invalid time response = self.client.post(url, post_invalid_time) self.assertEqual(response.status_code, 400) # Post if fully booked at this time(6 lines) self.client.post(url, post) # 3 self.client.post(url, post) # 4 self.client.post(url, post) # 5 self.client.post(url, post) # 6 response = self.client.post(url, post) # 7 self.assertEqual(response.status_code, 400) def test_delete_order(self): url_detail = reverse("booking_detail_api", args=(self.order.id,)) # delete order by no login user response = self.client.delete(url_detail) self.assertEqual(response.status_code, 403) # delete order by no auth user self.client.login(email="*****@*****.**", password="******") response = self.client.delete(url_detail) self.assertEqual(response.status_code, 403) """ # delete order by auth user, but no owner this order self.client.login(email='*****@*****.**', password='******') response = self.client.delete(url_detail) self.assertEqual(response.status_code, 403) """ # delete order by auth user and owner this order self.client.login(email="*****@*****.**", password="******") response = self.client.delete(url_detail) self.assertEqual(response.status_code, 204)