def test_stored_basket_detail_view(rf, regular_user, admin_user): shop = factories.get_default_shop() customer = get_person_contact(regular_user) cart = _create_cart_with_products(rf, shop, regular_user, customer, customer, 2) assert cart assert cart.product_count == 2 stored_basket = StoredBasket.objects.first() assert stored_basket and stored_basket.class_spec view = CartDetailView.as_view() request = apply_request_middleware(rf.get("/"), user=admin_user, shop=shop) set_shop(request, shop) response = view(request, pk=stored_basket.pk) if hasattr(response, "render"): response.render() assert response.status_code == 200 stored_basket.class_spec = "" stored_basket.save() view = CartDetailView.as_view() request = apply_request_middleware(rf.get("/"), user=admin_user, shop=shop) set_shop(request, shop) response = view(request, pk=stored_basket.pk) if hasattr(response, "render"): response.render() assert response.status_code == 200
def _test_happy_hours_delete_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) happy_hour_name = "The Hour %s" % index happy_hour = HappyHour.objects.create(name=happy_hour_name, shop=shop) HappyHour.objects.create(name="Extra Hour %s" % index, shop=shop) assert HappyHour.objects.filter(name=happy_hour_name).exists() view_func = HappyHourDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request, pk=happy_hour.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 assert not HappyHour.objects.filter(name=happy_hour_name).exists() # Make sure that this staff can't remove other people discounts other_exceptions = HappyHour.objects.exclude(shop=shop) exception_count = other_exceptions.count() for happy_hour in other_exceptions: view_func = HappyHourDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) with pytest.raises(Http404): response = view_func(request, pk=happy_hour.pk) if hasattr(response, "render"): response.render() assert exception_count == HappyHour.objects.exclude(shop=shop).count()
def test_admin_script_list(rf, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop1 = factories.get_shop(identifier="shop-1") shop2 = factories.get_shop(identifier="shop-2") shop1.staff_members.add(admin_user) shop2.staff_members.add(admin_user) script_shop1 = Script.objects.create(shop=shop1, event_identifier="order_received", name="SHOP 1", enabled=True) script_shop2 = Script.objects.create(shop=shop2, event_identifier="order_received", name="SHOP 2", enabled=True) view = ScriptEditView.as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) set_shop(request, shop2) with pytest.raises(Http404): response = view(request, pk=script_shop1.id) response = view(request, pk=script_shop2.id) assert response.status_code == 200
def test_happy_hours_admin_edit_view_over_midnight(rf, staff_user, admin_user): shop = factories.get_default_shop() shop.staff_members.add(staff_user) factories.get_shop(identifier="shop2", enabled=True) assert Shop.objects.count() == 2 # Staff user gets shop automatically from_hour = datetime.time(hour=21, minute=0) to_hour = datetime.time(hour=3, minute=0) data = { "name": "Happiest Hour 2pm", "weekdays": [1], # Tue "from_hour": from_hour, "to_hour": to_hour } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = HappyHourEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 happy_hour = HappyHour.objects.first() assert happy_hour is not None assert happy_hour.shops.first() == shop assert happy_hour.time_ranges.count() == 2 # Since happy hour starts and ends on different day assert happy_hour.time_ranges.filter(weekday=1).exists() assert happy_hour.time_ranges.filter(weekday=1, from_hour=from_hour, to_hour=datetime.time(23, 59)).exists() assert happy_hour.time_ranges.filter(weekday=2, from_hour=datetime.time(0), to_hour=to_hour).exists() _assert_view_get(rf, happy_hour, shop, staff_user) # Viewing the edit should also still work
def _test_exception_list_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) exception = AvailabilityException.objects.create( name="Exception %s" % index, start_datetime=now(), end_datetime=now() ) exception.shops.add(shop) view_func = AvailabilityExceptionListView.as_view() request = apply_request_middleware( rf.get("/", {"jq": json.dumps({"perPage": 100, "page": 1})}), user=staff_user, shop=shop ) set_shop(request, shop) response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 200 view_instance = AvailabilityExceptionListView() view_instance.request = request assert request.shop == shop assert view_instance.get_queryset().count() == 1 data = json.loads(view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 1
def _test_happy_hours_list_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) happy_hour = HappyHour.objects.create(name="After Work %s" % index) happy_hour.shops = [shop] view_func = HappyHourListView.as_view() request = apply_request_middleware( rf.get("/", { "jq": json.dumps({"perPage": 100, "page": 1}) }), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 200 view_instance = HappyHourListView() view_instance.request = request assert request.shop == shop assert view_instance.get_queryset().count() == 1 data = json.loads(view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 1
def _test_happy_hours_delete_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) happy_hour_name = "The Hour %s" % index happy_hour = HappyHour.objects.create(name=happy_hour_name) happy_hour.shops = [shop] extra_happy_hour= HappyHour.objects.create(name="Extra Hour %s" % index) extra_happy_hour.shops = [shop] assert HappyHour.objects.filter(name=happy_hour_name).exists() view_func = HappyHourDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request, pk=happy_hour.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 assert not HappyHour.objects.filter(name=happy_hour_name).exists() # Make sure that this staff can't remove other people discounts other_exceptions = HappyHour.objects.exclude(shops=shop) exception_count = other_exceptions.count() for coupon in other_exceptions: view_func = HappyHourDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) with pytest.raises(Http404): response = view_func(request, pk=coupon.pk) if hasattr(response, "render"): response.render() assert exception_count == HappyHour.objects.exclude(shops=shop).count()
def _test_coupon_code_list_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) coupon_code = CouponCode.objects.create(code="%s" % index) coupon_code.shops.add(shop) view_func = CouponCodeListView.as_view() request = apply_request_middleware(rf.get( "/", {"jq": json.dumps({ "perPage": 100, "page": 1 })}), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 200 view_instance = CouponCodeListView() view_instance.request = request assert request.shop == shop assert view_instance.get_queryset().count() == 1 data = json.loads(view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 1 coupon_code_data = [ item for item in data["items"] if item["_id"] == coupon_code.pk ][0] assert coupon_code_data["usages"] == 0
def _test_coupon_code_delete_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) code = "code-%s" % index coupon = CouponCode.objects.create(code=code) coupon.shops.add(shop) extra_coupon = CouponCode.objects.create(code="extra-coupon-%s" % index) extra_coupon.shops.add(shop) assert CouponCode.objects.filter(code=code).exists() view_func = CouponCodeDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request, pk=coupon.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 assert not CouponCode.objects.filter(code=code).exists() # Make sure that this staff can't remove other people discounts other_coupons = CouponCode.objects.exclude(shops=shop) coupon_count = other_coupons.count() for coupon in other_coupons: view_func = CouponCodeDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) with pytest.raises(Http404): response = view_func(request, pk=coupon.pk) if hasattr(response, "render"): response.render() assert coupon_count == CouponCode.objects.exclude(shops=shop).count()
def _test_exception_delete_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) exception_name = "Exception %s" % index exception = AvailabilityException.objects.create( name=exception_name, start_datetime=now(), end_datetime=now()) exception.shops = [shop] extra_exception = AvailabilityException.objects.create( name="Extra Exception %s" % index, start_datetime=now(), end_datetime=now()) extra_exception.shops = [shop] assert AvailabilityException.objects.filter(name=exception_name).exists() view_func = AvailabilityExceptionDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request, pk=exception.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 assert not AvailabilityException.objects.filter(name=exception_name).exists() # Make sure that this staff can't remove other people discounts other_exceptions = AvailabilityException.objects.exclude(shops=shop) exception_count = other_exceptions.count() for coupon in other_exceptions: view_func = AvailabilityExceptionDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) with pytest.raises(Http404): response = view_func(request, pk=coupon.pk) if hasattr(response, "render"): response.render() assert exception_count == AvailabilityException.objects.exclude(shops=shop).count()
def _test_discount_delete_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) discount_identifier = "discount%s" % index discount = Discount.objects.create(identifier=discount_identifier) discount.shops = [shop] extra_discount = Discount.objects.create(identifier="extra_discount%s" % index) extra_discount.shops = [shop] assert Discount.objects.filter(identifier=discount_identifier).exists() view_func = DiscountDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request, pk=discount.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 assert not Discount.objects.filter(identifier=discount_identifier).exists() # Make sure that this staff can't remove other people discounts other_discounts = Discount.objects.exclude(shops=shop) discount_count = other_discounts.count() for discount in other_discounts: view_func = DiscountDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) with pytest.raises(Http404): response = view_func(request, pk=discount.pk) if hasattr(response, "render"): response.render() assert discount_count == Discount.objects.exclude(shops=shop).count()
def _test_exception_delete_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) exception_name = "Exception %s" % index exception = AvailabilityException.objects.create(name=exception_name, start_datetime=now(), end_datetime=now()) exception.shops.add(shop) extra_exception = AvailabilityException.objects.create( name="Extra Exception %s" % index, start_datetime=now(), end_datetime=now() ) extra_exception.shops.add(shop) assert AvailabilityException.objects.filter(name=exception_name).exists() view_func = AvailabilityExceptionDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request, pk=exception.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 assert not AvailabilityException.objects.filter(name=exception_name).exists() # Make sure that this staff can't remove other people discounts other_exceptions = AvailabilityException.objects.exclude(shops=shop) exception_count = other_exceptions.count() for coupon in other_exceptions: view_func = AvailabilityExceptionDeleteView.as_view() request = apply_request_middleware(rf.post("/"), user=staff_user, shop=shop) set_shop(request, shop) with pytest.raises(Http404): response = view_func(request, pk=coupon.pk) if hasattr(response, "render"): response.render() assert exception_count == AvailabilityException.objects.exclude(shops=shop).count()
def _test_happy_hours_list_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) happy_hour = HappyHour.objects.create(name="After Work %s" % index) happy_hour.shops = [shop] view_func = HappyHourListView.as_view() request = apply_request_middleware(rf.get( "/", {"jq": json.dumps({ "perPage": 100, "page": 1 })}), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 200 view_instance = HappyHourListView() view_instance.request = request assert request.shop == shop assert view_instance.get_queryset().count() == 1 data = json.loads(view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 1
def test_stored_basket_list_view(rf, regular_user, admin_user, prices_include_taxes): shop = factories.get_shop(prices_include_tax=prices_include_taxes) customer = get_person_contact(regular_user) cart1 = _create_cart_with_products(rf, shop, regular_user, customer, customer, 2) assert cart1 assert cart1.product_count == 2 assert cart1.taxful_total_price cart2 = _create_cart_with_products(rf, shop, regular_user, customer, customer, 0) assert cart2 assert cart2.product_count == 0 assert cart2.total_price == cart2.shop.create_price(0) # Normal HTMLResponse view = CartListView.as_view() request = apply_request_middleware(rf.get("/"), user=admin_user, shop=shop) set_shop(request, shop) response = view(request) if hasattr(response, "render"): response.render() assert response.status_code == 200 # Fetching data and expecting JSONResponse view = CartListView.as_view() request = apply_request_middleware(rf.get("/", { "jq": json.dumps({"perPage": 100, "page": 1}) }), user=admin_user, shop=shop) set_shop(request, shop) response = view(request) assert 200 <= response.status_code < 300 data = json.loads(response.content.decode("utf-8")) assert len(data["items"]) == 2
def _assert_view_get(rf, instance, shop, user, raises_404=False): request = apply_request_middleware(rf.get("/"), user=user, shop=shop) set_shop(request, shop) view_func = HappyHourEditView.as_view() if raises_404: with pytest.raises(Http404): view_func(request, pk=instance.pk) else: response = view_func(request, pk=instance.pk) assert response.status_code == 200
def _assert_view_get(rf, instance, shop, user, raises_404=False): request = apply_request_middleware(rf.get("/"), user=user, shop=shop) set_shop(request, shop) view_func = HappyHourEditView.as_view() if raises_404: with pytest.raises(Http404): view_func(request, pk=instance.pk) else: response = view_func(request, pk=instance.pk) assert response.status_code == 200
def test_manufacturer_admin_multishop_shop(rf, staff_user, admin_user, superuser): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop1 = factories.get_shop(identifier="shop1", enabled=True) shop2 = factories.get_shop(identifier="shop2", enabled=True) shop1.staff_members.add(staff_user) shop2.staff_members.add(staff_user) assert Manufacturer.objects.count() == 0 user = admin_user if superuser else staff_user request = apply_request_middleware(rf.post("/", data=dict(name="Manuf shop2")), user=user, shop=shop2) set_shop(request, shop2) view_func = ManufacturerEditView.as_view() response = view_func(request) assert response.status_code == 302 if superuser: assert Manufacturer.objects.first().shops.count() == 0 else: assert Manufacturer.objects.first().shops.first() == shop2 for view_class in (ManufacturerEditView, ManufacturerListView): view_instance = view_class() view_instance.request= request assert view_instance.get_queryset().count() == 1 if superuser: assert view_instance.get_queryset().first().shops.count() == 0 else: assert view_instance.get_queryset().first().shops.count() == 1 assert view_instance.get_queryset().first().shops.first() == shop2 request = apply_request_middleware(rf.post("/", data=dict(name="Manuf shop1")), user=user, shop=shop1) set_shop(request, shop1) view_func = ManufacturerEditView.as_view() response = view_func(request) assert response.status_code == 302 if superuser: assert Manufacturer.objects.last().shops.count() == 0 else: assert Manufacturer.objects.last().shops.first() == shop1 for view_class in (ManufacturerEditView, ManufacturerListView): view_instance = view_class() view_instance.request= request assert view_instance.get_queryset().count() == (2 if superuser else 1) if superuser: assert view_instance.get_queryset().first().shops.count() == 0 assert view_instance.get_queryset().last().shops.count() == 0 else: assert view_instance.get_queryset().first().shops.count() == 1 assert view_instance.get_queryset().first().shops.first() == shop1
def test_happy_hours_admin_edit_view(rf, staff_user, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop = factories.get_default_shop() shop.staff_members.add(staff_user) factories.get_shop(identifier="shop2", enabled=True) assert Shop.objects.count() == 2 # Staff user gets shop automatically data = { "name": "Happiest Hour 2pm", "weekdays": [6], # Sun "from_hour": datetime.time(hour=14, minute=0), "to_hour": datetime.time(hour=14, minute=0) } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = HappyHourEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 happy_hour1 = HappyHour.objects.first() assert happy_hour1 is not None assert happy_hour1.shops.first() == shop assert happy_hour1.time_ranges.count( ) == 1 # Since happy hour starts and ends on same day # Test with superuser and with different shop shop2 = factories.get_shop(enabled=True) request = apply_request_middleware(rf.post("/", data=data), user=admin_user, shop=shop2) set_shop(request, shop2) view_func = HappyHourEditView.as_view() response = view_func(request) assert response.status_code == 302 assert HappyHour.objects.count() == 2 happy_hour2 = HappyHour.objects.exclude(id=happy_hour1.pk).first() assert happy_hour1 != happy_hour2 assert happy_hour2.shops.count() == 1 assert happy_hour2.shops.filter(id=shop2.pk).first() # Staff user can only view coupon codes since that has the right shop _assert_view_get(rf, happy_hour1, shop, staff_user) _assert_view_get(rf, happy_hour2, shop, staff_user, True) # Superuser can see both if needed, but only when right shop is active _assert_view_get(rf, happy_hour1, shop, admin_user) _assert_view_get(rf, happy_hour2, shop, admin_user, True) _assert_view_get(rf, happy_hour2, shop2, admin_user)
def test_manufacturer_admin_multishop_shop(rf, staff_user, admin_user, superuser): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop1 = factories.get_shop(identifier="shop1") shop2 = factories.get_shop(identifier="shop2") shop1.staff_members.add(staff_user) shop2.staff_members.add(staff_user) assert Manufacturer.objects.count() == 0 user = admin_user if superuser else staff_user request = apply_request_middleware(rf.post("/", data=dict(name="Manuf shop2")), user=user, shop=shop2) set_shop(request, shop2) view_func = ManufacturerEditView.as_view() response = view_func(request) assert response.status_code == 302 if superuser: assert Manufacturer.objects.first().shops.count() == 0 else: assert Manufacturer.objects.first().shops.first() == shop2 for view_class in (ManufacturerEditView, ManufacturerListView): view_instance = view_class() view_instance.request= request assert view_instance.get_queryset().count() == 1 if superuser: assert view_instance.get_queryset().first().shops.count() == 0 else: assert view_instance.get_queryset().first().shops.count() == 1 assert view_instance.get_queryset().first().shops.first() == shop2 request = apply_request_middleware(rf.post("/", data=dict(name="Manuf shop1")), user=user, shop=shop1) set_shop(request, shop1) view_func = ManufacturerEditView.as_view() response = view_func(request) assert response.status_code == 302 if superuser: assert Manufacturer.objects.last().shops.count() == 0 else: assert Manufacturer.objects.last().shops.first() == shop1 for view_class in (ManufacturerEditView, ManufacturerListView): view_instance = view_class() view_instance.request= request assert view_instance.get_queryset().count() == (2 if superuser else 1) if superuser: assert view_instance.get_queryset().first().shops.count() == 0 assert view_instance.get_queryset().last().shops.count() == 0 else: assert view_instance.get_queryset().first().shops.count() == 1 assert view_instance.get_queryset().first().shops.first() == shop1
def _mbv_upload(shop, user, **extra_data): content = ("42" * 42).encode("UTF-8") imuf = InMemoryUploadedFile(BytesIO(content), "file", "424242.txt", "text/plain", len(content), "UTF-8") request = RequestFactory().post("/", dict({"action": "upload", "file": imuf}, **extra_data)) request.user = user request.session = {} set_shop(request, shop) view = MediaBrowserView.as_view() response = view(request) return json.loads(response.content.decode("UTF-8"))
def _mbv_upload(shop, user, **extra_data): content = ("42" * 42).encode("UTF-8") imuf = InMemoryUploadedFile(BytesIO(content), "file", "424242.pdf", "application/pdf", len(content), "UTF-8") request = RequestFactory().post("/", dict({"action": "upload", "file": imuf}, **extra_data)) request.user = user request.session = {} set_shop(request, shop) view = MediaBrowserView.as_view() response = view(request) return json.loads(response.content.decode("UTF-8"))
def test_exceptions_admin_edit_view(rf, staff_user, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop = factories.get_default_shop() shop.staff_members.add(staff_user) factories.get_shop(identifier="shop2", enabled=True) assert Shop.objects.count() == 2 # Staff user gets shop automatically data = { "name": "No deals in next 2 days!", "start_datetime": datetime.datetime(year=2018, month=11, day=9), "end_datetime": datetime.datetime(year=2018, month=11, day=11), } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = AvailabilityExceptionEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 exception1 = AvailabilityException.objects.first() assert exception1 is not None assert exception1.shops.first() == shop # Test with superuser and with different shop shop2 = factories.get_shop(enabled=True) request = apply_request_middleware(rf.post("/", data=data), user=admin_user, shop=shop2) set_shop(request, shop2) view_func = AvailabilityExceptionEditView.as_view() response = view_func(request) assert response.status_code == 302 assert AvailabilityException.objects.count() == 2 exception2 = AvailabilityException.objects.exclude( id=exception1.pk).first() assert exception1 != exception2 assert exception2.shops.count() == 1 assert exception2.shops.filter(id=shop2.pk).exists() # Staff user can only view coupon codes since that has the right shop _assert_view_get(rf, exception1, shop, staff_user) _assert_view_get(rf, exception2, shop, staff_user, True) # Superuser can see both if needed, but only when right shop is active _assert_view_get(rf, exception1, shop, admin_user) _assert_view_get(rf, exception2, shop, admin_user, True) _assert_view_get(rf, exception2, shop2, admin_user)
def _mbv_command(shop, user, payload, method="post"): request = RequestFactory().generic(method, "/") request.user = user request.session = {} set_shop(request, shop) if method == "post": request._body = json.dumps(payload).encode("UTF-8") else: request.GET = payload mbv = MediaBrowserView.as_view() return json.loads(mbv(request).content.decode("UTF-8"))
def _mbv_command(shop, user, payload, method="post"): request = RequestFactory().generic(method, "/") request.user = user request.session = {} set_shop(request, shop) if method == "post": request._body = json.dumps(payload).encode("UTF-8") else: request.GET = payload mbv = MediaBrowserView.as_view() return json.loads(mbv(request).content.decode("UTF-8"))
def test_discount_admin_edit_view(rf, staff_user, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop = factories.get_default_shop() shop.staff_members.add(staff_user) factories.get_shop(identifier="shop2") assert Shop.objects.count() == 2 # Staff user gets shop automatically product = factories.create_product("test", shop=shop) discount_percentage = 20 data = { "product": product.pk, "discount_percentage": discount_percentage } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = DiscountEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount1 = Discount.objects.first() assert discount1.shops.first() == shop # Test with superuser and with different shop shop2 = factories.get_shop(enabled=True) request = apply_request_middleware(rf.post("/", data=data), user=admin_user, shop=shop2) set_shop(request, shop2) view_func = DiscountEditView.as_view() response = view_func(request) assert response.status_code == 302 assert Discount.objects.count() == 2 discount2 = Discount.objects.exclude(id=discount1.pk).first() assert discount1 != discount2 assert discount2.shops.count() == 1 assert discount2.shops.filter(id=shop2.pk).exists() # Staff user can only view discount1 since that has the right shop _assert_view_get(rf, discount1, shop, staff_user) _assert_view_get(rf, discount2, shop, staff_user, True) # Superuser can see both if needed, but only when right shop is active _assert_view_get(rf, discount1, shop, admin_user) _assert_view_get(rf, discount2, shop, admin_user, True) _assert_view_get(rf, discount2, shop2, admin_user)
def test_happy_hours_admin_edit_form_set_discount(rf, staff_user, admin_user): shop = factories.get_default_shop() shop.staff_members.add(staff_user) discount = Discount.objects.create() data = { "name": "Happiest Hour 2pm", "weekdays": [6], # Sun "from_hour": datetime.time(hour=14, minute=0), "to_hour": datetime.time(hour=14, minute=0) } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = HappyHourEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 happy_hour = HappyHour.objects.first() data.update({"discounts": [discount]}) request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = HappyHourEditView.as_view() response = view_func(request, pk=happy_hour.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.coupon_code is None # discount is missing shop so this shouldn't be set assert discount.shops.count() == 0 discount.shops = [shop] request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = HappyHourEditView.as_view() response = view_func(request, pk=happy_hour.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.happy_hours.count() == 1 assert discount.happy_hours.first() == happy_hour
def test_happy_hours_admin_edit_view(rf, staff_user, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop = factories.get_default_shop() shop.staff_members.add(staff_user) factories.get_shop(identifier="shop2", enabled=True) assert Shop.objects.count() == 2 # Staff user gets shop automatically data = { "name": "Happiest Hour 2pm", "weekdays": [6], # Sun "from_hour": datetime.time(hour=14, minute=0), "to_hour": datetime.time(hour=14, minute=0) } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = HappyHourEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 happy_hour1 = HappyHour.objects.first() assert happy_hour1 is not None assert happy_hour1.shops.first() == shop assert happy_hour1.time_ranges.count() == 1 # Since happy hour starts and ends on same day # Test with superuser and with different shop shop2 = factories.get_shop(enabled=True) request = apply_request_middleware(rf.post("/", data=data), user=admin_user, shop=shop2) set_shop(request, shop2) view_func = HappyHourEditView.as_view() response = view_func(request) assert response.status_code == 302 assert HappyHour.objects.count() == 2 happy_hour2 = HappyHour.objects.exclude(id=happy_hour1.pk).first() assert happy_hour1 != happy_hour2 assert happy_hour2.shops.count() == 1 assert happy_hour2.shops.filter(id=shop2.pk).first() # Staff user can only view coupon codes since that has the right shop _assert_view_get(rf, happy_hour1, shop, staff_user) _assert_view_get(rf, happy_hour2, shop, staff_user, True) # Superuser can see both if needed, but only when right shop is active _assert_view_get(rf, happy_hour1, shop, admin_user) _assert_view_get(rf, happy_hour2, shop, admin_user, True) _assert_view_get(rf, happy_hour2, shop2, admin_user)
def test_discount_admin_list_view(rf, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): for x in range(3): _test_exception_list_view(rf, x) # Superuser gets same data as shop staff shop = Shop.objects.exclude(identifier=factories.DEFAULT_IDENTIFIER).order_by("?").first() request = apply_request_middleware( rf.get("/", {"jq": json.dumps({"perPage": 100, "page": 1})}), user=admin_user, shop=shop ) set_shop(request, shop) view_instance = AvailabilityExceptionListView() view_instance.request = request data = json.loads(view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 1
def test_exceptions_admin_edit_view(rf, staff_user, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop = factories.get_default_shop() shop.staff_members.add(staff_user) factories.get_shop(identifier="shop2", enabled=True) assert Shop.objects.count() == 2 # Staff user gets shop automatically data = { "name": "No deals in next 2 days!", "start_datetime": datetime.datetime(year=2018, month=11, day=9), "end_datetime": datetime.datetime(year=2018, month=11, day=11), } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = AvailabilityExceptionEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 exception1 = AvailabilityException.objects.first() assert exception1 is not None assert exception1.shops.first() == shop # Test with superuser and with different shop shop2 = factories.get_shop(enabled=True) request = apply_request_middleware(rf.post("/", data=data), user=admin_user, shop=shop2) set_shop(request, shop2) view_func = AvailabilityExceptionEditView.as_view() response = view_func(request) assert response.status_code == 302 assert AvailabilityException.objects.count() == 2 exception2 = AvailabilityException.objects.exclude(id=exception1.pk).first() assert exception1 != exception2 assert exception2.shops.count() == 1 assert exception2.shops.filter(id=shop2.pk).exists() # Staff user can only view coupon codes since that has the right shop _assert_view_get(rf, exception1, shop, staff_user) _assert_view_get(rf, exception2, shop, staff_user, True) # Superuser can see both if needed, but only when right shop is active _assert_view_get(rf, exception1, shop, admin_user) _assert_view_get(rf, exception2, shop, admin_user, True) _assert_view_get(rf, exception2, shop2, admin_user)
def test_coupon_codes_admin_edit_view(rf, staff_user, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop = factories.get_default_shop() shop.staff_members.add(staff_user) factories.get_shop(identifier="shop2", enabled=True) assert Shop.objects.count() == 2 # Staff user gets shop automatically data = {"code": "potus"} request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = CouponCodeEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 coupon1 = CouponCode.objects.first() assert coupon1.shops.first() == shop # Test with superuser and with different shop shop2 = factories.get_shop(enabled=True) request = apply_request_middleware(rf.post("/", data=data), user=admin_user, shop=shop2) set_shop(request, shop2) assert request.shop == shop2 view_func = CouponCodeEditView.as_view() response = view_func(request) assert response.status_code == 302 assert CouponCode.objects.count() == 2 coupon2 = CouponCode.objects.exclude(id=coupon1.pk).first() assert coupon1 != coupon2 assert coupon2.shops.count() == 1 assert coupon2.shops.filter(id=shop2.pk).exists() # Staff user can only view coupon codes for his shop _assert_view_get(rf, coupon1, shop, staff_user) _assert_view_get(rf, coupon2, shop, staff_user, True) # Superuser can see both if needed, but only when right shop is active _assert_view_get(rf, coupon1, shop, admin_user) _assert_view_get(rf, coupon2, shop, admin_user, True) _assert_view_get(rf, coupon2, shop2, admin_user)
def test_exceptions_admin_edit_form_set_discount(rf, staff_user, admin_user): shop = factories.get_default_shop() shop.staff_members.add(staff_user) discount = Discount.objects.create() data = { "name": "No deals in next 2 days!", "start_datetime": datetime.datetime(year=2018, month=11, day=9), "end_datetime": datetime.datetime(year=2018, month=11, day=11), } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = AvailabilityExceptionEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 exception1 = AvailabilityException.objects.first() data.update({"discounts": [discount]}) request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = AvailabilityExceptionEditView.as_view() response = view_func(request, pk=exception1.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.coupon_code is None # discount is missing shop so this shouldn't be set discount.shops = [shop] request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = AvailabilityExceptionEditView.as_view() response = view_func(request, pk=exception1.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.availability_exceptions.count() == 1 assert discount.availability_exceptions.first() == exception1
def _check_that_staff_can_see_folder(rf, shop, user, folder, expected_files_count): request = apply_request_middleware( rf.get("/", { "action": "folder", "id": folder.id })) request.user = user request.session = {} set_shop(request, shop) view_func = MediaBrowserView.as_view() response = view_func(request) assert isinstance(response, JsonResponse) content = json.loads(response.content.decode("utf-8")) assert len(content["folder"]["files"]) == expected_files_count
def test_discount_admin_list_view(rf, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): for x in range(3): _test_happy_hours_list_view(rf, x) # Superuser gets same data as shop staff shop = Shop.objects.exclude(identifier=factories.DEFAULT_IDENTIFIER).order_by("?").first() request = apply_request_middleware( rf.get("/", { "jq": json.dumps({"perPage": 100, "page": 1}) }), user=admin_user, shop=shop) set_shop(request, shop) view_instance = HappyHourListView() view_instance.request = request data = json.loads(view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 1
def test_happy_hours_admin_edit_form_set_discount(rf, staff_user, admin_user): shop = factories.get_default_shop() shop.staff_members.add(staff_user) discount = Discount.objects.create() data = { "name": "Happiest Hour 2pm", "weekdays": [6], # Sun "from_hour": datetime.time(hour=14, minute=0), "to_hour": datetime.time(hour=14, minute=0) } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = HappyHourEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 happy_hour = HappyHour.objects.first() data.update({"discounts": [discount]}) request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = HappyHourEditView.as_view() response = view_func(request, pk=happy_hour.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.coupon_code is None # discount is missing shop so this shouldn't be set assert discount.shops.count() == 0 discount.shops = [shop] request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = HappyHourEditView.as_view() response = view_func(request, pk=happy_hour.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.happy_hours.count() == 1 assert discount.happy_hours.first() == happy_hour
def test_coupon_codes_admin_edit_form_set_discount(rf, staff_user, admin_user): shop = factories.get_default_shop() shop.staff_members.add(staff_user) discount = Discount.objects.create() data = {"code": "usa"} request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = CouponCodeEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 coupon1 = CouponCode.objects.first() data.update({"coupon_code_discounts": [discount]}) request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = CouponCodeEditView.as_view() response = view_func(request, pk=coupon1.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.coupon_code is None # discount is missing shop so this shouldn't be set discount.shops.add(shop) request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = CouponCodeEditView.as_view() response = view_func(request, pk=coupon1.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.coupon_code == coupon1
def test_happy_hours_admin_edit_view_over_midnight(rf, staff_user, admin_user): shop = factories.get_default_shop() shop.staff_members.add(staff_user) factories.get_shop(identifier="shop2", enabled=True) assert Shop.objects.count() == 2 # Staff user gets shop automatically from_hour = datetime.time(hour=21, minute=0) to_hour = datetime.time(hour=3, minute=0) data = { "name": "Happiest Hour 2pm", "weekdays": [1], # Tue "from_hour": from_hour, "to_hour": to_hour } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = HappyHourEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 happy_hour = HappyHour.objects.first() assert happy_hour is not None assert happy_hour.shops.first() == shop assert happy_hour.time_ranges.count( ) == 2 # Since happy hour starts and ends on different day assert happy_hour.time_ranges.filter(weekday=1).exists() assert happy_hour.time_ranges.filter(weekday=1, from_hour=from_hour, to_hour=datetime.time(23, 59)).exists() assert happy_hour.time_ranges.filter(weekday=2, from_hour=datetime.time(0), to_hour=to_hour).exists() _assert_view_get(rf, happy_hour, shop, staff_user) # Viewing the edit should also still work
def test_exceptions_admin_edit_form_set_discount(rf, staff_user, admin_user): shop = factories.get_default_shop() shop.staff_members.add(staff_user) discount = Discount.objects.create() data = { "name": "No deals in next 2 days!", "start_datetime": datetime.datetime(year=2018, month=11, day=9), "end_datetime": datetime.datetime(year=2018, month=11, day=11), } request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) set_shop(request, shop) assert request.shop == shop view_func = AvailabilityExceptionEditView.as_view() response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 302 exception1 = AvailabilityException.objects.first() data.update({"discounts": [discount]}) request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = AvailabilityExceptionEditView.as_view() response = view_func(request, pk=exception1.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.coupon_code is None # discount is missing shop so this shouldn't be set discount.shops = [shop] request = apply_request_middleware(rf.post("/", data=data), user=staff_user, shop=shop) view_func = AvailabilityExceptionEditView.as_view() response = view_func(request, pk=exception1.pk) if hasattr(response, "render"): response.render() assert response.status_code == 302 discount = Discount.objects.first() assert discount.availability_exceptions.count() == 1 assert discount.availability_exceptions.first() == exception1
def test_admin_script_list(rf, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop1 = factories.get_shop(identifier="shop-1", enabled=True) shop2 = factories.get_shop(identifier="shop-2", enabled=True) shop1.staff_members.add(admin_user) shop2.staff_members.add(admin_user) script_shop1 = Script.objects.create(shop=shop1, event_identifier="order_received", name="SHOP 1", enabled=True) script_shop2 = Script.objects.create(shop=shop2, event_identifier="order_received", name="SHOP 2", enabled=True) view = ScriptEditView.as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) set_shop(request, shop2) with pytest.raises(Http404): response = view(request, pk=script_shop1.id) response = view(request, pk=script_shop2.id) assert response.status_code == 200
def apply_request_middleware(request, **attrs): """ Apply all the `process_request` capable middleware configured into the given request. :param request: The request to massage. :type request: django.http.HttpRequest :param attrs: Additional attributes to set after massage. :type attrs: dict :return: The same request, massaged in-place. :rtype: django.http.HttpRequest """ for middleware_path in settings.MIDDLEWARE_CLASSES: mw_class = import_string(middleware_path) current_language = get_language() try: mw_instance = mw_class() except MiddlewareNotUsed: continue for key, value in attrs.items(): setattr(request, key, value) if hasattr(mw_instance, 'process_request'): mw_instance.process_request(request) activate(current_language) assert request.shop if not attrs.get("skip_session", False): frm = inspect.stack()[1] mod = inspect.getmodule(frm[0]) if mod.__name__.startswith("shuup_tests.admin"): set_shop(request, request.shop) return request
def apply_request_middleware(request, **attrs): """ Apply all the `process_request` capable middleware configured into the given request. :param request: The request to massage. :type request: django.http.HttpRequest :param attrs: Additional attributes to set after massage. :type attrs: dict :return: The same request, massaged in-place. :rtype: django.http.HttpRequest """ for middleware_path in settings.MIDDLEWARE_CLASSES: mw_class = import_string(middleware_path) current_language = get_language() try: mw_instance = mw_class() except MiddlewareNotUsed: continue for key, value in attrs.items(): setattr(request, key, value) if hasattr(mw_instance, 'process_request'): mw_instance.process_request(request) activate(current_language) assert request.shop if not attrs.get("skip_session", False): frm = inspect.stack()[1] mod = inspect.getmodule(frm[0]) if mod.__name__.startswith("shuup_tests.admin"): shop_provider.set_shop(request, request.shop) return request
def get(self, request, *args, **kwargs): shop = Shop.objects.filter(pk=kwargs.get("pk")).first() set_shop(request, shop) messages.info(request, (_("Shop {} is now active!")).format(shop.name)) return HttpResponseRedirect(request.META.get("HTTP_REFERER", reverse("shuup_admin:home")))
def get(self, request, *args, **kwargs): shop = Shop.objects.filter(pk=kwargs.get("pk")).first() set_shop(request, shop) messages.info(request, (_("Shop {} is now active.")).format(shop.name)) return HttpResponseRedirect( request.META.get("HTTP_REFERER", reverse("shuup_admin:home")))
def test_discount_admin_list_view(rf, admin_user): with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): for x in range(3): _test_discount_list_view(rf, x) # Superuser gets same data as shop staff shop = Shop.objects.exclude(identifier=factories.DEFAULT_IDENTIFIER).order_by("?").first() request = apply_request_middleware( rf.get("/", { "jq": json.dumps({"perPage": 100, "page": 1}) }), user=admin_user, shop=shop) set_shop(request, shop) view_instance = DiscountListView() view_instance.request = request data = json.loads(view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 4 # In active 3 discounts to see that those are filtered out payload = { "action": "archive_discounts", "values": [discount.pk for discount in Discount.objects.filter(shops=shop).order_by("?")[:3]] } archive_request = apply_request_middleware(rf.post("/"), user=admin_user, shop=shop) set_shop(archive_request, shop) archive_request._body = json.dumps(payload).encode("UTF-8") view = DiscountListView.as_view() response = view(request=archive_request) if hasattr(response, "render"): response.render() assert response.status_code == 200 assert Discount.objects.available(shop).count() == 1 data = json.loads(view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 1 # Archived list should now show 3 results archived_view_instance = ArchivedDiscountListView() archived_view_instance.request = request data = json.loads(archived_view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 3 # Make sure rendering this archived discounts list works view_func = ArchivedDiscountListView.as_view() request = apply_request_middleware(rf.get("/"), user=admin_user, shop=shop) set_shop(request, shop) response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 200 # Unarchive all discounts payload = { "action": "unarchive_discounts", "values": "all" } unarchive_request = apply_request_middleware(rf.post("/"), user=admin_user, shop=shop) set_shop(unarchive_request, shop) unarchive_request._body = json.dumps(payload).encode("UTF-8") view = ArchivedDiscountListView.as_view() response = view(request=unarchive_request) if hasattr(response, "render"): response.render() assert response.status_code == 200 assert Discount.objects.available(shop).count() == 4 # Re-archive all discounts payload = { "action": "archive_discounts", "values": "all" } archive_request = apply_request_middleware(rf.post("/"), user=admin_user, shop=shop) set_shop(archive_request, shop) archive_request._body = json.dumps(payload).encode("UTF-8") view = DiscountListView.as_view() response = view(request=archive_request) if hasattr(response, "render"): response.render() assert response.status_code == 200 assert Discount.objects.available(shop).count() == 0 # Unarchive just one discount payload = { "action": "unarchive_discounts", "values": [discount.pk for discount in Discount.objects.filter(shops=shop).order_by("?")[:1]] } unarchive_request = apply_request_middleware(rf.post("/"), user=admin_user, shop=shop) set_shop(unarchive_request, shop) unarchive_request._body = json.dumps(payload).encode("UTF-8") view = ArchivedDiscountListView.as_view() response = view(request=unarchive_request) if hasattr(response, "render"): response.render() assert response.status_code == 200 assert Discount.objects.available(shop).count() == 1 # Delete one archived discount payload = { "action": "delete_discounts", "values": [discount.pk for discount in Discount.objects.archived(shop).order_by("?")[:1]] } delete_request = apply_request_middleware(rf.post("/"), user=admin_user, shop=shop) set_shop(delete_request, shop) delete_request._body = json.dumps(payload).encode("UTF-8") view = ArchivedDiscountListView.as_view() response = view(request=delete_request) if hasattr(response, "render"): response.render() assert response.status_code == 200 assert Discount.objects.filter(shops=shop).count() == 3 # Delete all for this shop only payload = { "action": "delete_discounts", "values": "all" } delete_request = apply_request_middleware(rf.post("/"), user=admin_user, shop=shop) set_shop(delete_request, shop) delete_request._body = json.dumps(payload).encode("UTF-8") view = ArchivedDiscountListView.as_view() response = view(request=delete_request) if hasattr(response, "render"): response.render() assert response.status_code == 200 assert Discount.objects.filter(shops=shop).count() == 1 # Since only archived can be deleted with mass action assert Discount.objects.available(shop).count() == 1 assert Discount.objects.archived(shop).count() == 0 assert Discount.objects.count() == 9
def _test_discount_list_view(rf, index): shop = factories.get_shop(identifier="shop%s" % index, enabled=True) staff_user = factories.create_random_user(is_staff=True) shop.staff_members.add(staff_user) discount1 = Discount.objects.create(identifier="discount_without_effects_%s" % index) discount1.shops = [shop] discount2 = Discount.objects.create( identifier="discount_with_amount_value_only_%s" % index, discount_amount_value=20, start_datetime=now(), end_datetime=now() + datetime.timedelta(days=2)) discount2.shops = [shop] discount3 = Discount.objects.create( identifier="discount_with_amount_and_discounted_price_%s" % index, discount_amount_value=20, discounted_price_value=4, start_datetime=now(), end_datetime=now() + datetime.timedelta(days=2)) discount3.shops = [shop] discount4 = Discount.objects.create( identifier="test_with_discounted_price_and_percentage_%s" % index, discounted_price_value=4, discount_percentage=0.20, start_datetime=now(), end_datetime=now() + datetime.timedelta(days=2)) discount4.shops = [shop] view_func = DiscountListView.as_view() request = apply_request_middleware( rf.get("/", { "jq": json.dumps({"perPage": 100, "page": 1}) }), user=staff_user, shop=shop) set_shop(request, shop) response = view_func(request) if hasattr(response, "render"): response.render() assert response.status_code == 200 view_instance = DiscountListView() view_instance.request = request assert request.shop == shop assert view_instance.get_queryset().count() == 4 data = json.loads(view_instance.get(request).content.decode("UTF-8")) assert len(data["items"]) == 4 discount1_data = [item for item in data["items"] if item["_id"] == discount1.pk][0] assert discount1_data["discount_effect"] == "-" discount2_data = [item for item in data["items"] if item["_id"] == discount2.pk][0] assert len(discount2_data["discount_effect"].split(",")) == 1 assert "20" in discount2_data["discount_effect"] discount3_data = [item for item in data["items"] if item["_id"] == discount3.pk][0] assert len(discount3_data["discount_effect"].split(",")) == 2 assert "20" in discount3_data["discount_effect"] assert "4" in discount3_data["discount_effect"] discount4_data = [item for item in data["items"] if item["_id"] == discount4.pk][0] assert len(discount4_data["discount_effect"].split(",")) == 2 assert "20" in discount4_data["discount_effect"] assert "4" in discount4_data["discount_effect"]