Пример #1
0
    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)
Пример #2
0
 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()
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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"
        )
Пример #6
0
    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)
Пример #7
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")
Пример #8
0
    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"
        )
Пример #9
0
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")
Пример #10
0
    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'
Пример #11
0
    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)
Пример #12
0
    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)