Exemple #1
0
def on_email_changed(request, user, from_email_address, to_email_address, **kwargs):
	from djstripe.models import Customer
	customer = Customer.objects.filter(subscriber=user).first()
	if not customer:
		# Don't bother creating a customer for this user, it'll happen later.
		return

	stripe_obj = customer.api_retrieve()
	stripe_obj.email = to_email_address.email
	Customer.sync_from_stripe_data(stripe_obj.save())
 def test_customer_sync_default_source_string(self):
     Customer.objects.all().delete()
     customer_fake = deepcopy(FAKE_CUSTOMER)
     customer_fake["default_source"] = customer_fake["sources"]["data"][0]["id"] = "card_sync_source_string"
     customer = Customer.sync_from_stripe_data(customer_fake)
     self.assertEqual(customer.default_source.stripe_id, customer_fake["default_source"])
     self.assertEqual(customer.sources.count(), 2)
Exemple #3
0
 def test_customer_sync_default_source_string(self):
     Customer.objects.all().delete()
     customer_fake = deepcopy(FAKE_CUSTOMER)
     customer_fake["default_source"] = customer_fake["sources"]["data"][0]["id"] = "card_sync_source_string"
     customer = Customer.sync_from_stripe_data(customer_fake)
     self.assertEqual(customer.default_source.stripe_id, customer_fake["default_source"])
     self.assertEqual(customer.sources.count(), 2)
Exemple #4
0
    def test_customer_sync_has_bad_subscriber_metadata(self):
        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["metadata"] = {"djstripe_subscriber": "does_not_exist"}
        customer = Customer.sync_from_stripe_data(fake_customer)

        self.assertEqual(customer.subscriber, None)
        self.assertEqual(customer.metadata, {"djstripe_subscriber": "does_not_exist"})
Exemple #5
0
    def create_for_user(self, user):
        from djstripe.models import Customer

        stripe_customer = Customer.sync_from_stripe_data(self)
        stripe_customer.subscriber = user
        stripe_customer.save()
        return stripe_customer
    def test_customer_sync_has_bad_subscriber_metadata(self):
        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["metadata"] = {"djstripe_subscriber": "does_not_exist"}
        customer = Customer.sync_from_stripe_data(fake_customer)

        self.assertEqual(customer.subscriber, None)
        self.assertEqual(customer.metadata, {"djstripe_subscriber": "does_not_exist"})
Exemple #7
0
	def create_for_user(self, user):
		from djstripe.models import Customer

		stripe_customer = Customer.sync_from_stripe_data(self)
		stripe_customer.subscriber = user
		stripe_customer.save()
		return stripe_customer
Exemple #8
0
    def test_customer_sync_no_sources(self, customer_mock):
        self.customer.sources.all().delete()

        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["default_source"] = None
        customer = Customer.sync_from_stripe_data(fake_customer)
        self.assertEqual(customer.sources.count(), 0)
        self.assertEqual(customer.default_source, None)
Exemple #9
0
    def test_sync_customer_delete_discount(self):
        test_coupon = Coupon.sync_from_stripe_data(FAKE_COUPON)
        self.customer.coupon = test_coupon
        self.customer.save()
        self.assertEqual(self.customer.coupon.stripe_id, FAKE_COUPON["id"])

        customer = Customer.sync_from_stripe_data(FAKE_CUSTOMER)
        self.assertEqual(customer.coupon, None)
Exemple #10
0
	def test_sync_customer_with_discount(self, coupon_retrieve_mock):
		self.assertIsNone(self.customer.coupon)
		fake_customer = deepcopy(FAKE_CUSTOMER)
		fake_customer["discount"] = deepcopy(FAKE_DISCOUNT_CUSTOMER)
		customer = Customer.sync_from_stripe_data(fake_customer)
		self.assertEqual(customer.coupon.id, FAKE_COUPON["id"])
		self.assertIsNotNone(customer.coupon_start)
		self.assertIsNone(customer.coupon_end)
Exemple #11
0
	def test_sync_customer_delete_discount(self):
		test_coupon = Coupon.sync_from_stripe_data(FAKE_COUPON)
		self.customer.coupon = test_coupon
		self.customer.save()
		self.assertEqual(self.customer.coupon.id, FAKE_COUPON["id"])

		customer = Customer.sync_from_stripe_data(FAKE_CUSTOMER)
		self.assertEqual(customer.coupon, None)
Exemple #12
0
 def test_sync_customer_with_discount(self, coupon_retrieve_mock):
     self.assertIsNone(self.customer.coupon)
     fake_customer = deepcopy(FAKE_CUSTOMER)
     fake_customer["discount"] = deepcopy(FAKE_DISCOUNT_CUSTOMER)
     customer = Customer.sync_from_stripe_data(fake_customer)
     self.assertEqual(customer.coupon.stripe_id, FAKE_COUPON["id"])
     self.assertIsNotNone(customer.coupon_start)
     self.assertIsNone(customer.coupon_end)
    def test_customer_sync_has_subscriber_metadata(self):
        user = get_user_model().objects.create(username="******", id=12345)

        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["metadata"] = {"djstripe_subscriber": "12345"}
        customer = Customer.sync_from_stripe_data(fake_customer)

        self.assertEqual(customer.subscriber, user)
        self.assertEqual(customer.metadata, {"djstripe_subscriber": "12345"})
Exemple #14
0
    def test_customer_sync_has_subscriber_metadata(self):
        user = get_user_model().objects.create(username="******", id=12345)

        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["metadata"] = {"djstripe_subscriber": "12345"}
        customer = Customer.sync_from_stripe_data(fake_customer)

        self.assertEqual(customer.subscriber, user)
        self.assertEqual(customer.metadata, {"djstripe_subscriber": "12345"})
 def setUp(self):
     self.settings(ROOT_URLCONF=self.urlconf)
     self.factory = RequestFactory()
     self.user = get_user_model().objects.create_user(username="******", email="*****@*****.**")
     self.customer = Customer.sync_from_stripe_data(FAKE_CUSTOMER)
     self.customer.subscriber = self.user
     self.customer.save()
     self.subscription = Subscription.sync_from_stripe_data(FAKE_SUBSCRIPTION)
     self.middleware = SubscriptionPaymentMiddleware()
 def test_customer_sync_default_source_string(self):
     Customer.objects.all().delete()
     Card.objects.all().delete()
     customer_fake = deepcopy(FAKE_CUSTOMER)
     customer_fake["default_source"] = customer_fake["sources"]["data"][0]["id"] = "card_sync_source_string"
     customer = Customer.sync_from_stripe_data(customer_fake)
     self.assertEqual(customer.default_source.id, customer_fake["default_source"])
     self.assertEqual(customer.legacy_cards.count(), 2)
     self.assertEqual(len(list(customer.payment_methods)), 2)
Exemple #17
0
 def setUp(self):
     self.plan = Plan.sync_from_stripe_data(deepcopy(FAKE_PLAN))
     self.url = reverse("djstripe:cancel_subscription")
     self.user = get_user_model().objects.create_user(
         username="******", email="*****@*****.**", password="******")
     self.assertTrue(
         self.client.login(username="******", password="******"))
     stripe_customer = Customer.sync_from_stripe_data(FAKE_CUSTOMER)
     stripe_customer.subscriber = self.user
     stripe_customer.save()
Exemple #18
0
    def test_customer_sync_non_local_card(self, card_retrieve_mock):
        fake_customer = deepcopy(FAKE_CUSTOMER_II)

        user = get_user_model().objects.create_user(username="******", email="*****@*****.**")
        Customer.objects.create(subscriber=user, stripe_id=FAKE_CUSTOMER_II["id"], livemode=False)

        customer = Customer.sync_from_stripe_data(fake_customer)

        self.assertEqual(FAKE_CUSTOMER_II["default_source"]["id"], customer.default_source.stripe_id)
        self.assertEqual(1, customer.sources.count())
    def test_customer_sync_has_subscriber_metadata_disabled(self):
        user = get_user_model().objects.create(username="******", id=98765)

        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["id"] = "cus_test_metadata_disabled"
        fake_customer["metadata"] = {"djstripe_subscriber": "98765"}
        with patch("djstripe.settings.SUBSCRIBER_CUSTOMER_KEY", return_value=""):
            customer = Customer.sync_from_stripe_data(fake_customer)

        self.assertNotEqual(customer.subscriber, user)
        self.assertNotEqual(customer.subscriber_id, 98765)
Exemple #20
0
 def setUp(self):
     self.settings(ROOT_URLCONF=self.urlconf)
     self.factory = RequestFactory()
     self.user = get_user_model().objects.create_user(
         username="******", email="*****@*****.**")
     self.customer = Customer.sync_from_stripe_data(FAKE_CUSTOMER)
     self.customer.subscriber = self.user
     self.customer.save()
     self.subscription = Subscription.sync_from_stripe_data(
         FAKE_SUBSCRIPTION)
     self.middleware = SubscriptionPaymentMiddleware()
Exemple #21
0
    def test_sync_customer_discount_already_present(self, coupon_retrieve_mock):
        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["discount"] = deepcopy(FAKE_DISCOUNT_CUSTOMER)

        # Set the customer's coupon to be what we'll sync
        customer = Customer.objects.get(stripe_id=FAKE_CUSTOMER["id"])
        customer.coupon = Coupon.sync_from_stripe_data(FAKE_COUPON)
        customer.save()

        customer = Customer.sync_from_stripe_data(fake_customer)
        self.assertEqual(customer.coupon.stripe_id, FAKE_COUPON["id"])
Exemple #22
0
    def test_customer_sync_unsupported_source(self):
        fake_customer = deepcopy(FAKE_CUSTOMER_II)
        fake_customer["default_source"]["object"] = "fish"

        user = get_user_model().objects.create_user(username="******", email="*****@*****.**")
        Customer.objects.create(subscriber=user, stripe_id=FAKE_CUSTOMER_II["id"], livemode=False)

        customer = Customer.sync_from_stripe_data(fake_customer)

        self.assertEqual(None, customer.default_source)
        self.assertEqual(0, customer.sources.count())
Exemple #23
0
	def test_sync_customer_discount_already_present(self, coupon_retrieve_mock):
		fake_customer = deepcopy(FAKE_CUSTOMER)
		fake_customer["discount"] = deepcopy(FAKE_DISCOUNT_CUSTOMER)

		# Set the customer's coupon to be what we'll sync
		customer = Customer.objects.get(id=FAKE_CUSTOMER["id"])
		customer.coupon = Coupon.sync_from_stripe_data(FAKE_COUPON)
		customer.save()

		customer = Customer.sync_from_stripe_data(fake_customer)
		self.assertEqual(customer.coupon.id, FAKE_COUPON["id"])
def sync_customers(apps, schema_editor):
    # This is okay, since we're only doing a forward migration.
    from djstripe.models import Customer

    from djstripe.context_managers import stripe_temporary_api_version

    with stripe_temporary_api_version("2016-03-07"):
        if Customer.objects.count():
            print("syncing customers. This may take a while.")

            for customer in tqdm(Customer.objects.all(), desc="Sync", unit=" customers"):
                try:
                    Customer.sync_from_stripe_data(customer.api_retrieve())
                except InvalidRequestError:
                    tqdm.write("There was an error while syncing customer \
                    ({customer_id}).".format(customer_id=customer.stripe_id))
                except IntegrityError:
                    print(customer.api_retrieve())
                    six.reraise(*sys.exc_info())

            print("Customer sync complete.")
Exemple #25
0
 def setUp(self):
     self.plan = Plan.sync_from_stripe_data(deepcopy(FAKE_PLAN))
     self.url = reverse("djstripe:cancel_subscription")
     self.user = get_user_model().objects.create_user(
         username="******",
         email="*****@*****.**",
         password="******"
     )
     self.assertTrue(self.client.login(username="******", password="******"))
     stripe_customer = Customer.sync_from_stripe_data(FAKE_CUSTOMER)
     stripe_customer.subscriber = self.user
     stripe_customer.save()
Exemple #26
0
	def test_customer_sync_has_bad_subscriber_metadata(self):
		fake_customer = deepcopy(FAKE_CUSTOMER)
		fake_customer["id"] = "cus_sync_has_bad_subscriber_metadata"
		fake_customer["metadata"] = {"djstripe_subscriber": "does_not_exist"}
		customer = Customer.sync_from_stripe_data(fake_customer)

		self.assertEqual(customer.subscriber, None)
		self.assertEqual(customer.metadata, {"djstripe_subscriber": "does_not_exist"})

		self.assert_fks(
			customer,
			expected_blank_fks={"djstripe.Customer.coupon", "djstripe.Customer.subscriber"},
		)
    def create_stripe_customer(self, user, advertiser):
        """Setup a Stripe customer for this user."""
        if not settings.STRIPE_ENABLED:
            return None

        # Create the new stripe customer
        customer = stripe.Customer.create(
            name=user.name,
            email=user.email,
            description=f"Advertising @ {advertiser.name}",
        )

        # Force sync this customer from stripe
        # Then return the Django model instance
        return Customer.sync_from_stripe_data(customer)
Exemple #28
0
	def test_customer_sync_default_source_string(self):
		Customer.objects.all().delete()
		Card.objects.all().delete()
		customer_fake = deepcopy(FAKE_CUSTOMER)
		customer_fake["default_source"] = customer_fake["sources"]["data"][0][
			"id"
		] = "card_sync_source_string"
		customer = Customer.sync_from_stripe_data(customer_fake)
		self.assertEqual(customer.default_source.id, customer_fake["default_source"])
		self.assertEqual(customer.legacy_cards.count(), 2)
		self.assertEqual(len(list(customer.payment_methods)), 2)

		self.assert_fks(
			customer,
			expected_blank_fks={"djstripe.Customer.coupon", "djstripe.Customer.subscriber"},
		)
Exemple #29
0
    def test_customer_sync_has_bad_subscriber_metadata(self):
        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["id"] = "cus_sync_has_bad_subscriber_metadata"
        fake_customer["metadata"] = {"djstripe_subscriber": "does_not_exist"}
        customer = Customer.sync_from_stripe_data(fake_customer)

        self.assertEqual(customer.subscriber, None)
        self.assertEqual(customer.metadata,
                         {"djstripe_subscriber": "does_not_exist"})

        self.assert_fks(
            customer,
            expected_blank_fks={
                "djstripe.Customer.coupon", "djstripe.Customer.subscriber"
            },
        )
Exemple #30
0
	def setUp(self):
		self.settings(ROOT_URLCONF=self.urlconf)
		self.factory = RequestFactory()
		self.user = get_user_model().objects.create_user(
			username="******", email="*****@*****.**"
		)
		self.customer = Customer.sync_from_stripe_data(FAKE_CUSTOMER)
		self.customer.subscriber = self.user
		self.customer.save()

		with patch(
			"stripe.Product.retrieve", return_value=deepcopy(FAKE_PRODUCT), autospec=True
		):
			self.subscription = Subscription.sync_from_stripe_data(FAKE_SUBSCRIPTION)

		self.middleware = SubscriptionPaymentMiddleware()
Exemple #31
0
    def setUp(self):
        self.settings(ROOT_URLCONF=self.urlconf)
        self.factory = RequestFactory()
        self.user = get_user_model().objects.create_user(
            username="******", email="*****@*****.**")
        self.customer = Customer.sync_from_stripe_data(FAKE_CUSTOMER)
        self.customer.subscriber = self.user
        self.customer.save()

        with patch("stripe.Product.retrieve",
                   return_value=deepcopy(FAKE_PRODUCT),
                   autospec=True):
            self.subscription = Subscription.sync_from_stripe_data(
                FAKE_SUBSCRIPTION)

        self.middleware = SubscriptionPaymentMiddleware()
Exemple #32
0
	def test_customer_sync_has_subscriber_metadata_disabled(self):
		user = get_user_model().objects.create(username="******", id=98765)

		fake_customer = deepcopy(FAKE_CUSTOMER)
		fake_customer["id"] = "cus_test_metadata_disabled"
		fake_customer["metadata"] = {"djstripe_subscriber": "98765"}
		with patch(
			"djstripe.settings.SUBSCRIBER_CUSTOMER_KEY", return_value="", autospec=True
		):
			customer = Customer.sync_from_stripe_data(fake_customer)

		self.assertNotEqual(customer.subscriber, user)
		self.assertNotEqual(customer.subscriber_id, 98765)

		self.assert_fks(
			customer,
			expected_blank_fks={"djstripe.Customer.coupon", "djstripe.Customer.subscriber"},
		)
Exemple #33
0
def new_customer(request):
    body = json.loads(request.body)
    # Retrieve payment method from Stripe data
    payment_method = stripe.PaymentMethod.retrieve(body['payment_method'])
    PaymentMethod.sync_from_stripe_data(payment_method)
    user = NewUser.objects.get(username=body['user'])
    if not getattr(user, 'owner'):
        # If customer doesn't exist, create new Customer object
        customer = stripe.Customer.create(
            email=getattr(user, 'email'),
            payment_method=payment_method,
            invoice_settings={"default_payment_method": payment_method},
        )
    else:
        # Attach new payment method to customer
        customer = stripe.Customer.retrieve(getattr(user, 'owner').id)
        stripe.PaymentMethod.attach(payment_method, customer=customer.id)
        stripe.Customer.modify(
            customer.id,
            invoice_settings={"default_payment_method": payment_method},
        )

    # Create new Subscription and attach to customer
    subscription = stripe.Subscription.create(
        customer=customer.id,
        items=[{
            'price': body['price_id']
        }],
        expand=['latest_invoice.payment_intent'],
        trial_period_days=7)

    # Save in Django DB
    django_customer = Customer.sync_from_stripe_data(customer)
    user.owner = django_customer
    django_subscription = Subscription.sync_from_stripe_data(subscription)
    user.subscription = django_subscription
    user.save()
    return JsonResponse(data={
        'customer': customer,
        'subscription': subscription
    })
Exemple #34
0
def create_cust_subscription(request):
    customer = stripe.Customer.create(
        email=request.user.email,
        name=request.user.first_name + ' ' + request.user.last_name,
        source=request.POST['stripeToken'],
    )
    djstripe_customer = Customer.sync_from_stripe_data(customer)
    subscription = stripe.Subscription.create(
        customer=customer,
        items=[
            {'plan': 'price_1H7QitFuwTkoJXtMe5otaHpo'}
        ],
        collection_method='charge_automatically',
        trial_period_days=7,
    )
    djstripe_subscription = Subscription.sync_from_stripe_data(subscription)
    # Here we save the customer id and subscription id in our database.
    stripesubscriptionsdetails = SubscriberSubscriptionDetails()
    user = User.objects.get(email=request.user.email)
    stripesubscriptionsdetails.user = user
    stripesubscriptionsdetails.customer = djstripe_customer
    stripesubscriptionsdetails.subscription = djstripe_subscription
    stripesubscriptionsdetails.save()
Exemple #35
0
 def test_customer_sync_default_source_string(self, customer_mock):
     fake_customer = deepcopy(FAKE_CUSTOMER_DEFAULT_SOURCE_STRING)
     customer = Customer.sync_from_stripe_data(fake_customer)
     self.assertEqual(customer.default_source.stripe_id, FAKE_CARD["id"])
     self.assertEqual(customer.sources.count(), 1)