def test_price(self): customer = factory.create_customer(self.app) product1 = Product(sku='A') product2 = Product(sku='B') transaction = Transaction(customer=customer) transaction.add_product(product1, 2, 20) transaction.add_product(product2, 3, 20) self.assertEqual(transaction.total, 5)
def test_add_products(self): customer = factory.create_customer(self.app) transaction = Transaction(customer=customer) product1 = Product(sku='A') product2 = Product(sku='B') transaction.add_product(product1, 10, 20) transaction.add_product(product2, 10, 20) self.db.session.add(transaction) self.db.session.commit() self.assertEqual(transaction.products, [product1, product2]) self.assertEqual(product1.transactions, [transaction]) self.assertEqual(product2.transactions, [transaction])
def setUp(self): self.customer = factory.create_customer(self.app) self.user = self.customer.user self.vendor = Vendor(slug='test_vendor', redirect_url='https://google.com') self.transaction = Transaction(customer=self.customer, status=Transaction.Status.OPEN) product1 = Product(sku='A', vendor=self.vendor) product2 = Product(sku='B', vendor=self.vendor) self.transaction.add_product(product1, 50, 100) self.transaction.add_product(product2, 80, 200) self.db.session.add(self.transaction) self.db.session.add(self.vendor) self.db.session.commit()
def test_multiple_transactions_per_product(self): customer = factory.create_customer(self.app) product1 = Product(sku='A') product2 = Product(sku='B') for _ in range(2): transaction = Transaction(customer=customer) transaction.add_product(product1, 10, 20) transaction.add_product(product2, 10, 20) self.db.session.add(transaction) self.db.session.commit() transactions = Transaction.query.all() self.assertEqual(product1.transactions, transactions) self.assertEqual(product2.transactions, transactions)
def create_transaction(app, customer): transaction = Transaction( customer=customer, status=Transaction.Status.OPEN) app.db.session.add(transaction) app.db.session.commit() return transaction
def test_customer(self): customer = factory.create_customer(self.app) transaction = Transaction(customer=customer) self.db.session.add(transaction) self.db.session.commit() self.assertEqual(transaction.customer, customer) self.assertEqual(customer.transactions, [transaction])
def test_status(self): customer = factory.create_customer(self.app) for status in Transaction.Status: transaction = Transaction(customer=customer, status=status) self.db.session.add(transaction) self.db.session.commit() transaction = Transaction.query.all() self.assertEqual(transaction[0].status.name, 'OPEN') self.assertEqual(transaction[1].status.name, 'SUCCESS') self.assertEqual(transaction[2].status.name, 'FAILURE')
class PaymentTests(Base): def setUp(self): self.customer = factory.create_customer(self.app) self.user = self.customer.user self.vendor = Vendor(slug='test_vendor', redirect_url='https://google.com') self.transaction = Transaction(customer=self.customer, status=Transaction.Status.OPEN) product1 = Product(sku='A', vendor=self.vendor) product2 = Product(sku='B', vendor=self.vendor) self.transaction.add_product(product1, 50, 100) self.transaction.add_product(product2, 80, 200) self.db.session.add(self.transaction) self.db.session.add(self.vendor) self.db.session.commit() def test_payment(self): self.client.post('/login', data={ 'email': self.user.email, 'password': self.user.password }, follow_redirects=True) data = {'txid': str(self.transaction.uuid), 'token': 'tok_visa'} resp = self.client.post('/checkout/pay', data=data) self.assertEqual(resp.status_code, 302) self.assertEqual( '{}?txid={}&vid={}'.format(self.vendor.redirect_url, str(self.transaction.uuid), self.vendor.id), resp.location) self.assertEqual(self.transaction.status, Transaction.Status.SUCCESS) def test_payment_unauthenticated(self): data = {'txid': str(self.transaction.uuid), 'token': 'tok_visa'} resp = self.client.post('/checkout/pay', data=data) self.assertEqual(resp.status_code, 302) self.assertEqual(self.transaction.status, Transaction.Status.OPEN) def test_payment_not_owner(self): diff_customer = factory.create_customer(self.app) diff_user = diff_customer.user self.client.post('/login', data={ 'email': diff_user.email, 'password': diff_user.password }, follow_redirects=True) data = {'txid': str(self.transaction.uuid), 'token': 'tok_visa'} resp = self.client.post('/checkout/pay', data=data) self.assertEqual(resp.status_code, 401) self.assertEqual(self.transaction.status, Transaction.Status.OPEN) def test_payment_not_open(self): self.client.post('/login', data={ 'email': self.user.email, 'password': self.user.password }, follow_redirects=True) status = Transaction.Status.FAILURE self.transaction.status = status self.db.session.add(self.transaction) self.db.session.commit() data = {'txid': str(self.transaction.uuid), 'token': 'tok_visa'} resp = self.client.post('/checkout/pay', data=data) self.assertEqual(resp.status_code, 403) self.assertEqual(self.transaction.status, status) def test_payment_nonexistent_transaction(self): self.client.post('/login', data={ 'email': self.user.email, 'password': self.user.password }, follow_redirects=True) data = {'txid': str(uuid.uuid4()), 'token': 'tok_visa'} resp = self.client.post('/checkout/pay', data=data) self.assertEqual(resp.status_code, 404) self.assertEqual(self.transaction.status, Transaction.Status.OPEN) def test_payment_bad_token(self): self.client.post('/login', data={ 'email': self.user.email, 'password': self.user.password }, follow_redirects=True) data = {'txid': str(self.transaction.uuid), 'token': 'foo'} resp = self.client.post('/checkout/pay', data=data) self.assertEqual(resp.status_code, 400) self.assertEqual(self.transaction.status, Transaction.Status.OPEN) def test_payment_not_customer(self): not_customer = factory.create_vendor(self.app) user = not_customer.user self.client.post('/login', data={ 'email': user.email, 'password': user.password }, follow_redirects=True) data = {'txid': str(self.transaction.uuid), 'token': 'foo'} resp = self.client.post('/checkout/pay', data=data) self.assertEqual(resp.status_code, 302) self.assertEqual(self.transaction.status, Transaction.Status.OPEN) def test_payment_saves_stripe_id(self): self.assertIsNone(self.customer.stripe_id) self.client.post('/login', data={ 'email': self.user.email, 'password': self.user.password }, follow_redirects=True) data = {'txid': str(self.transaction.uuid), 'token': 'tok_visa'} self.client.post('/checkout/pay', data=data) self.assertIsNotNone(self.customer.stripe_id)