def test_permission_group_form_updates_members(): with replace_modules([ARestrictedTestModule]): modules = [m for m in get_modules()] test_module = modules[0] module_permissions = test_module.get_required_permissions() assert module_permissions group = get_default_permission_group() PermissionGroupForm(instance=group, prefix=None) assert not group.permissions.all() assert not group.user_set.all() data = { "name": "New Name", } for permission in ARestrictedTestModule().get_required_permissions(): data["perm:%s" % permission] = permission form = PermissionGroupForm(instance=group, prefix=None, data=data) form.save() assert group.name == "New Name" assert set(module_permissions) == get_permissions_from_group(group) form = PermissionGroupForm(instance=group, prefix=None, data={"name": "Name"}) form.save() assert not group.permissions.all() assert not group.user_set.all()
def test_reports_admin_permissions(rf): shop = get_default_shop() # We need a shop to exists staff_user = get_default_staff_user(shop) permission_group = get_default_permission_group() staff_user.groups = [permission_group] request = apply_request_middleware(rf.get("/"), user=staff_user) request.user = staff_user with replace_modules([ReportsAdminModule]): with override_provides("reports", REPORTS): extra_permissions = ReportsAdminModule().get_extra_permissions() assert len(extra_permissions) == 3 assert SalesReport.identifier in extra_permissions assert TotalSales.identifier in extra_permissions assert SalesPerHour.identifier in extra_permissions with admin_only_urls(): view_func = ReportView.as_view() response = view_func(request) response.render() response = view_func(request, pk=None) # "new mode" response.render() assert response.content soup = BeautifulSoup(response.content) assert soup.find("div", {"class": "content-block"}).text == "No reports available" expected_report_identifiers = [] for report_cls in [SalesReport, TotalSales, SalesPerHour]: expected_report_identifiers.append(report_cls.identifier) set_permissions_for_group(permission_group, [report_cls.identifier]) response = view_func(request, pk=None) # "new mode" response.render() assert response.content soup = BeautifulSoup(response.content) for option in soup.find("select", {"id": "id_report"}).findAll("option"): assert option["value"] in expected_report_identifiers
def test_product_edit_view_works_at_all(rf, admin_user): shop = get_default_shop() product = create_product("test-product", shop, default_price=200) shop_product = product.get_shop_instance(shop) shop_product.visibility_limit = ProductVisibility.VISIBLE_TO_GROUPS shop_product.save() request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([ CategoryModule, ImportAdminModule, ProductModule, MediaModule, ProductTypeModule, ManufacturerModule, PaymentMethodModule, ShippingMethodModule, ]): with admin_only_urls(): view_func = ProductEditView.as_view() response = view_func(request, pk=shop_product.pk) response.render() assert product.sku in response.rendered_content # it's probable the SKU is there response = view_func(request, pk=None) # "new mode" assert response.rendered_content # yeah, something gets rendered
def test_url_auth(rf): def did_disallow(view, request): try: return isinstance(view(request), HttpResponseRedirect) except Problem as prob: return True # Problems are fine here with replace_modules([ATestModule]): urls = dict((u.name, u) for u in get_module_urls()) request = rf.get("/") request.user = AnonymousUser() assert did_disallow(urls["test-auth"].callback, request) assert did_disallow(urls["test-perm"].callback, request) assert not did_disallow(urls["test-unauth"].callback, request) request.user = AuthenticatedUser() assert did_disallow(urls["test-auth"].callback, request) assert did_disallow(urls["test-perm"].callback, request) assert not did_disallow(urls["test-unauth"].callback, request) request.user = StaffUser() assert not did_disallow(urls["test-auth"].callback, request) assert did_disallow(urls["test-perm"].callback, request) assert not did_disallow(urls["test-unauth"].callback, request) request.user = SuperUser() assert not did_disallow(urls["test-auth"].callback, request) assert not did_disallow(urls["test-perm"].callback, request) assert not did_disallow(urls["test-unauth"].callback, request)
def test_url_auth(rf): def did_disallow(view, request): try: return isinstance(view(request), HttpResponseRedirect) except Problem as prob: return True # Problems are fine here with replace_modules([ATestModule]): urls = dict((u.name, u) for u in get_module_urls()) request = rf.get("/") request.user = AnonymousUser() assert did_disallow(urls["test-auth"].callback, request) assert did_disallow(urls["test-perm"].callback, request) assert not did_disallow(urls["test-unauth"].callback, request) request.user = AuthenticatedUser() assert did_disallow(urls["test-auth"].callback, request) assert did_disallow(urls["test-perm"].callback, request) assert not did_disallow(urls["test-unauth"].callback, request) request.user = StaffUser() assert not did_disallow(urls["test-auth"].callback, request) assert did_disallow(urls["test-perm"].callback, request) assert not did_disallow(urls["test-unauth"].callback, request) request.user = SuperUser() # Can access all assert not did_disallow(urls["test-auth"].callback, request) assert not did_disallow(urls["test-perm"].callback, request) assert not did_disallow(urls["test-unauth"].callback, request)
def test_dashboard_blocks(rf): request = rf.get("/") with replace_modules([ATestModule]): block_ids = set() for block in chain(*(m.get_dashboard_blocks(request) for m in get_modules())): block_ids.add(block.id) assert block_ids >= set(["test-0", "test-1", "test-2", "test-3", "test-4"])
def test_permission_group_form_updates_members(regular_user): with replace_modules([ARestrictedTestModule]): modules = [m for m in get_modules()] test_module = modules[0] module_permissions = test_module.get_required_permissions() assert module_permissions group = get_default_permission_group() PermissionGroupForm(instance=group, prefix=None) assert not group.permissions.all() assert not group.user_set.all() data = { "name": "New Name", "members": [force_text(regular_user.pk)], } for permission in ARestrictedTestModule().get_required_permissions(): data["perm:%s" % permission] = permission form = PermissionGroupForm(instance=group, prefix=None, data=data) form.save() assert group.name == "New Name" assert set(module_permissions) == get_permissions_from_group(group) assert regular_user in group.user_set.all() form = PermissionGroupForm(instance=group, prefix=None, data={"name": "Name"}) form.save() assert not group.permissions.all() assert not group.user_set.all()
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 = [ 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 request.user.permissions = [] categories = get_menu_entry_categories(request) assert not categories
def test_permission_group_form_updates_members(regular_user): with replace_modules([ARestrictedTestModule]): modules = [m for m in get_modules()] test_module = modules[0] module_permissions = test_module.get_required_permissions() assert module_permissions group = get_default_permission_group() form = PermissionGroupForm(instance=group, prefix=None) assert not group.permissions.all() assert not group.user_set.all() data = { "name": "New Name", "modules": [force_text(test_module.name)], "members": [force_text(regular_user.pk)], } form = PermissionGroupForm(instance=group, prefix=None, data=data) form.save() module_permissions = [get_permission_object_from_string(m) for m in module_permissions] assert group.name == "New Name" assert set(module_permissions) == set(group.permissions.all()) assert regular_user in group.user_set.all() form = PermissionGroupForm(instance=group, prefix=None, data={"name": "Name"}) form.save() assert not group.permissions.all() assert not group.user_set.all()
def test_reports_admin_permissions(rf): shop = get_default_shop() # We need a shop to exists staff_user = get_default_staff_user(shop) permission_group = get_default_permission_group() staff_user.groups.add(permission_group) request = apply_request_middleware(rf.get("/"), user=staff_user) request.user = staff_user with replace_modules([ReportsAdminModule]): with override_provides("reports", REPORTS): extra_permissions = ReportsAdminModule().get_extra_permissions() assert len(extra_permissions) == 3 assert SalesReport.identifier in extra_permissions assert TotalSales.identifier in extra_permissions assert SalesPerHour.identifier in extra_permissions with admin_only_urls(): view_func = ReportView.as_view() response = view_func(request) response.render() response = view_func(request, pk=None) # "new mode" response.render() assert response.content soup = BeautifulSoup(response.content) assert soup.find("div", {"class": "content-block"}).text == "No reports available" expected_report_identifiers = [] for report_cls in [SalesReport, TotalSales, SalesPerHour]: expected_report_identifiers.append(report_cls.identifier) set_permissions_for_group(permission_group, [report_cls.identifier]) response = view_func(request, pk=None) # "new mode" response.render() assert response.content soup = BeautifulSoup(response.content) for option in soup.find("select", {"id": "id_report"}).findAll("option"): assert option["value"] in expected_report_identifiers
def test_product_edit_view_with_params(rf, admin_user): get_default_shop() sku = "test-sku" name = "test name" request = apply_request_middleware(rf.get("/", { "name": name, "sku": sku }), user=admin_user) with replace_modules([ CategoryModule, ImportAdminModule, ProductModule, MediaModule, ProductTypeModule, ManufacturerModule, PaymentMethodModule, ShippingMethodModule, ]): with admin_only_urls(): view_func = ProductEditView.as_view() response = view_func(request) assert sku in response.rendered_content # it's probable the SKU is there assert name in response.rendered_content # it's probable the name is there
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_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_search(rf): request = rf.get("/") with replace_modules([ATestModule]): assert any(sr.to_json()["text"] == "yes" for sr in get_search_results(request, "yes")) assert any( sr.url == "/OK" for sr in get_search_results(request, "spooky")) # Test aliases assert any(sr.target == "_blank" for sr in get_search_results(request, "yes"))
def test_search(client, rf): if "shuup.guide" not in settings.INSTALLED_APPS: pytest.skip("Need shuup.guide in INSTALLED_APPS") request = rf.get("/") search_term = "customer" request.session = client.session with replace_modules([GuideAdminModule]): with override_settings(SHUUP_GUIDE_FETCH_RESULTS=False): results = get_search_results(request, search_term) assert [r for r in results if search_term in r.text]
def test_search(rf, admin_user): request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([ATestModule]): assert any(sr.to_json()["text"] == "yes" for sr in get_search_results(request, "yes")) assert any( sr.url == "/OK" for sr in get_search_results(request, "spooky")) # Test aliases assert any(sr.target == "_blank" for sr in get_search_results(request, "yes"))
def test_product_module_search(rf, admin_user): get_default_shop() request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([ProductModule]): with admin_only_urls(): default_product = get_default_product() model_url = get_model_url(default_product) sku = default_product.sku assert any(sr.url == model_url for sr in get_search_results(request, query=sku)) # Queries work assert any(sr.is_action for sr in get_search_results(request, query=sku[:5])) # Actions work assert empty_iterable(get_search_results(request, query=sku[:2])) # Short queries don't
def test_product_edit_view_with_params(rf, admin_user): get_default_shop() sku = "test-sku" name = "test name" request = apply_request_middleware(rf.get("/", {"name": name, "sku": sku}), user=admin_user) with replace_modules([ProductModule]): with admin_only_urls(): view_func = ProductEditView.as_view() response = view_func(request) assert (sku in response.rendered_content) # it's probable the SKU is there assert (name in response.rendered_content) # it's probable the name is there
def test_dashboard_blocks_permissions(rf, client): with replace_modules([ARestrictedTestModule]): permissions = set(["shuup.add_product", "shuup.delete_product", "shuup.change_product"]) request = rf.get("/") request.user = StaffUser() request.session = client.session view = DashboardView(request=request) assert not view.get_context_data()["blocks"] request.user.permissions = permissions view = DashboardView(request=request) assert view.get_context_data()["blocks"]
def test_product_module_search(rf, admin_user): get_default_shop() request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([CategoryModule, ImportAdminModule, ProductModule, ProductTypeModule, ManufacturerModule, PaymentMethodModule, ShippingMethodModule]): with admin_only_urls(): default_product = get_default_product() model_url = get_model_url(default_product, shop=get_shop(request)) sku = default_product.sku assert any(sr.url == model_url for sr in get_search_results(request, query=sku)) # Queries work assert any(sr.is_action for sr in get_search_results(request, query=sku[:5])) # Actions work assert empty_iterable(get_search_results(request, query=sku[:2])) # Short queries don't
def test_product_module_search(rf, admin_user): get_default_shop() request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([CategoryModule, ImportAdminModule, ProductModule, MediaModule, ProductTypeModule, ManufacturerModule, PaymentMethodModule, ShippingMethodModule]): with admin_only_urls(): default_product = get_default_product() model_url = get_model_url(default_product, shop=get_shop(request)) sku = default_product.sku assert any(sr.url == model_url for sr in get_search_results(request, query=sku)) # Queries work assert any(sr.is_action for sr in get_search_results(request, query=sku[:5])) # Actions work assert empty_iterable(get_search_results(request, query=sku[:2])) # Short queries don't
def test_product_edit_view_with_params(rf, admin_user): get_default_shop() sku = "test-sku" name = "test name" request = apply_request_middleware(rf.get("/", {"name": name, "sku": sku}), user=admin_user) with replace_modules([CategoryModule, ImportAdminModule, ProductModule, MediaModule, ProductTypeModule, ManufacturerModule, PaymentMethodModule, ShippingMethodModule]): with admin_only_urls(): view_func = ProductEditView.as_view() response = view_func(request) assert (sku in response.rendered_content) # it's probable the SKU is there assert (name in response.rendered_content) # it's probable the name is there
def test_campaigned_product_view(rf, admin_user): shop = get_default_shop() product = create_product("test-product", shop, default_price=200) shop_product = product.get_shop_instance(shop) request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([ProductModule]): with admin_only_urls(): render_product_view(product, request) product2 = create_product("test-product2") render_product_view(product2, request) # should not break even though shop_product is not available
def test_campaigned_product_view(rf, admin_user): shop = get_default_shop() product = create_product("test-product", shop, default_price=200) shop_product = product.get_shop_instance(shop) request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([CategoryModule, ImportAdminModule, ProductModule, ProductTypeModule, ManufacturerModule, PaymentMethodModule, ShippingMethodModule]): with admin_only_urls(): render_product_view(shop_product, request) product2 = create_product("test-product2", shop) sp2 = product2.get_shop_instance(shop) render_product_view(sp2, request) # should not break even though shop_product is not available
def test_campaigned_product_view(rf, admin_user): shop = get_default_shop() product = create_product("test-product", shop, default_price=200) shop_product = product.get_shop_instance(shop) request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([CategoryModule, ImportAdminModule, ProductModule, MediaModule, ProductTypeModule, ManufacturerModule, PaymentMethodModule, ShippingMethodModule]): with admin_only_urls(): render_product_view(shop_product, request) product2 = create_product("test-product2", shop) sp2 = product2.get_shop_instance(shop) render_product_view(sp2, request) # should not break even though shop_product is not available
def test_product_edit_view_works_at_all(rf, admin_user): shop = get_default_shop() product = create_product("test-product", shop, default_price=200) shop_product = product.get_shop_instance(shop) shop_product.visibility_limit = ProductVisibility.VISIBLE_TO_GROUPS shop_product.save() request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([ProductModule]): with admin_only_urls(): view_func = ProductEditView.as_view() response = view_func(request, pk=product.pk) assert (product.sku in response.rendered_content) # it's probable the SKU is there response = view_func(request, pk=None) # "new mode" assert response.rendered_content # yeah, something gets rendered
def test_currency_edit_view_works_at_all(rf, admin_user): get_default_shop() # We need a shop to exists request = apply_request_middleware(rf.get("/"), user=admin_user) request.user = admin_user currency = get_default_currency() with replace_modules([CurrencyModule]): view_func = CurrencyEditView.as_view() response = view_func(request, pk=currency.pk) response.render() assert (currency.code in force_text(response.content)) response = view_func(request, pk=None) # "new mode" response.render() assert response.content
def test_dashboard_blocks_permissions(rf, client): with replace_modules([ARestrictedTestModule]): request = rf.get("/") request.user = get_default_staff_user(get_default_shop()) # Dashboard permission is added by default request.session = client.session view = DashboardView(request=request) assert not view.get_context_data()["blocks"] # By default there is only dashboard permission so to be # able to see some blocks permission to some admin module # providing dashboard bocks needed. set_permissions_for_group( request.user.groups.first(), set("dashboard") | set(ARestrictedTestModule().get_required_permissions()) ) view = DashboardView(request=request) assert view.get_context_data()["blocks"]
def test_tax_edit_view_works_at_all(rf, admin_user): get_default_shop() # We need a shop to exists request = apply_request_middleware(rf.get("/"), user=admin_user) request.user = admin_user default_tax_class = get_default_tax_class() with replace_modules([TaxModule]): with admin_only_urls(): view_func = TaxClassEditView.as_view() response = view_func(request, pk=default_tax_class.pk) response.render() assert (default_tax_class.name in force_text(response.content)) response = view_func(request, pk=None) # "new mode" response.render() assert response.content
def test_tax_edit_view_works_at_all(rf, admin_user): get_default_shop() # We need a shop to exists request = apply_request_middleware(rf.get("/")) request.user = admin_user default_tax_class = get_default_tax_class() with replace_modules([TaxModule]): with admin_only_urls(): view_func = TaxClassEditView.as_view() response = view_func(request, pk=default_tax_class.pk) response.render() assert (default_tax_class.name in force_text(response.content)) response = view_func(request, pk=None) # "new mode" response.render() assert response.content
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_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_activity(rf): with replace_modules([ATestModule]): request = rf.get("/") texts = [a.text for a in get_activity(request, 10)] # Check that activity is returned in newest-first order. assert texts == ["Latest", "Later", "Earlier", "Earliest"]
def test_module_loading_and_urls(): with replace_modules([ATestModule, "shuup_tests.admin.fixtures.test_module:ATestModule"]): assert all(u.name.startswith("test") for u in get_module_urls())
def test_notifications(rf): request = rf.get("/") with replace_modules([ATestModule]): assert any(n.text == "OK" for n in chain(*(m.get_notifications(request) for m in get_modules())))
def test_search(rf): request = rf.get("/") with replace_modules([ATestModule]): assert any(sr.to_json()["text"] == "yes" for sr in get_search_results(request, "yes")) assert any(sr.url == "/OK" for sr in get_search_results(request, "spooky")) # Test aliases assert any(sr.target == "_blank" for sr in get_search_results(request, "yes"))
def test_search(rf, admin_user): request = apply_request_middleware(rf.get("/"), user=admin_user) with replace_modules([ATestModule]): assert any(sr.to_json()["text"] == "yes" for sr in get_search_results(request, "yes")) assert any(sr.url == "/OK" for sr in get_search_results(request, "spooky")) # Test aliases assert any(sr.target == "_blank" for sr in get_search_results(request, "yes"))
def test_module_loading_and_urls(): with replace_modules([ ATestModule, "shuup_tests.admin.fixtures.test_module:ATestModule" ]): assert all(u.name.startswith("test") for u in get_module_urls())
def test_activity(rf): with replace_modules([ATestModule]): request = rf.get("/") texts = [a.text for a in get_activity(request, 10)] # Check that activity is returned in newest-first order. assert texts == ["Latest", "Later", "Earlier", "Earliest" ]