def test_view_default_columns(rf, admin_user): shop = get_default_shop() view = ProductListView.as_view() request = apply_request_middleware(rf.get("/", { "jq": json.dumps({"perPage": 100, "page": 1}) }), user=admin_user) response = view(request) assert 200 <= response.status_code < 300 listview = ProductListView() assert listview.settings.default_columns == listview.default_columns column_names = [c.id for c in sorted(listview.columns, key=lambda x: x.id)] default_column_names = [c.id for c in sorted(listview.default_columns, key=lambda x: x.id)] assert column_names == default_column_names assert configuration.get(None, "view_configuration_shopproduct_name") # name is configured assert listview.settings.view_configured() assert listview.settings.get_settings_key("name") == "view_configuration_shopproduct_name" # we are attached to product view settings_view = ListSettingsView.as_view() view_data = {"model": "ShopProduct", "module": "shuup.core.models", "return_url": "shop_product"} request = rf.get("/", view_data) response = settings_view(request) assert 200 <= response.status_code < 300 # Change configuration by posting form request = rf.post("/?" + urlencode(view_data), {"view_configuration_shopproduct_name": False}) response = settings_view(request) assert response.status_code == 302 assert listview.settings.get_config("name") == configuration.get(None, "view_configuration_shopproduct_name") assert not configuration.get(None, "view_configuration_shopproduct_name").get("active")
def test_view_default_columns(rf, admin_user): shop = get_default_shop() view = ProductListView.as_view() request = apply_request_middleware(rf.get("/", { "jq": json.dumps({"perPage": 100, "page": 1}) }), user=admin_user) response = view(request) assert 200 <= response.status_code < 300 listview = ProductListView() assert listview.settings.default_columns == listview.default_columns column_names = [c.id for c in sorted(listview.columns, key=lambda x: x.id)] default_column_names = [c.id for c in sorted(listview.default_columns, key=lambda x: x.id)] assert column_names == default_column_names assert configuration.get(None, "view_configuration_shopproduct_name") # name is configured assert listview.settings.view_configured() assert listview.settings.get_settings_key("name") == "view_configuration_shopproduct_name" # we are attached to product view settings_view = ListSettingsView.as_view() view_data = {"model": "ShopProduct", "module": "shuup.core.models", "return_url": "shop_product"} request = rf.get("/", view_data) response = settings_view(request) assert 200 <= response.status_code < 300 # Change configuration by posting form request = rf.post("/?" + urlencode(view_data), {"view_configuration_shopproduct_name": False}) response = settings_view(request) assert response.status_code == 302 assert listview.settings.get_config("name") == configuration.get(None, "view_configuration_shopproduct_name") assert not configuration.get(None, "view_configuration_shopproduct_name").get("active")
def test_mass_edit_products2(rf, admin_user): shop = get_default_shop() supplier = get_default_supplier() product1 = create_product(printable_gibberish(), shop=shop, supplier=supplier, default_price="50") product2 = create_product(printable_gibberish(), shop=shop, supplier=supplier, default_price="501") shop_product1 = product1.get_shop_instance(shop) shop_product2 = product2.get_shop_instance(shop) # ensure no categories set assert shop_product1.primary_category is None assert shop_product2.primary_category is None payload = { "action": InvisibleMassAction().identifier, "values": [product1.pk, product2.pk] } request = apply_request_middleware(rf.post( "/", user=admin_user, )) request._body = json.dumps(payload).encode("UTF-8") view = ProductListView.as_view() response = view(request=request) assert response.status_code == 200 for product in Product.objects.all(): assert product.get_shop_instance( shop).visibility == ShopProductVisibility.NOT_VISIBLE
def test_mass_edit_products2(rf, admin_user): shop = get_default_shop() supplier = get_default_supplier() product1 = create_product(printable_gibberish(), shop=shop, supplier=supplier, default_price="50") product2 = create_product(printable_gibberish(), shop=shop, supplier=supplier, default_price="501") shop_product1 = product1.get_shop_instance(shop) shop_product2 = product2.get_shop_instance(shop) # ensure no categories set assert shop_product1.primary_category is None assert shop_product2.primary_category is None payload = { "action": InvisibleMassAction().identifier, "values": [product1.pk, product2.pk] } request = apply_request_middleware(rf.post( "/", user=admin_user, )) request._body = json.dumps(payload).encode("UTF-8") view = ProductListView.as_view() response = view(request=request) assert response.status_code == 200 for product in Product.objects.all(): assert product.get_shop_instance(shop).visibility == ShopProductVisibility.NOT_VISIBLE
def test_product_edit_view_multipleshops(rf): """ Check whether a staff user from Shop A can see the product from Shop B when the staff user is only attached to Shop A """ with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): shop1 = get_default_shop() shop2 = get_new_shop(identifier="shop2", domain="shop2", name="Shop 2") shop2_staff = create_random_user(is_staff=True) shop2.staff_members.add(shop2_staff) product = create_product("shop1-product", shop=shop1) shop_product = product.get_shop_instance(shop1) request = apply_request_middleware(rf.get("/", HTTP_HOST=shop2.domain), user=shop2_staff) view_func = ProductEditView.as_view() with pytest.raises(Http404): view_func(request, pk=shop_product.pk) view_func = ProductListView.as_view() payload = {"jq": json.dumps({"perPage": 100, "page": 1}), "shop": shop2.pk} request = apply_request_middleware(rf.get("/", payload, HTTP_HOST=shop2.domain), user=shop2_staff) response = view_func(request) assert response.status_code == 200 data = json.loads(response.content.decode("utf-8")) assert len(data["items"]) == 0
def test_product_view_columns(rf): get_default_shop() listview = ProductListView() column_ids = [c.id for c in listview.settings.column_spec] assert "product_description" in column_ids column_labels = [c.title for c in listview.settings.column_spec] assert "Product Description" in column_labels assert "Product Keywords" in column_labels
def test_view_saved_columns(rf): visible_fields = sorted(["id", "name"]) configuration.set(None, "view_configuration_product_saved", True) for field in visible_fields: configuration.set(None, "view_configuration_product_%s" % field, True) listview = ProductListView() column_names = [c.id for c in sorted(listview.columns, key=lambda x: x.id)] assert len(listview.columns) == len(visible_fields) assert column_names == visible_fields
def test_view_saved_columns(rf): shop = get_default_shop() visible_fields = sorted(["shopproduct_id", "name", "select"]) configuration.set(None, "view_configuration_shopproduct_saved", True) for field in visible_fields: configuration.set(None, "view_configuration_shopproduct_%s" % field, {"active": True, "ordering": 999}) listview = ProductListView() column_names = [c.id for c in sorted(listview.columns, key=lambda x: x.id)] assert len(listview.columns) == len(visible_fields) assert column_names == visible_fields
def test_product_edit_view_multipleshops(rf): """ Check whether a staff user from Shop A can see the product from Shop B when the staff user is only attached to Shop A """ with override_settings(SHUUP_ENABLE_MULTIPLE_SHOPS=True): assert Product.objects.count() == 0 shop1 = get_default_shop() shop2 = get_new_shop(identifier="shop2", domain="shop2", name="Shop 2") shop2_staff = create_random_user(is_staff=True) shop2.staff_members.add(shop2_staff) assert Product.objects.count() == 1 product = create_product("shop1-product", shop=shop1) assert Product.objects.count() == 2 # Default product is set to default shop as well assert ShopProduct.objects.filter(shop=shop1).count() == 2 # Default product created in get_new_shop-function assert ShopProduct.objects.filter(shop=shop2).count() == 1 shop_product = product.get_shop_instance(shop1) request = apply_request_middleware(rf.get("/", HTTP_HOST=shop2.domain), user=shop2_staff) assert get_shop(request) == shop2 view_func = ProductEditView.as_view() with pytest.raises(Http404): view_func(request, pk=shop_product.pk) view_func = ProductListView.as_view() payload = { "jq": json.dumps({ "perPage": 100, "page": 1 }), "shop": shop2.pk } request = apply_request_middleware(rf.get("/", payload, HTTP_HOST=shop2.domain), user=shop2_staff) assert get_shop(request) == shop2 response = view_func(request) assert response.status_code == 200 data = json.loads(response.content.decode("utf-8")) assert len(data["items"] ) == 1 # There is one shop product create in "get new shop"