Skip to content

Commit

Permalink
[BE] add StripeCustomer.default_source (#48)
Browse files Browse the repository at this point in the history
  • Loading branch information
poxip committed Jun 6, 2018
1 parent 884a5ed commit 4034445
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 2 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Change Log
All notable changes to this project will be documented in this file.
## [0.6.2]
### Added
- missing StripeCustomer.default_source field

## [0.6.1]
### Fixed
- customer data is updated after updating one of its sources (customer.source.updated webhook)
Expand Down
2 changes: 1 addition & 1 deletion aa_stripe/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
__title__ = "Arabella Stripe"
__version__ = "0.6.1"
__version__ = "0.6.2"
__author__ = "Jacek Ostanski"
__license__ = "MIT"
__copyright__ = "Copyright 2017 Arabella"
Expand Down
20 changes: 20 additions & 0 deletions aa_stripe/migrations/0019_stripecustomer_default_source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.13 on 2018-06-06 09:36
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('aa_stripe', '0018_stripecustomer_sources'),
]

operations = [
migrations.AddField(
model_name='stripecustomer',
name='default_source',
field=models.CharField(blank=True, help_text='ID of default source from Stripe', max_length=255),
),
]
10 changes: 10 additions & 0 deletions aa_stripe/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class StripeCustomer(StripeBasicModel):
is_active = models.BooleanField(default=True)
is_created_at_stripe = models.BooleanField(default=False)
sources = JSONField(default=[])
default_source = models.CharField(max_length=255, blank=True, help_text="ID of default source from Stripe")

def __init__(self, *args, **kwargs):
super(StripeCustomer, self).__init__(*args, **kwargs)
Expand Down Expand Up @@ -92,9 +93,18 @@ def refresh_from_stripe(self):
customer = self.retrieve_from_stripe()
if customer:
self.sources = customer.sources.data
self.default_source = customer.default_source
self.save(update_fields=["sources"])
return customer

def get_default_source_data(self):
if not self.default_source:
return

for source in self.sources:
if source["id"] == self.default_source:
return source

class Meta:
ordering = ["id"]

Expand Down
13 changes: 12 additions & 1 deletion tests/test_customers.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ def test_customer_refresh_from_stripe(self, m):
"account_balance": 0,
"created": 1476810921,
"currency": "usd",
"default_source": None,
"default_source": "card_xyz",
"delinquent": False,
"description": None,
"discount": None,
Expand Down Expand Up @@ -200,3 +200,14 @@ def test_customer_refresh_from_stripe(self, m):
m.register_uri("GET", api_url, text=json.dumps(api_response))
self.customer.refresh_from_stripe()
self.assertEqual(self.customer.sources, [{"id": "card_xyz", "object": "card"}])
self.assertEqual(self.customer.default_source, "card_xyz")

def test_get_default_source(self):
self._create_customer()
self.customer.sources = [{"id": "card_abc"}, {"id": "card_xyz"}]
self.customer.save()

self.assertIsNone(self.customer.get_default_source_data())
self.customer.default_source = "card_xyz"
self.customer.save()
self.assertEqual(self.customer.get_default_source_data(), {"id": "card_xyz"})

0 comments on commit 4034445

Please sign in to comment.