def subscribe_item(context, region=None, item=None, item_type=None, payment_type=None, resource_uuid=None, resource_name=None, **kwargs): """ """ # values of product values = { 'project_id': context.project_id, 'resource_uuid': resource_uuid, 'resource_name': resource_name, } try: # filter to get product_id products = _product_get_all(context, region=region, item=item, item_type=item_type, payment_type=payment_type) # TODO(lzyeval): check if products size is not 1 values['product_id'] = products[0]['id'] values['status'] = "verified" print "subscription_create", item, payment_type, values app = context.app app.info("subscribe_item:proj_id=" + str(context.project_id) + \ " name:" + str(resource_name) + \ "/" + str(item) + \ "/" + str(payment_type) + \ "/" + str(resource_uuid)) subscription_ref = db.subscription_create(context, values) db.subscription_extend(context, subscription_ref['id'], subscription_ref['created_at']) print "item subscribed." except Exception, e: # TODO(lzyeval): report print "subscribe failed:", Exception, e raise
def subscribe_item(context, region=None, item=None, item_type=None, payment_type=None, resource_uuid=None, resource_name=None, **kwargs): """ """ # values of product values = { 'project_id': context.project_id, 'resource_uuid': resource_uuid, 'resource_name': resource_name, } try: # filter to get product_id products = _product_get_all(context, region=region, item=item, item_type=item_type, payment_type=payment_type) # TODO(lzyeval): check if products size is not 1 values['product_id'] = products[0]['id'] subscription_ref = db.subscription_create(context, values) db.subscription_extend(context, subscription_ref['id'], subscription_ref['created_at']) except Exception, e: # TODO(lzyeval): report raise
def test_subscription_create_duplicate(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create( self.context, { 'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False }) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } db.subscription_create(self.context, values) self.assertRaises(Exception, db.subscription_create, self.context, values)
def test_subscribe_item(self): self.mox.StubOutWithMock(db, 'region_get_by_name') self.mox.StubOutWithMock(db, 'item_get_by_name') self.mox.StubOutWithMock(db, 'item_type_get_by_name') self.mox.StubOutWithMock(db, 'payment_type_get_by_name') self.mox.StubOutWithMock(db, 'product_get_all') self.mox.StubOutWithMock(db, 'subscription_create') self.mox.StubOutWithMock(db, 'subscription_extend') db.region_get_by_name(self.context, self.region_name).\ AndReturn(self.region) db.item_get_by_name(self.context, self.item_name).AndReturn(self.item) db.item_type_get_by_name(self.context, self.item_type_name).\ AndReturn(self.item_type) db.payment_type_get_by_name(self.context, self.payment_type_name).\ AndReturn(self.payment_type) db.product_get_all(self.context, filters={'region_id': self.region_id, 'item_id': self.item_id, 'item_type_id': self.item_type_id, 'payment_type_id': self.payment_type_id}).\ AndReturn(self.products) db.subscription_create(self.context, {'project_id': self.context.project_id, 'product_id': self.product_id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name}).\ AndReturn(self.subscription) db.subscription_extend(self.context, self.subscription_id, self.created_at).AndReturn(None) self.mox.ReplayAll() result = api.subscribe_item(self.context, self.region_name, self.item_name, self.item_type_name, self.payment_type_name, self.resource_uuid, self.resource_name) self.mox.VerifyAll() self.assertEqual(result, {})
def test_subscription_create_duplicate(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create(self.context, {'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False}) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } db.subscription_create(self.context, values) self.assertRaises(Exception, db.subscription_create, self.context, values)
def test_purchase_get_all_by_subscription_and_timeframe(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") self.truncate_table("purchases") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create( self.context, { 'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False }) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } subscription_ref = db.subscription_create(self.context, values) values = { 'subscription_id': subscription_ref.id, 'quantity': 1.56, 'line_total': 1.56 * product_ref.price, } expect = db.purchase_create(self.context, values) purchases = db.purchase_get_all_by_subscription_and_timeframe( self.context, expect.subscription_id, datetime.datetime.now() - datetime.timedelta(seconds=3), datetime.datetime.now() + datetime.timedelta(seconds=3)) self.compare_records(expect, purchases[0])
def test_purchase_destroy(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") self.truncate_table("purchases") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create( self.context, { 'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False }) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } subscription_ref = db.subscription_create(self.context, values) values = { 'subscription_id': subscription_ref.id, 'quantity': 1.56, 'line_total': 1.56 * product_ref.price, } expect = db.purchase_create(self.context, values) db.purchase_destroy(self.context, expect.id) self.assertRaises(exception.PurchaseNotFound, db.purchase_get, self.context, expect.id)
def test_purchase_get_all_by_subscription_and_timeframe(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") self.truncate_table("purchases") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create(self.context, {'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False}) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } subscription_ref = db.subscription_create(self.context, values) values = { 'subscription_id': subscription_ref.id, 'quantity': 1.56, 'line_total': 1.56 * product_ref.price, } expect = db.purchase_create(self.context, values) purchases = db.purchase_get_all_by_subscription_and_timeframe( self.context, expect.subscription_id, datetime.datetime.now() - datetime.timedelta(seconds=3), datetime.datetime.now() + datetime.timedelta(seconds=3)) self.compare_records(expect, purchases[0])
def test_purchase_destroy(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") self.truncate_table("purchases") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create(self.context, {'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False}) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } subscription_ref = db.subscription_create(self.context, values) values = { 'subscription_id': subscription_ref.id, 'quantity': 1.56, 'line_total': 1.56 * product_ref.price, } expect = db.purchase_create(self.context, values) db.purchase_destroy(self.context, expect.id) self.assertRaises(exception.PurchaseNotFound, db.purchase_get, self.context, expect.id)
def test_subscription_extend(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create( self.context, { 'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False }) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } expect = db.subscription_create(self.context, values) datetime_to = datetime.datetime.now() + datetime.timedelta(days=1) db.subscription_extend(self.context, expect.id, datetime_to) actual = db.subscription_get(self.context, expect.id) self.assertEqual(datetime_to.day, actual['expires_at'].day)
def test_subscription_error(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create( self.context, { 'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False }) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } expect = db.subscription_create(self.context, values) db.subscription_error(self.context, expect.id) actual = db.subscription_get(self.context, expect.id) expect.status = "error" self.compare_records(expect, actual)
def test_subscription_extend(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create(self.context, {'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False}) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } expect = db.subscription_create(self.context, values) datetime_to = datetime.datetime.now() + datetime.timedelta(days=1) db.subscription_extend(self.context, expect.id, datetime_to) actual = db.subscription_get(self.context, expect.id) self.assertEqual(datetime_to.day, actual['expires_at'].day)
def test_subscription_error(self): self.truncate_table("regions") self.truncate_table("items") self.truncate_table("item_types") self.truncate_table("payment_types") self.truncate_table("products") self.truncate_table("subscriptions") region_ref = db.region_create(self.context, {'name': 'a_region'}) item_ref = db.item_create(self.context, {'name': 'an_item'}) item_type_ref = db.item_type_create(self.context, {'name': 'an_item_type'}) payment_type_ref = db.payment_type_create(self.context, {'name': 'a_payment_type', 'interval_unit': 'days', 'interval_size': 12345, 'is_prepaid': False}) values = { 'region_id': region_ref.id, 'item_id': item_ref.id, 'item_type_id': item_type_ref.id, 'payment_type_id': payment_type_ref.id, 'order_unit': 'some_measure', 'order_size': 1, 'price': 11.24, 'currency': 'CNY', } product_ref = db.product_create(self.context, values) values = { 'project_id': self.context.project_id, 'product_id': product_ref.id, 'resource_uuid': self.resource_uuid, 'resource_name': self.resource_name, } expect = db.subscription_create(self.context, values) db.subscription_error(self.context, expect.id) actual = db.subscription_get(self.context, expect.id) expect.status = "error" self.compare_records(expect, actual)