class CategoryDetailViewTestCase(TestCase): def create_fixtures(self): self.cat = Category() self.cat.name = 'Test Category' self.cat.save() self.product = Product() self.product.category = self.cat self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() def test_01_get_context_works(self): self.create_fixtures() view = CategoryDetailView(kwargs={'pk': self.cat.id}) setattr(view, 'object', view.get_object()) ret = view.get_context_data() self.assertEqual(len(ret), 1) def test_02_get_context_works_with_list_of_products(self): self.create_fixtures() self.product.active = True self.product.save() view = CategoryDetailView(kwargs={'pk': self.cat.id}) setattr(view, 'object', view.get_object()) ret = view.get_context_data() self.assertEqual(len(ret), 2)
def setUp(self): make_category_tree() Product(name='Product 1', slug=slugify('Product 1'), active=True, unit_price=Decimal(random.randint(50, 1000)), main_category=Category.objects.get( slug='level2-first-sub')).save() Product( name='Product 2', slug=slugify('Product 2'), active=True, unit_price=Decimal(random.randint(50, 1000)), main_category=Category.objects.get(slug='level1-first')).save() Product( name='Product 3', slug=slugify('Product 3'), active=True, unit_price=Decimal(random.randint(50, 1000)), main_category=Category.objects.get(slug='level1-second')).save() Product(name='Product 4 with other treeid', slug=slugify('Product 4'), active=True, unit_price=Decimal(random.randint(50, 1000)), main_category=Category.objects.get( slug='level1-two-second')).save()
class ProductListViewTestCase(TestCase): def setUp(self): self.product1 = Product() self.product1.name = 'test1' self.product1.slug = 'test1' self.product1.short_description = 'test1' self.product1.long_description = 'test1' self.product1.unit_price = Decimal('1.0') self.product1.active = True self.product1.save() self.product2 = Product() self.product2.name = 'test2' self.product2.slug = 'test2' self.product2.short_description = 'test2' self.product2.long_description = 'test2' self.product2.unit_price = Decimal('1.0') self.product2.active = False self.product2.save() def test_get_queryset(self): """ Test that ProductListView.get_queryset() returns only active products, filtering inactive ones. """ view = ProductListView() active_products = view.get_queryset() self.assertEqual(len(active_products), 1) for product in active_products: self.assertEqual(product.active, True)
class ProductDetailViewTestCase(TestCase): def create_fixtures(self): self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.view = ProductDetailView(kwargs={'pk': self.product.id}) def test_01_get_product_returns_correctly(self): self.create_fixtures() setattr(self.view, 'object', None) obj = self.view.get_object() inst = isinstance(obj, Product) self.assertEqual(inst, True) def test_02_get_templates_return_expected_values(self): self.create_fixtures() self.view = ProductDetailView() setattr(self.view, 'object', None) tmp = self.view.get_template_names() self.assertEqual(len(tmp), 1)
class CategoriesTestCase(TestCase): def setUp(self): self.category = Category() self.category.name = "test_category" self.category.save() self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.product.categories.add(self.category) def test_01_category_unicode_returns_name(self): #self.create_fixtures() ret = self.category.__unicode__() self.assertEqual(ret, self.category.name) def test_02_category_get_products_works(self): #self.create_fixtures() ret = self.category.get_products() self.assertEqual(len(ret),1) cat_product = ret[0] self.assertEqual(cat_product,self.product)
class ProductTestCase(TestCase): def setUp(self): self.product = Product() self.product.name = 'test' self.product.unit_price = Decimal('1.0') self.product.save() def test_unicode_returns_proper_stuff(self): ret = str(self.product) self.assertEqual(ret, self.product.name) def test_active_filter_returns_only_active_products(self): ret1 = len(Product.objects.active()) # Set self.product to be active self.product.active = True self.product.save() ret2 = len(Product.objects.active()) self.assertNotEqual(ret1, ret2) self.assertEqual(ret1, 0) self.assertEqual(ret2, 1) def test_get_name_works_properly_by_default(self): res = self.product.get_name() self.assertEqual(res, self.product.name)
class ProductTestCase(TestCase): def create_fixtures(self): self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() def test_unicode_returns_proper_stuff(self): self.create_fixtures() ret = self.product.__unicode__() self.assertEqual(ret, self.product.name) def test_active_filter_returns_only_active_products(self): self.create_fixtures() ret1 = len(Product.objects.active()) # Set self.product to be active self.product.active = True self.product.save() ret2 = len(Product.objects.active()) self.assertNotEqual(ret1, ret2) self.assertEqual(ret1, 0) self.assertEqual(ret2, 1)
class ProductListViewTestCase(TestCase): def setUp(self): self.product1 = Product() self.product1.name = 'test1' self.product1.slug = 'test1' self.product1.short_description = 'test1' self.product1.long_description = 'test1' self.product1.unit_price = Decimal('1.0') self.product1.active = True self.product1.save() self.product2 = Product() self.product2.name = 'test2' self.product2.slug = 'test2' self.product2.short_description = 'test2' self.product2.long_description = 'test2' self.product2.unit_price = Decimal('1.0') self.product2.active = False self.product2.save() def test_get_queryset(self): """ Test that ProductListView.get_queryset() returns only active products, filtering inactive ones. """ view = ProductListView() active_products = view.get_queryset() self.assertEquals(len(active_products), 1) for product in active_products: self.assertEquals(product.active, True)
class ProductDetailViewTestCase(TestCase): def create_fixtures(self): self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.view = ProductDetailView(kwargs={'pk':self.product.id}) def test_01_get_product_returns_correctly(self): self.create_fixtures() setattr(self.view, 'object', None) obj = self.view.get_object() inst = isinstance(obj,Product) self.assertEqual(inst, True) def test_02_get_templates_return_expected_values(self): self.create_fixtures() self.view = ProductDetailView() setattr(self.view, 'object', None) tmp = self.view.get_template_names() self.assertEqual(len(tmp), 1)
class CategoryDetailViewTestCase(TestCase): def setUp(self): self.cat = Category() self.cat.name = 'Test Category' self.cat.save() self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.product.categories.add(self.cat) def test_01_get_context_works(self): #self.create_fixtures() view = CategoryDetailView(kwargs={'pk':self.cat.id}) setattr(view, 'object', view.get_object()) ret = view.get_context_data() self.assertEqual(len(ret), 1) def test_02_get_context_works_with_list_of_products(self): #self.create_fixtures() self.product.active = True self.product.save() view = CategoryDetailView(kwargs={'pk':self.cat.id}) setattr(view, 'object', view.get_object()) ret = view.get_context_data() self.assertEqual(len(ret), 2)
def create_fixtures(self): self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save()
def create_fixtures(self): self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.view = ProductDetailView(kwargs={'pk': self.product.id})
def test_product_adds_additional_categories(self): p = Product(name='Product 5', slug=slugify('Product 5'), active=True, unit_price=Decimal(random.randint(50, 1000)), main_category=Category.objects.get(slug='level1-second')) p.save() self.assertEqual(p.additional_categories.all()[0].slug, 'level1-second')
def setUp(self): self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.view = ProductDetailView(kwargs={'pk': self.product.pk})
def test_product_adds_additional_categories(self): p = Product( name='Product 4', slug=slugify('Product 4'), active=True, unit_price=Decimal(random.randint(50, 1000)), main_category=Category.objects.get(slug='level1-second') ) p.save() self.assertEqual(p.additional_categories.all()[0].slug, 'level1-second')
def setUp(self): self.category = Category() self.category.name = "test_category" self.category.save() self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.product.categories.add(self.category)
def create_fixtures(options=False): product = Product( name='product 1', slug='product-1', active=True, unit_price=43) product.save() if not options: return option_group = OptionGroup(name='option group 1', slug='option-group-1') option_group.save() option_group.products.add(product) Option.objects.create(name='option 1', price='42', group=option_group) Option.objects.create(name='option 2', price='84', group=option_group)
def create_fixtures(options=False): product = Product(name='product 1', slug='product-1', active=True, unit_price=43) product.save() if not options: return option_group = OptionGroup(name='option group 1', slug='option-group-1') option_group.save() option_group.products.add(product) Option.objects.create(name='option 1', price='42', group=option_group) Option.objects.create(name='option 2', price='84', group=option_group)
def create_fixtures(self): cart_modifiers_pool.USE_CACHE=False self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name = "Toto") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() self.client = Client() self.client.user = self.user self.client.save() self.country = Country.objects.create(name='CH') self.address = Address() self.address.client = self.client self.address.address = 'address' self.address.address2 = 'address2' self.address.zip_code = '1234' self.address.state = 'ZH' self.address.country = self.country self.address.is_billing = True self.address.is_shipping = True self.address.save() self.address2 = Address() self.address2.client = self.client self.address2.address = '2address' self.address2.address2 = '2address2' self.address2.zip_code = '21234' self.address2.state = '2ZH' self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save()
def setUp(self): self.product = Product() self.product.name = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.product2 = Product() self.product2.name = 'test2' self.product2.unit_price = Decimal('1.0') self.product2.save() self.product3 = Product() self.product3.name = 'test3' self.product3.unit_price = Decimal('1.0') self.product3.save() self.order = Order() self.order.order_subtotal = Decimal('10') self.order.order_total = Decimal('10') self.order.shipping_cost = Decimal('0') self.order.shipping_name = 'toto' self.order.shipping_address = 'address' self.order.shipping_address2 = 'address2' self.order.shipping_city = 'city' self.order.shipping_zip_code = 'zip' self.order.shipping_state = 'state' self.order.shipping_country = 'country' self.order.billing_name = 'toto' self.order.billing_address = 'address' self.order.billing_address2 = 'address2' self.order.billing_city = 'city' self.order.billing_zip_code = 'zip' self.order.billing_state = 'state' self.order.billing_country = 'country' self.order.save() self.orderitem1 = OrderItem() self.orderitem1.order = self.order self.orderitem1.product = self.product self.orderitem1.quantity = 5 # this will be the most bought self.orderitem1.save() self.orderitem2 = OrderItem() self.orderitem2.order = self.order self.orderitem2.product = self.product2 self.orderitem2.quantity = 1 # this will be the second most self.orderitem2.save()
def create_fixtures(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.ogroup = OptionGroup() self.ogroup.product = self.product self.ogroup.name = "Test group" self.ogroup.save() self.option = Option() self.option.group = self.ogroup self.option.name = "Awesome" self.option.price = self.AWESOME_OPTION_PRICE self.option.save() self.cart = Cart() self.cart.user = self.user self.cart.save() self.cartitem = CartItem() self.cartitem.cart = self.cart self.cartitem.quantity = 1 self.cartitem.product = self.product self.cartitem.save()
def setUp(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save()
def setUp(self): self.product1 = Product() self.product1.name = 'test1' self.product1.slug = 'test1' self.product1.short_description = 'test1' self.product1.long_description = 'test1' self.product1.unit_price = Decimal('1.0') self.product1.active = True self.product1.save() self.product2 = Product() self.product2.name = 'test2' self.product2.slug = 'test2' self.product2.short_description = 'test2' self.product2.long_description = 'test2' self.product2.unit_price = Decimal('1.0') self.product2.active = False self.product2.save()
def setUp(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.inactive_product = Product(name='InactiveProduct', slug='InactiveProduct', active=False) self.inactive_product.save() self.cart = Cart() self.cart.user = self.user self.cart.save()
def create_fixtures(self): self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.view = ProductDetailView(kwargs={'pk':self.product.id})
def setUp(self): cart_modifiers_pool.USE_CACHE = False user = User.objects.create(username="******", email="*****@*****.**") self.request = Mock() setattr(self.request, 'user', user) self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.inactive_product = Product(name='InactiveProduct', slug='InactiveProduct', active=False) self.inactive_product.save() self.cart = Cart() self.cart.user = user self.cart.save()
def setUp(self): self.product = Product() self.product.name = "test" self.product.short_description = "test" self.product.long_description = "test" self.product.unit_price = Decimal("1.0") self.product.active = True self.product.save() self.view = ProductDetailView(kwargs={"pk": self.product.pk})
def setUp(self): self.cat = Category() self.cat.name = 'Test Category' self.cat.save() self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.product.categories.add(self.cat)
def create_fixtures(self): self.category = Category() self.category.name = "test_category" self.category.save() self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.category = self.category self.product.save()
def setUp(self): self.product = Product() self.product.name = 'test' self.product.slug = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.product2 = Product() self.product2.name = 'test2' self.product2.slug = 'test2' self.product2.unit_price = Decimal('1.0') self.product2.save() self.product3 = Product() self.product3.name = 'test3' self.product3.slug = 'test3' self.product3.unit_price = Decimal('1.0') self.product3.save() self.order = Order() self.order.order_subtotal = Decimal('10') self.order.order_total = Decimal('10') self.order.shipping_cost = Decimal('0') self.order.shipping_address_text = 'shipping address example' self.order.billing_address_text = 'billing address example' self.order.save() self.orderitem1 = OrderItem() self.orderitem1.order = self.order self.orderitem1.product = self.product self.orderitem1.quantity = 5 # this will be the most bought self.orderitem1.save() self.orderitem2 = OrderItem() self.orderitem2.order = self.order self.orderitem2.product = self.product2 self.orderitem2.quantity = 1 # this will be the second most self.orderitem2.save()
class ProductStatisticsTestCase(TestCase): def setUp(self): self.product = Product() self.product.name = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.product2 = Product() self.product2.name = 'test2' self.product2.unit_price = Decimal('1.0') self.product2.save() self.product3 = Product() self.product3.name = 'test3' self.product3.unit_price = Decimal('1.0') self.product3.save() self.order = Order() self.order.order_subtotal = Decimal('10') self.order.order_total = Decimal('10') self.order.shipping_cost = Decimal('0') self.order.shipping_name = 'toto' self.order.shipping_address = 'address' self.order.shipping_address2 = 'address2' self.order.shipping_city = 'city' self.order.shipping_zip_code = 'zip' self.order.shipping_state = 'state' self.order.shipping_country = 'country' self.order.billing_name = 'toto' self.order.billing_address = 'address' self.order.billing_address2 = 'address2' self.order.billing_city = 'city' self.order.billing_zip_code = 'zip' self.order.billing_state = 'state' self.order.billing_country = 'country' self.order.save() self.orderitem1 = OrderItem() self.orderitem1.order = self.order self.orderitem1.product = self.product self.orderitem1.quantity = 5 # this will be the most bought self.orderitem1.save() self.orderitem2 = OrderItem() self.orderitem2.order = self.order self.orderitem2.product = self.product2 self.orderitem2.quantity = 1 # this will be the second most self.orderitem2.save() def test_top_selling_works(self): res = Product.statistics.top_selling_products(10) self.assertNotEqual(res, None) self.assertEqual(len(res), 2) self.assertTrue(self.product3 not in res)
def create_fixtures(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.ogroup = OptionGroup() self.ogroup.product = self.product self.ogroup.name = 'Test group' self.ogroup.save() self.option = Option() self.option.group = self.ogroup self.option.name = "Awesome" self.option.price = self.AWESOME_OPTION_PRICE self.option.save() self.cart = Cart() self.cart.user = self.user self.cart.save() self.cartitem = CartItem() self.cartitem.cart = self.cart self.cartitem.quantity = 1 self.cartitem.product = self.product self.cartitem.save()
class ProductDetailViewTestCase(TestCase): def setUp(self): self.product = Product() self.product.name = "test" self.product.short_description = "test" self.product.long_description = "test" self.product.unit_price = Decimal("1.0") self.product.active = True self.product.save() self.view = ProductDetailView(kwargs={"pk": self.product.pk}) def test_get_product_returns_correctly(self): setattr(self.view, "object", None) obj = self.view.get_object() inst = isinstance(obj, Product) self.assertEqual(inst, True) def test_get_templates_return_expected_values(self): self.view = ProductDetailView() setattr(self.view, "object", None) tmp = self.view.get_template_names() self.assertEqual(len(tmp), 1)
def setUp(self): cart_modifiers_pool.USE_CACHE = False user = User.objects.create(username="******", email="*****@*****.**") self.request = Mock() setattr(self.request, 'user', user) self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = user self.cart.save()
def setUp(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() # self.client.user = self.user # self.client.save() self.country = Country.objects.create(name="CH") self.address = Address() self.address.name = "Test Toto" self.address.address = "address" self.address.address2 = "address2" self.address.zip_code = "1234" self.address.state = "ZH" self.address.country = self.country self.address.is_billing = True self.address.is_shipping = True self.address.save() self.address2 = Address() self.address2.name = "Test Toto" self.address2.address = "2address" self.address2.address2 = "2address2" self.address2.zip_code = "21234" self.address2.state = "2ZH" self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save()
class ProductStatisticsTestCase(TestCase): def setUp(self): self.product = Product() self.product.name = 'test' self.product.slug = 'test' self.product.unit_price = Decimal('1.0') self.product.save() self.product2 = Product() self.product2.name = 'test2' self.product2.slug = 'test2' self.product2.unit_price = Decimal('1.0') self.product2.save() self.product3 = Product() self.product3.name = 'test3' self.product3.slug = 'test3' self.product3.unit_price = Decimal('1.0') self.product3.save() self.order = Order() self.order.order_subtotal = Decimal('10') self.order.order_total = Decimal('10') self.order.shipping_cost = Decimal('0') self.order.shipping_address_text = 'shipping address example' self.order.billing_address_text = 'billing address example' self.order.save() self.orderitem1 = OrderItem() self.orderitem1.order = self.order self.orderitem1.product = self.product self.orderitem1.quantity = 5 # this will be the most bought self.orderitem1.save() self.orderitem2 = OrderItem() self.orderitem2.order = self.order self.orderitem2.product = self.product2 self.orderitem2.quantity = 1 # this will be the second most self.orderitem2.save() def test_top_selling_works(self): res = Product.statistics.top_selling_products(10) self.assertNotEqual(res, None) self.assertEqual(len(res), 2) self.assertTrue(self.product3 not in res)
class ProductTestCase(TestCase): def create_fixtures(self): self.category = Category() self.category.name = "test_category" self.category.save() self.product = Product() self.product.name = 'test' self.product.short_description = 'test' self.product.long_description = 'test' self.product.unit_price = Decimal('1.0') self.product.category = self.category self.product.save() def test_01_unicode_returns_proper_stuff(self): self.create_fixtures() ret = self.product.__unicode__() self.assertEqual(ret, self.product.name) def test_02_specify_returns_self_when_not_a_subclass(self): self.create_fixtures() ret = self.product.get_specific() self.assertEqual(ret, self.product) def test_03_active_filter_returns_only_active_products(self): self.create_fixtures() ret1 = len(Product.objects.active()) # Set self.product to be active self.product.active = True self.product.save() ret2 = len(Product.objects.active()) self.assertNotEqual(ret1, ret2) self.assertEqual(ret1, 0) self.assertEqual(ret2, 1) def test_04_category_unicode_returns_name(self): self.create_fixtures() ret = self.category.__unicode__() self.assertEqual(ret, self.category.name) def test_05_category_get_products_works(self): self.create_fixtures() ret = self.category.get_products() self.assertEqual(len(ret),1) cat_product = ret[0] self.assertEqual(cat_product,self.product)
class OrderConversionTestCase(TestCase): PRODUCT_PRICE = Decimal('100') TEN_PERCENT = Decimal(10) / Decimal(100) def create_fixtures(self): cart_modifiers_pool.USE_CACHE=False self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name = "Toto") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() self.client = Client() self.client.user = self.user self.client.save() self.country = Country.objects.create(name='CH') self.address = Address() self.address.client = self.client self.address.address = 'address' self.address.address2 = 'address2' self.address.zip_code = '1234' self.address.state = 'ZH' self.address.country = self.country self.address.is_billing = True self.address.is_shipping = True self.address.save() self.address2 = Address() self.address2.client = self.client self.address2.address = '2address' self.address2.address2 = '2address2' self.address2.zip_code = '21234' self.address2.state = '2ZH' self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save() def test_01_create_order_from_simple_cart(self): ''' Let's make sure that all the info is copied over properly when using Order.objects.create_from_cart() ''' self.create_fixtures() self.cart.add_product(self.product) self.cart.update() self.cart.save() o = Order.objects.create_from_cart(self.cart) self.assertNotEqual(o, None) ois = OrderItem.objects.filter(order=o) cis = CartItem.objects.filter(cart=self.cart) self.assertEqual(len(ois), len(cis)) self.assertEqual(o.order_subtotal, self.cart.subtotal_price) self.assertEqual(o.order_total, self.cart.total_price) def test_02_create_order_from_taxed_cart(self): ''' This time assert that everything is consistent with a tax cart modifier ''' self.create_fixtures() MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentTaxModifier'] with SettingsOverride(SHOP_PRICE_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() o = Order.objects.create_from_cart(self.cart,) # Must not return None, obviously self.assertNotEqual(o, None) # Compare all the OrderItems to all CartItems (length) ois = OrderItem.objects.filter(order=o) cis = CartItem.objects.filter(cart=self.cart) self.assertEqual(len(ois), len(cis)) # Assert that there are as many extra_cart_price_fields than there # are extra order price fields e_cart_fields = self.cart.extra_price_fields e_order_fields = ExtraOrderPriceField.objects.filter(order=o) self.assertEqual(len(e_cart_fields), len(e_order_fields)) # Check that totals match self.assertEqual(o.order_subtotal, self.cart.subtotal_price) self.assertEqual(o.order_total, self.cart.total_price) def test_03_order_addresses_match_user_preferences(self): self.create_fixtures() self.cart.add_product(self.product) self.cart.update() self.cart.save() self.address.is_billing = False self.address.save() o = Order.objects.create_from_cart(self.cart) # Must not return None, obviously self.assertNotEqual(o, None) # Check that addresses are transfered properly self.assertEqual(o.shipping_name, "%s %s" % (self.user.first_name, self.user.last_name)) self.assertEqual(o.shipping_address, self.address.address) self.assertEqual(o.shipping_address2, self.address.address2) self.assertEqual(o.shipping_zip_code, self.address.zip_code) self.assertEqual(o.shipping_state, self.address.state) self.assertEqual(o.shipping_country, self.address.country.name) self.assertEqual(o.billing_name, "%s %s" % (self.user.first_name, self.user.last_name)) self.assertEqual(o.billing_address, self.address2.address) self.assertEqual(o.billing_address2, self.address2.address2) self.assertEqual(o.billing_zip_code, self.address2.zip_code) self.assertEqual(o.billing_state, self.address2.state) self.assertEqual(o.billing_country, self.address2.country.name) def test_04_order_saves_item_pk_as_a_string(self): ''' That's needed in case shipment or payment backends need to make fancy calculations on products (i.e. shipping based on weight/size...) ''' self.create_fixtures() self.cart.add_product(self.product) self.cart.update() self.cart.save() self.address.is_billing = False self.address.save() o = Order.objects.create_from_cart(self.cart) # Must not return None, obviously self.assertNotEqual(o, None) # take the first item from the order: oi = OrderItem.objects.filter(order=o)[0] self.assertEqual(oi.product_reference, str(self.product.id)) # Lookup works? prod = oi.product self.assertEqual(prod,self.product)
class CartTestCase(TestCase): PRODUCT_PRICE = Decimal('100') TEN_PERCENT = Decimal(10) / Decimal(100) def create_fixtures(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() def test_01_empty_cart_costs_0(self): self.create_fixtures() with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.update() self.assertEqual(self.cart.subtotal_price, Decimal('0.0')) self.assertEqual(self.cart.total_price, Decimal('0.0')) def test_02_one_object_no_modifiers(self): self.create_fixtures() with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.add_product(self.product) self.cart.save() self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE) def test_03_two_objects_no_modifier(self): self.create_fixtures() with SettingsOverride(SHOP_CART_MODIFIERS=[]): # We add two objects now :) self.cart.add_product(self.product, 2) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE * 2) self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE * 2) def test_04_one_object_simple_modifier(self): self.create_fixtures() MODIFIERS = [ 'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, (self.TEN_PERCENT * self.PRODUCT_PRICE) + self.PRODUCT_PRICE) def test_05_one_object_two_modifiers_no_rebate(self): self.create_fixtures() MODIFIERS = [ 'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier', 'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, (self.TEN_PERCENT * self.PRODUCT_PRICE) + self.PRODUCT_PRICE) def test_06_one_object_two_modifiers_with_rebate(self): self.create_fixtures() MODIFIERS = [ 'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier', 'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): # We add 6 objects now :) self.cart.add_product(self.product, 6) self.cart.update() self.cart.save() #subtotal is 600 - 10% = 540 sub_should_be = (6 * self.PRODUCT_PRICE) - (self.TEN_PERCENT * (6 * self.PRODUCT_PRICE)) total_should_be = sub_should_be + (self.TEN_PERCENT * sub_should_be) self.assertEqual(self.cart.subtotal_price, sub_should_be) self.assertEqual(self.cart.total_price, total_should_be) def test_07_add_same_object_twice(self): self.create_fixtures() with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.add_product(self.product) self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(len(self.cart.items.all()), 1) self.assertEqual(self.cart.items.all()[0].quantity, 2) def test_08_add_product_updates_last_updated(self): self.create_fixtures() with SettingsOverride(SHOP_CART_MODIFIERS=[]): initial = self.cart.last_updated self.cart.add_product(self.product) self.assertNotEqual(initial, self.cart.last_updated) def test_09_cart_item_should_use_specific_type_to_get_price(self): self.create_fixtures() base_product = BaseProduct.objects.create( unit_price=self.PRODUCT_PRICE) variation = base_product.productvariation_set.create( name="Variation 1") with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.add_product(variation) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
class ProductOptionsTestCase(TestCase): PRODUCT_PRICE = Decimal('100') AWESOME_OPTION_PRICE = Decimal('50') # The price of awesome? TEN_PERCENT = Decimal(10) / Decimal(100) def create_fixtures(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.ogroup = OptionGroup() self.ogroup.product = self.product self.ogroup.name = 'Test group' self.ogroup.save() self.option = Option() self.option.group = self.ogroup self.option.name = "Awesome" self.option.price = self.AWESOME_OPTION_PRICE self.option.save() self.cart = Cart() self.cart.user = self.user self.cart.save() self.cartitem = CartItem() self.cartitem.cart = self.cart self.cartitem.quantity = 1 self.cartitem.product = self.product self.cartitem.save() def test_01_no_options_yield_normal_price(self): self.create_fixtures() MODIFIERS = [ 'shop.cart.modifiers.product_options.ProductOptionsModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): #No need to add a product there is already on in the fixtures self.cart.update() self.cart.save() sub_should_be = 1 * self.PRODUCT_PRICE total_should_be = sub_should_be self.assertEqual(self.cart.subtotal_price, sub_should_be) self.assertEqual(self.cart.total_price, total_should_be) def test_02_awesome_option_increases_price_by_its_value(self): self.create_fixtures() c_item_option = CartItemOption() c_item_option.option = self.option c_item_option.cartitem = self.cartitem c_item_option.save() MODIFIERS = [ 'shop.cart.modifiers.product_options.ProductOptionsModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.update() self.cart.save() sub_should_be = (1 * self.PRODUCT_PRICE) + ( 1 * self.AWESOME_OPTION_PRICE) total_should_be = sub_should_be self.assertEqual(self.cart.subtotal_price, sub_should_be) self.assertEqual(self.cart.total_price, total_should_be)
def setUp(self): self.product = Product() self.product.name = 'test' self.product.unit_price = Decimal('1.0') self.product.save()
class CartTestCase(TestCase): PRODUCT_PRICE = Decimal('100') TEN_PERCENT = Decimal(10) / Decimal(100) def setUp(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() def test_empty_cart_costs_0_quantity_0(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.update() self.assertEqual(self.cart.subtotal_price, Decimal('0.0')) self.assertEqual(self.cart.total_price, Decimal('0.0')) self.assertEqual(self.cart.total_quantity, 0) def test_one_object_no_modifiers(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.add_product(self.product) self.cart.save() self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_quantity, 1) def test_two_objects_no_modifier(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): # We add two objects now :) self.cart.add_product(self.product, 2) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE * 2) self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE * 2) self.assertEqual(self.cart.total_quantity, 2) def test_one_object_simple_modifier(self): MODIFIERS = [ 'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, (self.TEN_PERCENT * self.PRODUCT_PRICE) + self.PRODUCT_PRICE) def test_one_object_two_modifiers_no_rebate(self): MODIFIERS = [ 'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier', 'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, (self.TEN_PERCENT * self.PRODUCT_PRICE) + self.PRODUCT_PRICE) def test_one_object_two_modifiers_with_rebate(self): MODIFIERS = [ 'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier', 'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): # We add 6 objects now :) self.cart.add_product(self.product, 6) self.cart.update() self.cart.save() #subtotal is 600 - 10% = 540 sub_should_be = (6 * self.PRODUCT_PRICE) - (self.TEN_PERCENT * (6 * self.PRODUCT_PRICE)) total_should_be = sub_should_be + (self.TEN_PERCENT * sub_should_be) self.assertEqual(self.cart.subtotal_price, sub_should_be) self.assertEqual(self.cart.total_price, total_should_be) def test_add_same_object_twice(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.assertEqual(self.cart.total_quantity, 0) self.cart.add_product(self.product) self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(len(self.cart.items.all()), 1) self.assertEqual(self.cart.items.all()[0].quantity, 2) self.assertEqual(self.cart.total_quantity, 2) def test_add_same_object_twice_no_merge(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.assertEqual(self.cart.total_quantity, 0) self.cart.add_product(self.product, merge=False) self.cart.add_product(self.product, merge=False) self.cart.update() self.cart.save() self.assertEqual(len(self.cart.items.all()), 2) self.assertEqual(self.cart.items.all()[0].quantity, 1) self.assertEqual(self.cart.items.all()[1].quantity, 1) def test_add_product_updates_last_updated(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): initial = self.cart.last_updated self.cart.add_product(self.product) self.assertNotEqual(initial, self.cart.last_updated) def test_cart_item_should_use_specific_type_to_get_price(self): if SKIP_BASEPRODUCT_TEST: return base_product = BaseProduct.objects.create( unit_price=self.PRODUCT_PRICE) variation = base_product.productvariation_set.create( name="Variation 1") with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.add_product(variation) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) def test_update_quantity_deletes(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.assertEqual(self.cart.total_quantity, 0) self.cart.add_product(self.product) self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(len(self.cart.items.all()), 1) self.cart.update_quantity(self.cart.items.all()[0].pk, 0) self.assertEqual(len(self.cart.items.all()), 0) def test_custom_queryset_is_used_when_passed_to_method(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): # first we add any product self.cart.add_product(self.product) # now we try to select a CartItem that does not exist yet. This # could be an item with a yet unused combination of variations. qs = CartItem.objects.filter(cart=self.cart, product=self.product, quantity=42) # although we add the same product and have merge=True, there # should be a new CartItem being created now. self.cart.add_product(self.product, queryset=qs) self.assertEqual(len(self.cart.items.all()), 2) def test_get_updated_cart_items(self): self.cart.add_product(self.product) self.cart.update() cached_cart_items = self.cart.get_updated_cart_items() cart_items = CartItem.objects.filter(cart=self.cart) for item in cart_items: item.update({}) self.assertEqual(len(cached_cart_items), len(cart_items)) self.assertEqual(cached_cart_items[0].line_total, cart_items[0].line_total) def test_get_updated_cart_items_without_updating_cart(self): with self.assertRaises(AssertionError): self.cart.get_updated_cart_items()
class CartModifiersTestCase(TestCase): PRODUCT_PRICE = Decimal('100') def setUp(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() def test_01_cart_modifier_pool_loads_modifiers_properly(self): """ Let's add a price modifier to the settings, then load it, then call a method on it to make sure it works. """ MODIFIERS = [ 'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): thelist = modifiers_pool.cart_modifiers_pool.get_modifiers_list() self.assertEqual(len(thelist), 1) instance = thelist[0] self.assertTrue(hasattr(instance, 'TAX_PERCENTAGE')) def test_02_cart_modifiers_pool_handles_wrong_path(self): MODIFIERS = ['shop2.cart.modifiers.tax_modifiers'] # wrong path with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): raised = False try: modifiers_pool.cart_modifiers_pool.get_modifiers_list() except: raised = True self.assertTrue(raised) def test_03_cart_modifiers_pool_handles_wrong_module(self): MODIFIERS = ['shop.cart.modifiers.tax_modifiers.IdontExist'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): raised = False try: modifiers_pool.cart_modifiers_pool.get_modifiers_list() except ImproperlyConfigured: raised = True self.assertTrue(raised) def test_03_cart_modifiers_pool_handles_not_a_path(self): MODIFIERS = ['shop'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): raised = False try: modifiers_pool.cart_modifiers_pool.get_modifiers_list() except ImproperlyConfigured: raised = True self.assertTrue(raised) def test_state_is_passed_around_properly(self): MODIFIERS = ['shop.tests.cart_modifiers.CarModifierUsingStatePassing'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.save() self.cart.update() # This should raise if the state isn't passed
class CartTestCase(TestCase): PRODUCT_PRICE = Decimal('100') TEN_PERCENT = Decimal(10) / Decimal(100) def create_fixtures(self): cart_modifiers_pool.USE_CACHE=False self.user = User.objects.create(username="******", email="*****@*****.**") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() def test_01_empty_cart_costs_0(self): self.create_fixtures() with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.update() self.assertEqual(self.cart.subtotal_price, Decimal('0.0')) self.assertEqual(self.cart.total_price, Decimal('0.0')) def test_02_one_object_no_modifiers(self): self.create_fixtures() with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.add_product(self.product) self.cart.save() self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE) def test_03_two_objects_no_modifier(self): self.create_fixtures() with SettingsOverride(SHOP_CART_MODIFIERS=[]): # We add two objects now :) self.cart.add_product(self.product,2) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE*2) self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE*2) def test_04_one_object_simple_modifier(self): self.create_fixtures() MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentTaxModifier'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE) def test_05_one_object_two_modifiers_no_rebate(self): self.create_fixtures() MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentTaxModifier', 'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE) def test_06_one_object_two_modifiers_with_rebate(self): self.create_fixtures() MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentTaxModifier', 'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): # We add 6 objects now :) self.cart.add_product(self.product,6) self.cart.update() self.cart.save() #subtotal is 600 - 10% = 540 sub_should_be = (6*self.PRODUCT_PRICE) - (self.TEN_PERCENT*(6*self.PRODUCT_PRICE)) total_should_be = sub_should_be + (self.TEN_PERCENT*sub_should_be) self.assertEqual(self.cart.subtotal_price, sub_should_be) self.assertEqual(self.cart.total_price, total_should_be) def test_07_add_same_object_twice(self): self.create_fixtures() with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.add_product(self.product) self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(len(self.cart.items.all()),1) self.assertEqual(self.cart.items.all()[0].quantity, 2) def test_08_add_product_updates_last_updated(self): self.create_fixtures() initial = self.cart.last_updated self.cart.add_product(self.product) self.assertNotEqual(initial, self.cart.last_updated)
class OrderConversionTestCase(TestCase): PRODUCT_PRICE = Decimal('100') TEN_PERCENT = Decimal(10) / Decimal(100) def setUp(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() #self.client.user = self.user #self.client.save() self.country = Country.objects.create(name='CH') self.address = Address() self.address.name = 'Test Toto' self.address.address = 'address' self.address.address2 = 'address2' self.address.zip_code = '1234' self.address.state = 'ZH' self.address.country = self.country self.address.is_billing = True self.address.is_shipping = True self.address.save() self.address2 = Address() self.address2.name = 'Test Toto' self.address2.address = '2address' self.address2.address2 = '2address2' self.address2.zip_code = '21234' self.address2.state = '2ZH' self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save() def test_create_order_from_simple_cart(self): """ Let's make sure that all the info is copied over properly when using Order.objects.create_from_cart() """ self.cart.add_product(self.product) self.cart.update() self.cart.save() o = Order.objects.create_from_cart(self.cart) self.assertNotEqual(o, None) ois = OrderItem.objects.filter(order=o) cis = CartItem.objects.filter(cart=self.cart) self.assertEqual(len(ois), len(cis)) self.assertEqual(ois[0].line_subtotal, self.PRODUCT_PRICE) self.assertEqual(ois[0].line_total, self.PRODUCT_PRICE) self.assertEqual(o.order_subtotal, self.cart.subtotal_price) self.assertEqual(o.order_total, self.cart.total_price) def test_create_order_order_items_proper_product_name(self): baseproduct = BaseProduct.objects.create(name="Table", unit_price=self.PRODUCT_PRICE) variation = ProductVariation.objects.create(baseproduct=baseproduct, name="white") self.cart.add_product(variation) self.cart.update() self.cart.save() o = Order.objects.create_from_cart(self.cart) ois = OrderItem.objects.filter(order=o) self.assertEqual(ois[0].product_name, "Table - white") def test_create_order_from_taxed_cart(self): """ This time assert that everything is consistent with a tax cart modifier """ MODIFIERS = [ 'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier' ] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() o = Order.objects.create_from_cart(self.cart, ) # Must not return None, obviously self.assertNotEqual(o, None) # Compare all the OrderItems to all CartItems (length) ois = OrderItem.objects.filter(order=o) cis = CartItem.objects.filter(cart=self.cart) self.assertEqual(len(ois), len(cis)) self.assertEqual(ois[0].line_subtotal, self.PRODUCT_PRICE) self.assertEqual(ois[0].line_total, self.PRODUCT_PRICE) # Assert that there are as many extra_cart_price_fields than there # are extra order price fields e_cart_fields = self.cart.extra_price_fields e_order_fields = ExtraOrderPriceField.objects.filter(order=o) self.assertEqual(len(e_cart_fields), len(e_order_fields)) # Check that totals match self.assertEqual(o.order_subtotal, self.cart.subtotal_price) self.assertEqual(o.order_total, self.cart.total_price) self.assertNotEqual(o.order_subtotal, Decimal("0")) self.assertNotEqual(o.order_total, Decimal("0")) def test_order_addresses_match_user_preferences(self): self.cart.add_product(self.product) self.cart.update() self.cart.save() self.address.is_billing = False self.address.save() o = Order.objects.create_from_cart(self.cart) # Must not return None, obviously self.assertNotEqual(o, None) o.set_shipping_address(self.address) o.set_billing_address(self.address2) self.assertEqual(o.shipping_address_text, self.address.as_text()) self.assertEqual(o.billing_address_text, self.address2.as_text()) def test_create_order_respects_product_specific_get_price_method(self): if SKIP_BASEPRODUCT_TEST: return baseproduct = BaseProduct.objects.create(unit_price=Decimal('10.0')) product = ProductVariation.objects.create(baseproduct=baseproduct) self.cart.add_product(product) self.cart.update() self.cart.save() o = Order.objects.create_from_cart(self.cart) oi = OrderItem.objects.filter(order=o)[0] self.assertEqual(oi.unit_price, baseproduct.unit_price) def test_create_from_cart_respects_get_product_reference(self): self.cart.add_product(self.product) self.cart.update() self.cart.save() o = Order.objects.create_from_cart(self.cart) oi = OrderItem.objects.filter(order=o)[0] self.assertEqual(oi.product_reference, self.product.get_product_reference())
class CartModifiersTestCase(TestCase): PRODUCT_PRICE = Decimal('100') def setUp(self): cart_modifiers_pool.USE_CACHE = False self.user = User.objects.create(username="******", email="*****@*****.**") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() def test_01_cart_modifier_pool_loads_modifiers_properly(self): """ Let's add a price modifier to the settings, then load it, then call a method on it to make sure it works. """ MODIFIERS = [ 'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): thelist = modifiers_pool.cart_modifiers_pool.get_modifiers_list() self.assertEqual(len(thelist), 1) instance = thelist[0] self.assertTrue(hasattr(instance, 'TAX_PERCENTAGE')) def test_02_cart_modifiers_pool_handles_wrong_path(self): MODIFIERS = ['shop2.cart.modifiers.tax_modifiers'] # wrong path with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): raised = False try: modifiers_pool.cart_modifiers_pool.get_modifiers_list() except: raised = True self.assertTrue(raised) def test_03_cart_modifiers_pool_handles_wrong_module(self): MODIFIERS = ['shop.cart.modifiers.tax_modifiers.IdontExist'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): raised = False try: modifiers_pool.cart_modifiers_pool.get_modifiers_list() except ImproperlyConfigured: raised = True self.assertTrue(raised) def test_03_cart_modifiers_pool_handles_not_a_path(self): MODIFIERS = ['shop'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): raised = False try: modifiers_pool.cart_modifiers_pool.get_modifiers_list() except ImproperlyConfigured: raised = True self.assertTrue(raised) def test_state_is_passed_around_properly(self): MODIFIERS = ['shop.tests.cart_modifiers.CarModifierUsingStatePassing'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.save() self.cart.update() # This should raise if the state isn't passed
class CartTestCase(TestCase): PRODUCT_PRICE = Decimal('100') TEN_PERCENT = Decimal(10) / Decimal(100) def setUp(self): cart_modifiers_pool.USE_CACHE=False self.user = User.objects.create(username="******", email="*****@*****.**") self.product = Product() self.product.name = "TestPrduct" self.product.slug = "TestPrduct" self.product.short_description = "TestPrduct" self.product.long_description = "TestPrduct" self.product.active = True self.product.unit_price = self.PRODUCT_PRICE self.product.save() self.cart = Cart() self.cart.user = self.user self.cart.save() def test_empty_cart_costs_0_quantity_0(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.update() self.assertEqual(self.cart.subtotal_price, Decimal('0.0')) self.assertEqual(self.cart.total_price, Decimal('0.0')) self.assertEqual(self.cart.total_quantity, 0) def test_one_object_no_modifiers(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.add_product(self.product) self.cart.save() self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_quantity, 1) def test_two_objects_no_modifier(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): # We add two objects now :) self.cart.add_product(self.product,2) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE*2) self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE*2) self.assertEqual(self.cart.total_quantity, 2) def test_one_object_simple_modifier(self): MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE) def test_one_object_two_modifiers_no_rebate(self): MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier', 'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE) def test_one_object_two_modifiers_with_rebate(self): MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier', 'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier'] with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS): # We add 6 objects now :) self.cart.add_product(self.product,6) self.cart.update() self.cart.save() #subtotal is 600 - 10% = 540 sub_should_be = (6*self.PRODUCT_PRICE) - (self.TEN_PERCENT*(6*self.PRODUCT_PRICE)) total_should_be = sub_should_be + (self.TEN_PERCENT*sub_should_be) self.assertEqual(self.cart.subtotal_price, sub_should_be) self.assertEqual(self.cart.total_price, total_should_be) def test_add_same_object_twice(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.assertEqual(self.cart.total_quantity, 0) self.cart.add_product(self.product) self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(len(self.cart.items.all()),1) self.assertEqual(self.cart.items.all()[0].quantity, 2) self.assertEqual(self.cart.total_quantity, 2) def test_add_same_object_twice_no_merge(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.assertEqual(self.cart.total_quantity, 0) self.cart.add_product(self.product, merge=False) self.cart.add_product(self.product, merge=False) self.cart.update() self.cart.save() self.assertEqual(len(self.cart.items.all()),2) self.assertEqual(self.cart.items.all()[0].quantity, 1) self.assertEqual(self.cart.items.all()[1].quantity, 1) def test_add_product_updates_last_updated(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): initial = self.cart.last_updated self.cart.add_product(self.product) self.assertNotEqual(initial, self.cart.last_updated) def test_cart_item_should_use_specific_type_to_get_price(self): base_product = BaseProduct.objects.create(unit_price=self.PRODUCT_PRICE) variation = base_product.productvariation_set.create( name="Variation 1" ) with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.cart.add_product(variation) self.cart.update() self.cart.save() self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE) def test_update_quantity_deletes(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): self.assertEqual(self.cart.total_quantity, 0) self.cart.add_product(self.product) self.cart.add_product(self.product) self.cart.update() self.cart.save() self.assertEqual(len(self.cart.items.all()),1) self.cart.update_quantity(self.cart.items.all()[0].id, 0) self.assertEqual(len(self.cart.items.all()),0) def test_custom_queryset_is_used_when_passed_to_method(self): with SettingsOverride(SHOP_CART_MODIFIERS=[]): # first we add any product self.cart.add_product(self.product) # now we try to select a CartItem that does not exist yet. This # could be an item with a yet unused combination of variations. qs = CartItem.objects.filter(cart=self.cart, product=self.product, quantity=42) # although we add the same product and have merge=True, there should # be a new CartItem being created now. self.cart.add_product(self.product, queryset=qs) self.assertEqual(len(self.cart.items.all()),2)