Cart reservation durations now take the residual from the last reservation duration into account.
This commit is contained in:
		
							parent
							
								
									360175f86a
								
							
						
					
					
						commit
						b323c0eb25
					
				
					 2 changed files with 50 additions and 2 deletions
				
			
		|  | @ -76,7 +76,14 @@ class CartController(object): | ||||||
|         determine whether the cart has reserved the items and discounts it |         determine whether the cart has reserved the items and discounts it | ||||||
|         holds. ''' |         holds. ''' | ||||||
| 
 | 
 | ||||||
|         reservations = [datetime.timedelta()] |         time = timezone.now() | ||||||
|  | 
 | ||||||
|  |         # Calculate the residual of the _old_ reservation duration | ||||||
|  |         # if it's greater than what's in the cart now, keep it. | ||||||
|  |         time_elapsed_since_updated = (time - self.cart.time_last_updated) | ||||||
|  |         residual = self.cart.reservation_duration - time_elapsed_since_updated | ||||||
|  | 
 | ||||||
|  |         reservations = [datetime.timedelta(0), residual] | ||||||
| 
 | 
 | ||||||
|         # If we have vouchers, we're entitled to an hour at minimum. |         # If we have vouchers, we're entitled to an hour at minimum. | ||||||
|         if len(self.cart.vouchers.all()) >= 1: |         if len(self.cart.vouchers.all()) >= 1: | ||||||
|  | @ -90,7 +97,7 @@ class CartController(object): | ||||||
|         if product_max is not None: |         if product_max is not None: | ||||||
|             reservations.append(product_max) |             reservations.append(product_max) | ||||||
| 
 | 
 | ||||||
|         self.cart.time_last_updated = timezone.now() |         self.cart.time_last_updated = time | ||||||
|         self.cart.reservation_duration = max(reservations) |         self.cart.reservation_duration = max(reservations) | ||||||
| 
 | 
 | ||||||
|     def end_batch(self): |     def end_batch(self): | ||||||
|  |  | ||||||
|  | @ -459,3 +459,44 @@ class BasicCartTests(RegistrationCartTestCase): | ||||||
|         cart.add_to_cart(self.PROD_1, 1) |         cart.add_to_cart(self.PROD_1, 1) | ||||||
|         cart.cart.refresh_from_db() |         cart.cart.refresh_from_db() | ||||||
|         self.assertEqual(cart.cart.reservation_duration, new_res) |         self.assertEqual(cart.cart.reservation_duration, new_res) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def test_reservation_duration_removals(self): | ||||||
|  |         ''' Reservation duration should update with removals | ||||||
|  |         ''' | ||||||
|  | 
 | ||||||
|  |         new_res = self.RESERVATION * 2 | ||||||
|  |         self.PROD_2.reservation_duration = new_res | ||||||
|  |         self.PROD_2.save() | ||||||
|  | 
 | ||||||
|  |         self.set_time(datetime.datetime(2015, 1, 1, tzinfo=UTC)) | ||||||
|  |         cart = TestingCartController.for_user(self.USER_1) | ||||||
|  | 
 | ||||||
|  |         one_third = new_res / 3 | ||||||
|  | 
 | ||||||
|  |         cart.add_to_cart(self.PROD_2, 1) | ||||||
|  |         cart.cart.refresh_from_db() | ||||||
|  |         self.assertEqual(cart.cart.reservation_duration, new_res) | ||||||
|  | 
 | ||||||
|  |         # Reservation duration should not decrease if time hasn't decreased | ||||||
|  |         cart.set_quantity(self.PROD_2, 0) | ||||||
|  |         cart.cart.refresh_from_db() | ||||||
|  |         self.assertEqual(cart.cart.reservation_duration, new_res) | ||||||
|  | 
 | ||||||
|  |         # Adding a new product should not reset the reservation duration below | ||||||
|  |         # the old one | ||||||
|  |         cart.add_to_cart(self.PROD_1, 1) | ||||||
|  |         cart.cart.refresh_from_db() | ||||||
|  |         self.assertEqual(cart.cart.reservation_duration, new_res) | ||||||
|  | 
 | ||||||
|  |         self.add_timedelta(one_third) | ||||||
|  | 
 | ||||||
|  |         # The old reservation duration is still longer than PROD_1's | ||||||
|  |         cart.add_to_cart(self.PROD_1, 1) | ||||||
|  |         cart.cart.refresh_from_db() | ||||||
|  |         self.assertEqual(cart.cart.reservation_duration, new_res - one_third) | ||||||
|  | 
 | ||||||
|  |         self.add_timedelta(one_third) | ||||||
|  |         cart.add_to_cart(self.PROD_1, 1) | ||||||
|  |         cart.cart.refresh_from_db() | ||||||
|  |         self.assertEqual(cart.cart.reservation_duration, self.RESERVATION) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer