def test_modules_in_core_admin_work(rf, admin_user): get_default_shop() request = rf.get("/") apply_request_middleware(request, user=admin_user) request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules(ShuupAdminAppConfig.provides["admin_module"]): assert all(get_module_urls()) assert get_menu_entry_categories(request)
def test_menu_flip_parent_child(rf, admin_user): arrange_url = reverse("shuup_admin:menu.arrange") menu_request = apply_request_middleware(rf.get(arrange_url), user=admin_user) admin_menu_before_save = [m.to_dict() for m in get_menu_entry_categories(menu_request)] # move child on top level and set parent as child entry_parent = admin_menu_before_save[0] entry = admin_menu_before_save[0]["entries"][0] del admin_menu_before_save[0]["entries"][0] entry["entries"] = [admin_menu_before_save[0]] admin_menu_before_save.append(entry) del admin_menu_before_save[0] data = {"menus": json.dumps(admin_menu_before_save)} AdminMenuArrangeView.as_view()(apply_request_middleware(rf.post(arrange_url, data=data), user=admin_user)) admin_menu_after_save = [m.to_dict() for m in get_menu_entry_categories(menu_request)] assert admin_menu_after_save[-1]["entries"][0]["id"] == entry_parent["id"]
def test_menu_entries(rf, admin_user): request = rf.get("/") request.user = admin_user with replace_modules([ATestModule]): categories = get_menu_entry_categories(request) assert categories test_category_menu_entries = [cat for cat in categories if cat.name == "Test"][0] assert any(me.text == "OK" for me in test_category_menu_entries)
def test_menu_save_arrange_view(rf, admin_user): url = reverse('shuup_admin:menu.arrange') menu_request = apply_request_middleware(rf.get(url), user=admin_user) admin_menu_before_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] data = {'menus': json.dumps(admin_menu_before_save[::-1])} request = apply_request_middleware(rf.post(url, data=data), user=admin_user) response = AdminMenuArrangeView.as_view()(request) assert response.status_code == 302 menu_request = apply_request_middleware(rf.get(url), user=admin_user) admin_menu_after_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert admin_menu_after_save == admin_menu_before_save[::-1]
def test_menu_reset_view(rf): staff_user = get_staff_user() arrange_url = reverse('shuup_admin:menu.arrange_staff') menu_request = apply_request_middleware(rf.get(arrange_url), user=staff_user) admin_menu_before_save = [m.to_dict() for m in get_menu_entry_categories(menu_request)] new_data = [m.to_dict() for m in get_menu_entry_categories(menu_request)][::-1] new_data[0]["entries"][0]["name"] = "Menu Arrange" data = {'menus': json.dumps(new_data)} StaffMenuArrangeView.as_view()(apply_request_middleware(rf.post(arrange_url, data=data), user=staff_user)) admin_menu_after_save = [m.to_dict() for m in get_menu_entry_categories(menu_request)] assert admin_menu_after_save == new_data reset_url = reverse('shuup_admin:menu.reset_staff') request = apply_request_middleware(rf.get(reset_url), user=staff_user) response = StaffMenuResetView.as_view()(request) assert response.status_code == 302 admin_menu_after_reset = [m.to_dict() for m in get_menu_entry_categories(menu_request)] assert admin_menu_after_reset == admin_menu_before_save
def test_menu_bad_customized_id(rf, admin_user): arrange_url = reverse('shuup_admin:menu.arrange') menu_request = apply_request_middleware(rf.get(arrange_url), user=admin_user) admin_menu_before_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] bad_entry = admin_menu_before_save[-1] bad_entry['id'] = 'BAD_ID' admin_menu_before_save.append(bad_entry) data = {'menus': json.dumps(admin_menu_before_save)} AdminMenuArrangeView.as_view()(apply_request_middleware(rf.post( arrange_url, data=data), user=admin_user)) admin_menu_after_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert len(admin_menu_after_save) == len(admin_menu_before_save) - 1
def test_menu_save_arrange_view(rf): staff_user = get_staff_user() url = reverse('shuup_admin:menu.arrange_staff') menu_request = apply_request_middleware(rf.get(url), user=staff_user) admin_menu_before_save = [m.to_dict() for m in get_menu_entry_categories(menu_request)] new_data = admin_menu_before_save[::-1] new_data[0]["entries"][0]["name"] = "Menu Arrange" data = {'menus': json.dumps(new_data)} request = apply_request_middleware(rf.post(url, data=data), user=staff_user) response = StaffMenuArrangeView.as_view()(request) assert response.status_code == 302 menu_request = apply_request_middleware(rf.get(url), user=staff_user) admin_menu_after_save = [m.to_dict() for m in get_menu_entry_categories(menu_request)] assert admin_menu_after_save == new_data # Make sure other staff has same menu after save another_staff_user = get_staff_user() menu_request = apply_request_middleware(rf.get(url), user=staff_user) admin_menu_after_save = [m.to_dict() for m in get_menu_entry_categories(menu_request)] assert admin_menu_after_save == new_data # Test that different languages are also customizable activate("fi") new_data[0]["entries"][0]["name"] = "Listan jarjestaminen" data = {'menus': json.dumps(new_data)} request = apply_request_middleware(rf.post(url, data=data), user=staff_user) response = StaffMenuArrangeView.as_view()(request) assert response.status_code == 302 menu_request = apply_request_middleware(rf.get(url), user=staff_user) admin_menu_after_save = [m.to_dict() for m in get_menu_entry_categories(menu_request)] assert admin_menu_after_save == new_data # Back in english menu title should still be "Menu Arrange" activate("en") menu_request = apply_request_middleware(rf.get(url), user=staff_user) admin_menu_after_save = [m.to_dict() for m in get_menu_entry_categories(menu_request)] assert admin_menu_after_save[0]["entries"][0]["name"] == "Menu Arrange"
def test_permissions_for_menu_entries(rf, admin_user): request = rf.get("/") request.user = factories.get_default_staff_user() permission_group = request.user.groups.first() set_permissions_for_group( permission_group, set("dashboard") | set(ARestrictedTestModule().get_required_permissions()) ) with replace_modules([ARestrictedTestModule]): categories = get_menu_entry_categories(request) assert categories # Make sure category is displayed if user has correct permissions test_category_menu_entries = [cat for cat in categories if cat.name == "RestrictedTest"][0] assert any(me.text == "OK" for me in test_category_menu_entries) # No menu items should be displayed if user has no permissions set_permissions_for_group(permission_group, set()) categories = get_menu_entry_categories(request) assert not categories
def test_menu_bad_entry_id(rf, admin_user): arrange_url = reverse('shuup_admin:menu.arrange') menu_request = apply_request_middleware(rf.get(arrange_url), user=admin_user) admin_menu_before_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] admin_menu_before_save_id = admin_menu_before_save[-1]['id'] admin_menu_before_save[-1]['id'] = 'BAD_ID' admin_menu_before_save[0]['entries'][-1]['id'] = 'BAD_ID' data = {'menus': json.dumps(admin_menu_before_save)} AdminMenuArrangeView.as_view()(apply_request_middleware(rf.post( arrange_url, data=data), user=admin_user)) admin_menu_after_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert admin_menu_after_save[-1]['id'] != admin_menu_before_save[-1]['id'] assert admin_menu_after_save[-1]['id'] == admin_menu_before_save_id
def test_permissions_for_menu_entries(rf, admin_user): permissions = set(["shuup.add_product", "shuup.delete_product", "shuup.change_product"]) request = rf.get("/") request.user = StaffUser() request.user.permissions = permissions with replace_modules([ARestrictedTestModule]): modules = [m for m in get_modules()] assert request.user.permissions == modules[0].get_required_permissions() categories = get_menu_entry_categories(request) assert categories # Make sure category is displayed if user has correct permissions test_category_menu_entries = categories.get("RestrictedTest") assert any(me.text == "OK" for me in test_category_menu_entries) # No menu items should be displayed if user has no permissions request.user.permissions = [] categories = get_menu_entry_categories(request) assert not categories
def test_menu_move_child(rf, admin_user): arrange_url = reverse('shuup_admin:menu.arrange') menu_request = apply_request_middleware(rf.get(arrange_url), user=admin_user) admin_menu_before_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] # move child on the top level entry = admin_menu_before_save[0]['entries'][0] del admin_menu_before_save[0]['entries'][0] admin_menu_before_save.append(entry) data = {'menus': json.dumps(admin_menu_before_save)} AdminMenuArrangeView.as_view()(apply_request_middleware(rf.post( arrange_url, data=data), user=admin_user)) admin_menu_after_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert admin_menu_after_save[-1]['id'] == entry['id']
def test_menu_reset_view(rf, admin_user): arrange_url = reverse("shuup_admin:menu.arrange_superuser") menu_request = apply_request_middleware(rf.get(arrange_url), user=admin_user) admin_menu_before_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] data = {"menus": json.dumps(admin_menu_before_save[::-1])} SuperUserMenuArrangeView.as_view()(apply_request_middleware( rf.post(arrange_url, data=data), user=admin_user)) admin_menu_after_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert admin_menu_after_save == admin_menu_before_save[::-1] reset_url = reverse("shuup_admin:menu.reset_superuser") request = apply_request_middleware(rf.get(reset_url), user=admin_user) response = SuperUserMenuResetView.as_view()(request) assert response.status_code == 302 admin_menu_after_reset = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert admin_menu_after_reset == admin_menu_before_save
def test_permissions_for_menu_entries(rf, admin_user): permissions = set( ["shuup.add_product", "shuup.delete_product", "shuup.change_product"]) request = rf.get("/") request.user = StaffUser() request.user.permissions = permissions with replace_modules([ARestrictedTestModule]): modules = [m for m in get_modules()] assert request.user.permissions == modules[0].get_required_permissions( ) categories = get_menu_entry_categories(request) assert categories # Make sure category is displayed if user has correct permissions test_category_menu_entries = categories.get("RestrictedTest") assert any(me.text == "OK" for me in test_category_menu_entries) # No menu items should be displayed if user has no permissions request.user.permissions = [] categories = get_menu_entry_categories(request) assert not categories
def test_is_menu_category_active(rf, admin_user): url = reverse("shuup_admin:shop_product.list") menu_request = apply_request_middleware(rf.get(url), user=admin_user) menu_categories = get_menu_entry_categories(menu_request) env = Environment() context = Context(environment=env, parent=None, name="FauxContext", blocks={}) context.vars.update({"request": menu_request}) product_category = [category for category in menu_categories if category.identifier == PRODUCTS_MENU_CATEGORY][0] assert is_menu_category_active(context, product_category, menu_request.path) assert is_menu_item_active(context, url, menu_request.path) shop_category = [category for category in menu_categories if category.identifier == SETTINGS_MENU_CATEGORY][0] assert not is_menu_category_active(context, shop_category, menu_request.path) with override_settings(SHUUP_ALWAYS_ACTIVE_MENU_CATEGORY_IDENTIFIERS=[SETTINGS_MENU_CATEGORY]): assert is_menu_category_active(context, shop_category, menu_request.path)
def test_is_menu_category_active(rf, admin_user): url = reverse('shuup_admin:shop_product.list') menu_request = apply_request_middleware(rf.get(url), user=admin_user) menu_categories = get_menu_entry_categories(menu_request) product_category = [ category for category in menu_categories if category.identifier == PRODUCTS_MENU_CATEGORY ][0] assert is_menu_category_active(product_category, menu_request.path) shop_category = [ category for category in menu_categories if category.identifier == SETTINGS_MENU_CATEGORY ][0] assert not is_menu_category_active(shop_category, menu_request.path) with override_settings(SHUUP_ALWAYS_ACTIVE_MENU_CATEGORY_IDENTIFIERS=[ SETTINGS_MENU_CATEGORY ]): assert is_menu_category_active(shop_category, menu_request.path)
def get_menu_entries(context): return sorted(itertools.chain(*(c.entries for c in menu.get_menu_entry_categories( request=context["request"]).values())), key=(lambda m: m.text))
def get_menu_entry_categories(context): return menu.get_menu_entry_categories(request=context["request"])
def test_menu_save_arrange_view(rf): with override_settings( SHUUP_ADMIN_SHOP_PROVIDER_SPEC= "shuup.testing.shop_provider.TestingAdminShopProvider", SHUUP_ADMIN_SUPPLIER_PROVIDER_SPEC= "shuup.testing.supplier_provider.FirstSupplierProvider", ): supplier_user = get_supplier_user() url = reverse("shuup_admin:menu.arrange_supplier") menu_request = apply_request_middleware(rf.get(url), user=supplier_user) admin_menu_before_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] new_data = admin_menu_before_save[::-1] new_data[0]["entries"][0]["name"] = "Menu Arrange" data = {"menus": json.dumps(new_data)} request = apply_request_middleware(rf.post(url, data=data), user=supplier_user) response = SupplierMenuArrangeView.as_view()(request) assert response.status_code == 302 menu_request = apply_request_middleware(rf.get(url), user=supplier_user) admin_menu_after_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert admin_menu_after_save == new_data # Make sure other staff has same menu after save another_supplier_user = get_supplier_user() menu_request = apply_request_middleware(rf.get(url), user=supplier_user) admin_menu_after_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert admin_menu_after_save == new_data # Test that different languages are also customizable activate("fi") new_data[0]["entries"][0]["name"] = "Listan jarjestaminen" data = {"menus": json.dumps(new_data)} request = apply_request_middleware(rf.post(url, data=data), user=supplier_user) response = SupplierMenuArrangeView.as_view()(request) assert response.status_code == 302 menu_request = apply_request_middleware(rf.get(url), user=supplier_user) admin_menu_after_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert admin_menu_after_save == new_data # Back in english menu title should still be "Menu Arrange" activate("en") menu_request = apply_request_middleware(rf.get(url), user=supplier_user) admin_menu_after_save = [ m.to_dict() for m in get_menu_entry_categories(menu_request) ] assert admin_menu_after_save[0]["entries"][0]["name"] == "Menu Arrange" # Make sure staff does not receive this menu as long as the get_supplier provider # returns None which is the default staff = get_staff_user() menu_request = apply_request_middleware(rf.get(url), user=staff) staff_menu = [m.to_dict() for m in get_menu_entry_categories(menu_request)] assert staff_menu != admin_menu_after_save
def get_menu_entries(context): return sorted(itertools.chain(*( c.entries for c in menu.get_menu_entry_categories(request=context["request"]).values() )), key=(lambda m: m.text))