def test_payout_of_multiple_orders(self): self.order = create_order(number="2-10001", user=self.user, shop=self.shop) self.order = create_order(number="2-10002", user=self.user, shop=self.shop) self.order = create_order(number="2-10003", user=self.user, shop=self.shop) shipped_event, in_transit_event = self.create_basic_shipping_and_payment_events( ) pay_designers() designer_payment_event = self.assert_proper_payment_events( total_payment_events=2, payment_event_group=in_transit_event.group, payout_total=5.60) designer_payout = self.assert_proper_payout_records( total_payout_records=1, payment_event_ref=designer_payment_event.reference, payout_total=5.60) self.assert_proper_stripe_records(designer_payout)
def setUp(self): self.user = TinvilleUser.objects.create(email="*****@*****.**") self.shop = Shop.objects.create(name='SchmoeVille', user=self.user) self.order = create_order(number="2-10011", user=self.user, shop=self.shop) self.top_level_order = create_order(number=10011, user=self.user, shop=self.shop) self.sendOrderMixin = SendOrderMixin()
def test_multiple_payouts_if_orders_between_pay_periods(self): self.test_payout_on_one_full_order() self.assertEqual(len(PaymentEvent.objects.all()), 2) self.assertEqual(len(DesignerPayout.objects.all()), 1, "1 payout should exist for first payout") # Create another order and make sure it is paid in the next pay period self.order = create_order(number="2-10002", user=self.user, shop=self.shop) shipped_event, in_transit_event = self.create_basic_shipping_and_payment_events( ) pay_designers() designer_payment_event = self.assert_proper_payment_events( total_payment_events=4, payment_event_group=in_transit_event.group, payout_total=5.60) designer_payout = self.assert_proper_payout_records( total_payout_records=2, payment_event_ref=designer_payment_event.reference, payout_total=5.60) self.assert_proper_stripe_records(designer_payout)
def test_payout_on_one_full_order_bank_account(self): self.order = create_order(number="2-10001", user=self.user, shop=self.shop) shipped_event, in_transit_event = self.create_basic_shipping_and_payment_events( ) rp = stripe.Recipient.retrieve(self.user.recipient_id) rp.bank_account = \ { 'country': 'US', 'currency': 'USD', 'account_number': '000123456789', 'routing_number': '110000000' } rp.save() rt = stripe.Recipient.retrieve(self.user.recipient_id) self.user.account_token = rt.active_account.id self.user.save() pay_designers() designer_payment_event = self.assert_proper_payment_events( total_payment_events=2, payment_event_group=in_transit_event.group, payout_total=5.60) designer_payout = self.assert_proper_payout_records( total_payout_records=1, payment_event_ref=designer_payment_event.reference, payout_total=5.60) self.assert_proper_stripe_records(designer_payout)
def test_no_designers_to_pay(self): self.order = create_order(number="2-10001", user=self.user, shop=self.shop) pay_designers() self.assertEqual( len(PaymentEvent.objects.all()), 0, "No payments should exist since there were no shipping events from any designer" )
def test_no_payout_due_to_no_stripe_recipient_id_for_designer(self): self.user.recipient_id = '' self.user.save() self.order = create_order(number="2-10001", user=self.user, shop=self.shop) self.create_basic_shipping_and_payment_events() pay_designers() # Make sure the exception rolled back any payment and payout events caused with self.assertRaises(PaymentEvent.DoesNotExist): PaymentEvent.objects.get(event_type=PaymentEventType.objects.get( code="paid_designer")) self.assertEquals(len(DesignerPayout.objects.all()), 0)
def test_no_payout_if_shipping_not_paid(self): self.order = create_order(number="2-10001", user=self.user, shop=self.shop) self.create_shipping_events() self.assertEqual(len(PaymentEvent.objects.all()), 0, "0 payments should exist since shipping not paid") pay_designers() self.assertEqual(len(PaymentEvent.objects.all()), 0, "0 payments should exist since shipping not paid") self.assertEqual( len(DesignerPayout.objects.all()), 0, "Designer payout should not be recorded for this period")
def test_no_payout_if_shipped_but_not_in_transit(self): self.order = create_order(number="2-10001", user=self.user, shop=self.shop) # Event marked as shipped, but not in transit, no payment made shipped_event = self.order.shipping_events.create( event_type=ShippingEventType.objects.get(code="shipped"), group=0) for line in self.order.lines.all(): shipped_event.line_quantities.create(line=line, quantity=line.quantity) pay_designers() self.assertEqual( len(PaymentEvent.objects.all()), 0, "No payments should exist since there were no 'in transit' events from any designer" )
def setup_basic_order_data(): my_user_has_correct_permissions() product_list = [] product_list.append(Product.objects.get(pk=2)) product_list.append(Product.objects.get(pk=3)) basket1 = create_basket_with_products(product_list) basket2 = create_basket_with_products(product_list) basket3 = create_basket_with_products(product_list) create_order(number="1-10002", basket=basket1, user=TinvilleUser.objects.get(pk=2), shop=Shop.objects.get(pk=1)) create_order(number="10002", basket=basket1, user=TinvilleUser.objects.get(pk=2), shop=None) create_order(number="1-10003", basket=basket2, user=TinvilleUser.objects.get(pk=2), shop=Shop.objects.get(pk=1)) create_order(number="10003", basket=basket2, user=TinvilleUser.objects.get(pk=2), shop=None) create_order(number="1-10004", basket=basket3, user=TinvilleUser.objects.get(pk=2), shop=Shop.objects.get(pk=1), status="Shipped") create_order(number="10004", basket=basket3, user=TinvilleUser.objects.get(pk=2), shop=None, status="Shipped")
def setUp(self): self.user = TinvilleUser.objects.create( email="*****@*****.**") self.shop = Shop.objects.create(name='StarkIndustries', user=self.user) self.order = create_order(number="2-10001", user=self.user, shop=self.shop) self.shipped_event = self.order.shipping_events.create( event_type=ShippingEventType.objects.get(code="shipped"), group=0, tracking_code='EZ4000000004', reference='foo') for line in self.order.lines.all(): self.shipped_event.line_quantities.create(line=line, quantity=line.quantity) validEasyPostRequest = { "id": "evt_qatAiJDM", "object": "Event", "created_at": "2014-11-19T10:51:54Z", "updated_at": "2014-11-19T10:51:54Z", "description": "tracker.updated", "mode": "test", "previous_attributes": { "status": "unknown" }, "pending_urls": [], "completed_urls": [], "result": { "id": "trk_Txyy1vaM", "object": "Tracker", "mode": "test", "tracking_code": "EZ4000000004", "status": "in_transit", "created_at": "2014-11-18T10:51:54Z", "updated_at": "2014-11-19T10:51:54Z", "signed_by": "John Tester", "weight": 17.6, "est_delivery_date": "2014-08-27T00:00:00Z", "shipment_id": "", "carrier": "UPS", "tracking_details": [{ "object": "TrackingDetail", "message": "BILLING INFORMATION RECEIVED", "status": "pre_transit", "datetime": "2014-11-21T14:24:00Z", "tracking_location": { "object": "TrackingLocation", "city": None, "state": None, "country": None, "zip": None } }] } } self.validEasyPostRequest = json.dumps(validEasyPostRequest) self.requestUrl = '/packageStatus'
def test_payout_of_partial_order_partial_quantity_line_item(self): # Create an order with two line items, but ship only the partial quantities of both products = [ create_product(title="Graphic T", product_class="Shirts", price=20.00, num_in_stock=5, partner_users=[self.user], shop=self.shop), create_product(title="Fancy pants", product_class="Bottoms", price=40.00, num_in_stock=10, partner_users=[self.user], shop=self.shop) ] basket = create_basket(empty=True) basket.add_product(products[0], quantity=3) basket.add_product(products[1], quantity=4) self.order = create_order(number="2-10001", basket=basket, user=self.user, shop=self.shop) # Designer only shipped partial quantities of both items shipped_event, in_transit_event = \ self.create_basic_shipping_and_payment_events( shipping_price=5.00, lines=self.order.lines.all(), line_quantities=[2, 3]) pay_designers() designer_payment_event = self.assert_proper_payment_events( total_payment_events=2, payment_event_group=in_transit_event.group, payout_total=124.00) designer_payout = self.assert_proper_payout_records( total_payout_records=1, payment_event_ref=designer_payment_event.reference, payout_total=124.00) self.assert_proper_stripe_records(designer_payout) # Now ship the remaining quantities shipped_event2, in_transit_event2 = \ self.create_basic_shipping_and_payment_events( shipping_price=5.00, lines=self.order.lines.all(), line_quantities=[1, 1]) pay_designers() designer_payment_event2 = self.assert_proper_payment_events( total_payment_events=4, payment_event_group=in_transit_event2.group, payout_total=44.00) designer_payout2 = self.assert_proper_payout_records( total_payout_records=2, payment_event_ref=designer_payment_event2.reference, payout_total=44.00) self.assert_proper_stripe_records(designer_payout2)
def test_payout_of_partial_order_full_line_item(self): # Create an order with two line items, but only ship one products = [ create_product(title="Graphic T", product_class="Shirts", price=20.00, num_in_stock=5, partner_users=[self.user], shop=self.shop), create_product(title="Fancy pants", product_class="Bottoms", price=40.00, num_in_stock=10, partner_users=[self.user], shop=self.shop) ] self.order = create_order(number="2-10001", basket=create_basket_with_products(products), user=self.user, shop=self.shop) # Designer only shipped first item first_item = self.order.lines.get(product=products[0]) shipped_event, in_transit_event = \ self.create_basic_shipping_and_payment_events( shipping_price=5.00, lines=[first_item], line_quantities=[first_item.quantity]) pay_designers() designer_payment_event = self.assert_proper_payment_events( total_payment_events=2, payment_event_group=in_transit_event.group, payout_total=12.00) designer_payout = self.assert_proper_payout_records( total_payout_records=1, payment_event_ref=designer_payment_event.reference, payout_total=12.00) self.assert_proper_stripe_records(designer_payout) # Now ship the next item and pay the designers again second_item = self.order.lines.get(product=products[1]) shipped_event2, in_transit_event2 = \ self.create_basic_shipping_and_payment_events( shipping_price=10.00, lines=[second_item], line_quantities=[second_item.quantity]) pay_designers() designer_payment_event2 = self.assert_proper_payment_events( total_payment_events=4, payment_event_group=in_transit_event2.group, payout_total=24.00) designer_payout2 = self.assert_proper_payout_records( total_payout_records=2, payment_event_ref=designer_payment_event2.reference, payout_total=24.00) self.assert_proper_stripe_records(designer_payout2)