Adds functionality to increase the reservation duration
This commit is contained in:
		
							parent
							
								
									b323c0eb25
								
							
						
					
					
						commit
						d31d812001
					
				
					 2 changed files with 76 additions and 0 deletions
				
			
		|  | @ -124,6 +124,32 @@ class CartController(object): | |||
|         self.cart.revision += 1 | ||||
|         self.cart.save() | ||||
| 
 | ||||
|     def extend_reservation(self, timedelta): | ||||
|         ''' Extends the reservation on this cart by the given timedelta. | ||||
|         This can only be done if the current state of the cart is valid (i.e | ||||
|         all items and discounts in the cart are still available.) | ||||
| 
 | ||||
|         Arguments: | ||||
|             timedelta (timedelta): The amount of time to extend the cart by. | ||||
|                 The resulting reservation_duration will be now() + timedelta, | ||||
|                 unless the requested extension is *LESS* than the current | ||||
|                 reservation deadline. | ||||
| 
 | ||||
|         ''' | ||||
| 
 | ||||
|         self.validate_cart() | ||||
|         cart = self.cart | ||||
|         cart.refresh_from_db() | ||||
| 
 | ||||
|         elapsed = (timezone.now() - cart.time_last_updated) | ||||
| 
 | ||||
|         if cart.reservation_duration - elapsed > timedelta: | ||||
|             return | ||||
| 
 | ||||
|         cart.time_last_updated = timezone.now() | ||||
|         cart.reservation_duration = timedelta | ||||
|         cart.save() | ||||
| 
 | ||||
|     @_modifies_cart | ||||
|     def set_quantities(self, product_quantities): | ||||
|         ''' Sets the quantities on each of the products on each of the | ||||
|  |  | |||
|  | @ -500,3 +500,53 @@ class BasicCartTests(RegistrationCartTestCase): | |||
|         cart.add_to_cart(self.PROD_1, 1) | ||||
|         cart.cart.refresh_from_db() | ||||
|         self.assertEqual(cart.cart.reservation_duration, self.RESERVATION) | ||||
| 
 | ||||
|     def test_reservation_extension_less_than_current(self): | ||||
|         ''' Reservation extension should have no effect if it's too small | ||||
|         ''' | ||||
| 
 | ||||
|         self.set_time(datetime.datetime(2015, 1, 1, tzinfo=UTC)) | ||||
|         cart = TestingCartController.for_user(self.USER_1) | ||||
| 
 | ||||
|         cart.add_to_cart(self.PROD_1, 1) | ||||
|         cart.cart.refresh_from_db() | ||||
|         self.assertEqual(cart.cart.reservation_duration, self.RESERVATION) | ||||
| 
 | ||||
|         cart.extend_reservation(datetime.timedelta(minutes=30)) | ||||
| 
 | ||||
|         cart.cart.refresh_from_db() | ||||
|         self.assertEqual(cart.cart.reservation_duration, self.RESERVATION) | ||||
| 
 | ||||
|     def test_reservation_extension(self): | ||||
|         ''' Test various reservation extension bits. | ||||
|         ''' | ||||
| 
 | ||||
|         self.set_time(datetime.datetime(2015, 1, 1, tzinfo=UTC)) | ||||
|         cart = TestingCartController.for_user(self.USER_1) | ||||
| 
 | ||||
|         cart.add_to_cart(self.PROD_1, 1) | ||||
|         cart.cart.refresh_from_db() | ||||
|         self.assertEqual(cart.cart.reservation_duration, self.RESERVATION) | ||||
| 
 | ||||
|         hours = datetime.timedelta(hours=1) | ||||
|         cart.extend_reservation(24 * hours) | ||||
| 
 | ||||
|         cart.cart.refresh_from_db() | ||||
|         self.assertEqual(cart.cart.reservation_duration, 24 * hours) | ||||
| 
 | ||||
|         self.add_timedelta(1 * hours) | ||||
| 
 | ||||
|         # PROD_1's reservation is less than what we've added to the cart | ||||
|         cart.add_to_cart(self.PROD_1, 1) | ||||
|         cart.cart.refresh_from_db() | ||||
|         self.assertEqual(cart.cart.reservation_duration, 23 * hours) | ||||
| 
 | ||||
|         # Now the extension should only have 59 minutes remaining | ||||
|         # so the autoextend behaviour should kick in | ||||
|         self.add_timedelta(datetime.timedelta(hours=22, minutes=1)) | ||||
|         cart.add_to_cart(self.PROD_1, 1) | ||||
|         cart.cart.refresh_from_db() | ||||
|         self.assertEqual( | ||||
|             cart.cart.reservation_duration, | ||||
|             self.PROD_1.reservation_duration, | ||||
|         ) | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer