def test_region_views(rf, admin_user): get_default_shop() view = load( "shuup_shipping_table.admin.views.region.RegionListView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200 view = load( "shuup_shipping_table.admin.views.region.RegionEditView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200 view = load( "shuup_shipping_table.admin.views.region.RegionDeleteView").as_view() request = apply_request_middleware(rf.post("/"), user=admin_user) with pytest.raises(Http404): response = view(request, pk=1) view = load( "shuup_shipping_table.admin.views.region.RegionImportView").as_view() request = apply_request_middleware(rf.post("/"), user=admin_user) response = view(request) assert response.status_code == 302 view = load( "shuup_shipping_table.admin.views.region.RegionExportView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200
def test_region_views(rf, admin_user): get_default_shop() view = load("shuup_shipping_table.admin.views.region.RegionListView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200 view = load("shuup_shipping_table.admin.views.region.RegionEditView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200 view = load("shuup_shipping_table.admin.views.region.RegionDeleteView").as_view() request = apply_request_middleware(rf.post("/"), user=admin_user) with pytest.raises(Http404): response = view(request, pk=1) view = load("shuup_shipping_table.admin.views.region.RegionImportView").as_view() request = apply_request_middleware(rf.post("/"), user=admin_user) response = view(request) assert response.status_code == 302 view = load("shuup_shipping_table.admin.views.region.RegionExportView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200
def dispatch(self, request, *args, **kwargs): module_str = "%s:%s" % (request.GET.get("module"), request.GET.get("model")) self.return_url = reverse("shuup_admin:%s.list" % request.GET.get("return_url")) match = resolve(self.return_url) default_columns = load("%s:%s" % (match.func.__module__, match.func.__name__)).default_columns self.model = load(module_str) self.settings = ViewSettings(self.model, default_columns) return super(ListSettingsView, self).dispatch(request, *args, **kwargs)
def dispatch(self, request, *args, **kwargs): module_str = "%s:%s" % (request.GET.get("module"), request.GET.get("model")) self.return_url = reverse("shuup_admin:%s.list" % request.GET.get("return_url")) match = resolve(self.return_url) view_context = load("%s:%s" % (match.func.__module__, match.func.__name__)) default_columns = view_context.default_columns self.model = load(module_str) self.settings = ViewSettings(self.model, default_columns, view_context) return super(ListSettingsView, self).dispatch(request, *args, **kwargs)
def test_iframe_mode(rf, admin_user, extra_query_param, extra_query_value, expected_script): get_default_shop() view = load("shuup.admin.modules.categories.views:CategoryEditView").as_view() request = apply_request_middleware(rf.get("/", {"mode": "iframe"}), user=admin_user) response = view(request) if hasattr(response, "render"): response.render() assert 200 <= response.status_code < 300 content = force_text(response.content) post = extract_form_fields(BeautifulSoup(content, "lxml")) post.update({ "base-name__en": "Name" }) post.pop("base-image") # save iframe mode request = apply_request_middleware(rf.post("/", post), user=admin_user) request.GET = request.GET.copy() request.GET["mode"] = "iframe" if extra_query_param: request.GET[extra_query_param] = extra_query_value response = view(request) assert response.status_code == 302 client = Client() client.login(username="******", password="******") response = client.get(response.url) assert response.status_code == 200 assert expected_script in force_text(response.content)
def _configure_basket(request): """ Search for some needed keys in the checkout phases storages """ # (src key, destination key) pair search_keys = [ ('payment_method_id', 'payment_method_id'), ('shipping_method_id', 'shipping_method_id'), ('shipping', 'shipping_address'), ('shipping_extra', 'shipping_address_extra'), ('payment', 'payment_address'), ('payment_extra', 'payment_address_extra'), ] for phase in cached_load("SHUUP_CHECKOUT_VIEW_SPEC").phase_specs: phase_class = load(phase) storage = CheckoutPhaseStorage(request, phase_class.identifier) for key, dst_key in search_keys: value = storage.get(key) # key found, set it to request.basket on dst_key if value: setattr(request.basket, dst_key, value)
def test_tour_view(rf, admin_user): shop = get_default_shop() assert is_tour_complete(shop, "home", admin_user) is False view = load("shuup.admin.views.tour:TourView").as_view() request = apply_request_middleware(rf.post("/", data={"tourKey": "home"}), user=admin_user) view(request) assert is_tour_complete(shop, "home", admin_user)
def test_list_view(rf, admin_user): shop = factories.get_default_shop() product = factories.create_product(sku="test", shop=shop) shop_product = product.get_shop_instance(shop) shop_product.primary_category = factories.get_default_category() shop_product.save() shop_product.categories.add(shop_product.primary_category) view = load("shuup.admin.modules.products.views: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 data = json.loads(response.content.decode("utf-8")) product_data = [ item for item in data["items"] if item["_id"] == shop_product.pk ][0] assert product_data["primary_category"] == factories.get_default_category( ).name assert product_data["categories"] == factories.get_default_category().name assert product_data["categories"] == factories.get_default_category().name # Suppliers not available by default since multiple suppliers is not enabled assert "suppliers" not in product_data
def _load_phases(self): phases = OrderedDict() for phase_spec in self.phase_specs: phase_class = load(phase_spec) phases[phase_class.identifier] = self.instantiate_phase_class( phase_class) return list(phases.values())
def get_context_data(self, **kwargs): context = super(CartDetailView, self).get_context_data(**kwargs) basket_class = None if self.object.class_spec: basket_class = load(self.object.class_spec) if not basket_class: basket_class = cached_load("SHUUP_BASKET_CLASS_SPEC") basket = basket_class(self.request, basket_name=self.object.key, shop=self.object.shop) context["basket"] = basket sources = [ basket.shipping_address, basket.billing_address, basket.customer, basket.orderer, ] fields = ("email", "phone", "tax_number") for field in fields: for source in sources: val = getattr(source, field, None) if val: context[field] = val break return context
def test_list_view(rf, admin_user): shop = factories.get_default_shop() supplier = get_simple_supplier() product = factories.create_product(sku="test", shop=shop, supplier=supplier) shop_product = product.get_shop_instance(shop) shop_product.primary_category = factories.get_default_category() shop_product.save() shop_product.categories.add(shop_product.primary_category) view = load( "shuup.simple_supplier.admin_module.views:StocksListView").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 data = json.loads(response.content.decode("utf-8")) for item in data["items"]: assert item["_url"] == ""
def dispatch(self, request, *args, **kwargs): module_str = "%s:%s" % (request.GET.get("module"), request.GET.get("model")) self.return_url = request.GET.get("return_url") self.model = load(module_str) self.settings = ViewSettings(self.model, []) return super(ListSettingsView, self).dispatch(request, *args, **kwargs)
def test_list_view(rf, admin_user): shop = factories.get_default_shop() parent_category = factories.CategoryFactory(status=CategoryStatus.VISIBLE) parent_category.shops.add(shop) child_category = factories.CategoryFactory(status=CategoryStatus.VISIBLE) child_category.parent = parent_category child_category.save() child_category.shops.add(shop) view = load( "shuup.admin.modules.categories.views:CategoryListView").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 data = json.loads(response.content.decode("utf-8")) parent_data = _get_item_data(data, parent_category) assert _get_abstract_header(parent_data) == parent_category.name child_data = _get_item_data(data, child_category) assert _get_abstract_header(child_data) == child_category.name
def admin_url(regex, view, kwargs=None, name=None, prefix="", require_authentication=True, permissions=None): if permissions is None: permissions = (name, ) if name else () if isinstance(view, six.string_types): if not view: raise ImproperlyConfigured( "Error! Empty URL pattern view name not permitted (for pattern `%r`)." % regex) if prefix: view = prefix + "." + view view = importing.load(view) return AdminRegexURLPattern(regex, view, kwargs, name, require_authentication=require_authentication, permissions=permissions)
def test_list_view(rf, class_spec): view = load(class_spec).as_view() request = rf.get("/", { "jq": json.dumps({"perPage": 100, "page": 1}) }) response = view(request) assert 200 <= response.status_code < 300
def test_iframe_mode(rf, admin_user, extra_query_param, extra_query_value, expected_script): get_default_shop() view = load( "shuup.admin.modules.categories.views:CategoryEditView").as_view() request = apply_request_middleware(rf.get("/", {"mode": "iframe"}), user=admin_user) response = view(request) if hasattr(response, "render"): response.render() assert 200 <= response.status_code < 300 content = force_text(response.content) post = extract_form_fields(BeautifulSoup(content, "lxml")) post.update({"base-name__en": "Name"}) post.pop("base-image") # save iframe mode request = apply_request_middleware(rf.post("/", post), user=admin_user) request.GET = request.GET.copy() request.GET["mode"] = "iframe" if extra_query_param: request.GET[extra_query_param] = extra_query_value response = view(request) assert response.status_code == 302 client = Client() client.login(username="******", password="******") response = client.get(response.url) assert response.status_code == 200 assert expected_script in force_text(response.content)
def _build_settings_columns(self): columns = [] all_models = [(None, self.model)] defaults = [col.id for col in self.default_columns] known_names = [] for identifier, m in self.view_context.related_objects: all_models.append((identifier, load(m))) for identifier, model in all_models: if hasattr(model, "_parler_meta"): self._add_translated_columns(columns, defaults, identifier, known_names, model) self._add_local_columns(all_models, columns, defaults, identifier, known_names, model) self._add_m2m_columns(all_models, columns, defaults, identifier, known_names, model) self._add_provided_columns(columns, identifier, known_names, model) table_columns = set([col.id for col in columns]) for default_column in self.default_columns: if default_column.id not in table_columns and default_column.id != "select": columns.append(default_column) return columns
def test_list_view(rf, class_spec, admin_user): shop = get_default_shop() view = load(class_spec).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
def test_carrier_views(rf, admin_user): get_default_shop() view = load("shuup_shipping_table.admin.views.carrier.CarrierListView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200 view = load("shuup_shipping_table.admin.views.carrier.CarrierEditView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200 view = load("shuup_shipping_table.admin.views.carrier.CarrierDeleteView").as_view() request = apply_request_middleware(rf.post("/"), user=admin_user) with pytest.raises(Http404): response = view(request, pk=1)
def test_list_view_with_multiple_suppliers(rf, admin_user): shop = factories.get_default_shop() product = factories.create_product(sku="test", shop=shop) shop_product = product.get_shop_instance(shop) shop_product.primary_category = factories.get_default_category() shop_product.save() shop_product.categories.add(shop_product.primary_category) # Also one product with supplier supplier = factories.get_default_supplier() product2 = factories.create_product(sku="test2", shop=shop, supplier=supplier) shop_product2 = product2.get_shop_instance(shop) shop_product2.primary_category = factories.get_default_category() shop_product2.save() shop_product2.categories.add(shop_product.primary_category) with override_settings(SHUUP_ENABLE_MULTIPLE_SUPPLIERS=True): view = load("shuup.admin.modules.products.views: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 data = json.loads(response.content.decode("utf-8")) assert len(data["items"]) == 2 product_data = [item for item in data["items"] if item["_id"] == shop_product.pk][0] assert product_data["primary_category"] == factories.get_default_category().name assert product_data["categories"] == factories.get_default_category().name assert product_data["categories"] == factories.get_default_category().name assert product_data["suppliers"] == "" product_data2 = [item for item in data["items"] if item["_id"] == shop_product2.pk][0] assert product_data2["suppliers"] == factories.get_default_supplier().name with override_settings(SHUUP_ADMIN_SUPPLIER_PROVIDER_SPEC="shuup.testing.supplier_provider.FirstSupplierProvider"): view = load("shuup.admin.modules.products.views: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 data = json.loads(response.content.decode("utf-8")) assert len(data["items"]) == 1
def load_setup_wizard_panes(shop, request=None, visible_only=True): panes = [] for pane_spec in getattr(settings, "SHUUP_SETUP_WIZARD_PANE_SPEC", []): pane_class = load(pane_spec) pane_inst = pane_class(request=request, object=shop) if not visible_only or pane_inst.visible(): panes.append(pane_inst) return panes
def encode_enum(enum_val): enum_cls = enum_val.__class__ spec = "%s:%s" % (enum_cls.__module__, enum_cls.__name__) try: if load(spec) != enum_cls: raise ImproperlyConfigured("That's not the same class!") except ImproperlyConfigured: # Also raised by `load` return enum_val.value # Fall back to the bare value. return [spec, enum_val.value]
def encode_enum(enum_val): enum_cls = enum_val.__class__ spec = "%s:%s" % (enum_cls.__module__, enum_cls.__name__) try: if load(spec) != enum_cls: raise ImproperlyConfigured("Error! That's not the same class.") except ImproperlyConfigured: # Also raised by `load` return enum_val.value # Fall back to the bare value. return [spec, enum_val.value]
def test_detail_view(rf, admin_user, model_and_class): get_default_shop() # obvious prerequisite model_func, class_spec = model_and_class model = model_func() view = load(class_spec).as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request, pk=model.pk) if hasattr(response, "render"): response.render() assert 200 <= response.status_code < 300
def get_order_identifier(order): if order.identifier: raise ValueError("Order passed to get_order_identifier() already has an identifier") order_identifier_method = settings.SHUUP_ORDER_IDENTIFIER_METHOD if order_identifier_method == "id": return force_text(order.id) elif callable(order_identifier_method): return order_identifier_method(order) else: getter = load(order_identifier_method, "Order identifier generator") return getter(order)
def test_carrier_views(rf, admin_user): get_default_shop() view = load( "shuup_shipping_table.admin.views.carrier.CarrierListView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200 view = load( "shuup_shipping_table.admin.views.carrier.CarrierEditView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200 view = load("shuup_shipping_table.admin.views.carrier.CarrierDeleteView" ).as_view() request = apply_request_middleware(rf.post("/"), user=admin_user) with pytest.raises(Http404): response = view(request, pk=1)
def _load_provide_objects(category): provide_specs = _get_provide_specs_from_apps(category) loaded_provides = _loaded_provides[category] if set(provide_specs) != set(loaded_provides.keys()): # Changes occurred, reload provides _uncache(category) explanation = "Loading provides %s" % category loaded_provides = OrderedDict() for spec in provide_specs: loaded_provides[spec] = load(spec, explanation) _loaded_provides[category] = loaded_provides return _loaded_provides.get(category, {})
def get_order_identifier(order): if order.identifier: raise ValueError("Error! Order passed to function `get_order_identifier()` already has an identifier.") order_identifier_method = settings.SHUUP_ORDER_IDENTIFIER_METHOD if order_identifier_method == "id": return force_text(order.id) elif callable(order_identifier_method): return order_identifier_method(order) else: getter = load(order_identifier_method, "Order identifier generator") return getter(order)
def test_toolbar_button(rf, admin_user): shop = get_default_shop() supplier = get_default_supplier() product = create_product("simple-test-product", shop) order = create_order_with_product(product, supplier, 6, 6, shop=shop) view = load("shuup.admin.modules.orders.views.OrderDetailView").as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request, pk=order.pk) expected_button_class = "SimplePrintoutsToolbarButton" toolbar = response.context_data.get("toolbar") assert any(button.__class__.__name__ == expected_button_class for button in toolbar) assert response.status_code == 200
def load_mass_actions(self): # TODO: Make extendable through provides in near future actions = [] for action in self.mass_actions: obj = load(action)() redirects = isinstance(obj, PicotableRedirectMassAction) actions.append({ "key": obj.identifier, "value": obj.label, "redirects": redirects, "redirect_url": obj.redirect_url if redirects else None }) return actions
def load_mass_actions(self): actions = [] for action in self._get_mass_actions(): obj = load(action)() action_data = {} extra_data = obj.get_action_info(self.request) if extra_data and isinstance(extra_data, dict): action_data.update(extra_data) action_data.update({"key": obj.identifier, "value": obj.label}) actions.append(action_data) return actions
def admin_url(regex, view, kwargs=None, name=None, prefix='', require_authentication=True, permissions=()): if isinstance(view, six.string_types): if not view: raise ImproperlyConfigured('Empty URL pattern view name not permitted (for pattern %r)' % regex) if prefix: view = prefix + '.' + view view = importing.load(view) return AdminRegexURLPattern( regex, view, kwargs, name, require_authentication=require_authentication, permissions=permissions )
def _load_phases(self): phases = OrderedDict() for phase_spec in self.phase_specs: phase_class = load(phase_spec) phase = self.instantiate_phase_class(phase_class) phases[phase_class.identifier] = phase # check whether the phase spawns new phases, # if so, then let's spawn then and add the phases for spawned_phase in phase.spawn_phases(self): phases[spawned_phase.identifier] = spawned_phase return list(phases.values())
def load_mass_actions(self): # TODO: Make extendable through provides in near future actions = [] for action in self.mass_actions: obj = load(action)() action_data = {} extra_data = obj.get_action_info(self.request) if extra_data and isinstance(extra_data, dict): action_data.update(extra_data) action_data.update({"key": obj.identifier, "value": obj.label}) actions.append(action_data) return actions
def _load_module(self): spec = self.default_module_spec module_identifier = self.module_identifier if module_identifier: impls = self.get_module_implementation_map() if module_identifier not in impls: raise ModuleNotFound( "Invalid module identifier %r in %s" % (module_identifier, force_ascii(repr(self))) ) spec = impls[module_identifier] cls = load(spec, context_explanation="Loading module for %s" % force_ascii(repr(self))) options = getattr(self, self.module_options_field, None) or {} return cls(self, options)
def get_reference_number(order): if order.reference_number: raise ValueError("Order passed to get_reference_number() already has a reference number") reference_number_method = settings.SHUUP_REFERENCE_NUMBER_METHOD if reference_number_method == "unique": return get_unique_reference_number(order) elif reference_number_method == "running": return get_running_reference_number(order) elif reference_number_method == "shop_running": return get_shop_running_reference_number(order) elif callable(reference_number_method): return reference_number_method(order) else: getter = load(reference_number_method, "Reference number generator") return getter(order)
def test_list_view(rf, class_spec, admin_user): get_default_shop() view = load(class_spec).as_view() # normal request request = apply_request_middleware(rf.get("/"), user=admin_user) response = view(request) assert response.status_code == 200 # picotable request 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
def load_setup_wizard_panes(shop, request=None, visible_only=True): """ Load the setup Wizard panes. The result will be a list of valid pane instances. :type request: HttpRequest|None :param visible_only: whether to return only visible panes :type visible_only: bool """ panes = [] for pane_spec in getattr(settings, "SHUUP_SETUP_WIZARD_PANE_SPEC", []): pane_class = load(pane_spec) pane_inst = pane_class(request=request, object=shop) if pane_inst.valid() and (not visible_only or pane_inst.visible()): panes.append(pane_inst) return panes
def load_mass_actions(self): actions = [] for action in self._get_mass_actions(): obj = load(action)() action_data = {} extra_data = obj.get_action_info(self.request) if extra_data and isinstance(extra_data, dict): action_data.update(extra_data) action_data.update({ "key": obj.identifier, "value": obj.label }) actions.append(action_data) return actions
def load(cls, identifier, theme=None): """ Get a plugin class based on the identifier from the `xtheme_plugin` provides registry. :param identifier: Plugin class identifier :type identifier: str :return: A plugin class, or None :rtype: class[Plugin]|None """ loaded_plugin = get_identifier_to_object_map("xtheme_plugin").get(identifier) if not loaded_plugin and theme is not None: for plugin_spec in theme.plugins: plugin = load(plugin_spec) if plugin.identifier == identifier: return plugin return loaded_plugin
def load_setup_wizard_pane(shop, request, pane_id): """ Search, load and return a valid Wizard Pane by its identifier. :type request: HttpRequest :param pane_id: the pane identifier :type pane_id: str :return: the pane instance or None :rtype: shuup.admin.views.wizard.WizardPane|None """ for pane_spec in getattr(settings, "SHUUP_SETUP_WIZARD_PANE_SPEC", []): pane_class = load(pane_spec) pane_inst = pane_class(request=request, object=shop) if pane_inst.identifier == pane_id and pane_inst.valid(): return pane_inst
def admin_url(regex, view, kwargs=None, name=None, prefix='', require_authentication=True, permissions=None): if permissions is None: permissions = ((name,) if name else ()) if isinstance(view, six.string_types): if not view: raise ImproperlyConfigured('Empty URL pattern view name not permitted (for pattern %r)' % regex) if prefix: view = prefix + '.' + view view = importing.load(view) return AdminRegexURLPattern( regex, view, kwargs, name, require_authentication=require_authentication, permissions=permissions )
def test_menu_view(rf, admin_user): get_default_shop() # obvious prerequisite view = load("shuup.admin.views.menu:MenuToggleView").as_view() request = apply_request_middleware(rf.post("/"), user=admin_user) assert "menu_open" not in request.session response = view(request) if hasattr(response, "render"): response.render() assert response.status_code == 200 assert not request.session["menu_open"] # Menu closed response = view(request) if hasattr(response, "render"): response.render() assert response.status_code == 200 assert request.session["menu_open"] # Menu open
def view(request, *args, **kwargs): handler_attr = HANDLER_ATTR_FMT % error_status # look for compatible error handlers for handler_spec in settings.SHUUP_ERROR_PAGE_HANDLERS_SPEC: handler = load(handler_spec)() # return a response for the error status if handler.can_handle_error(request, error_status): return handler.handle_error(request, error_status) # tries to use the default handler (set in django's root urlconf) # otherwise just a blank response fallback_handler = _URLCONF_ERROR_HANDLERS.get(handler_attr) if fallback_handler and callable(fallback_handler): return fallback_handler(request) else: return HttpResponse(status=error_status)
def test_list_view(rf, admin_user): shop = factories.get_default_shop() product = factories.create_product(sku="test", shop=shop) shop_product = product.get_shop_instance(shop) shop_product.primary_category = factories.get_default_category() shop_product.save() shop_product.categories.add(shop_product.primary_category) view = load("shuup.admin.modules.products.views: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 data = json.loads(response.content.decode("utf-8")) product_data = [item for item in data["items"] if item["_id"] == shop_product.pk][0] assert product_data["primary_category"] == factories.get_default_category().name assert product_data["categories"] == factories.get_default_category().name
def get_reference_number(order): from shuup import configuration from shuup.admin.modules.settings.consts import ORDER_REFERENCE_NUMBER_METHOD_FIELD if order.reference_number: raise ValueError("Order passed to get_reference_number() already has a reference number") reference_number_method = configuration.get( order.shop, ORDER_REFERENCE_NUMBER_METHOD_FIELD, settings.SHUUP_REFERENCE_NUMBER_METHOD) if reference_number_method == "unique": return get_unique_reference_number_for_order(order) elif reference_number_method == "running": return get_running_reference_number(order) elif reference_number_method == "shop_running": return get_shop_running_reference_number(order) elif callable(reference_number_method): return reference_number_method(order) else: getter = load(reference_number_method, "Reference number generator") return getter(order)
def test_list_view(rf, admin_user): shop = factories.get_default_shop() supplier = get_simple_supplier() product = factories.create_product(sku="test", shop=shop, supplier=supplier) shop_product = product.get_shop_instance(shop) shop_product.primary_category = factories.get_default_category() shop_product.save() shop_product.categories.add(shop_product.primary_category) view = load("shuup.simple_supplier.admin_module.views:StocksListView").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 data = json.loads(response.content.decode("utf-8")) for item in data["items"]: assert item["_url"] == ""
def get_theme_plugin_choices(self, empty_label=None): """ Get a sorted list of 2-tuples (identifier and name) of available theme specific Xtheme plugins. Handy for `<select>` boxes. :param empty_label: Label for the "empty" choice. If falsy, no empty choice is prepended :type empty_label: str|None :return: List of 2-tuples :rtype: Iterable[tuple[str, str]] """ choices = [] if empty_label: choices.append(("", empty_label)) for plugin_spec in self.plugins: plugin = load(plugin_spec) choices.append(( plugin.identifier, getattr(plugin, "name", None) or plugin.identifier )) choices.sort() return choices
def test_detail_view(rf, admin_user, model_and_class): get_default_shop() # obvious prerequisite model_func, class_spec = model_and_class model = model_func() view = load(class_spec).as_view() request = apply_request_middleware(rf.get("/"), user=admin_user) if model_func == get_default_product: pk = model.shop_products.first().pk else: pk = model.pk response = view(request, pk=pk) if hasattr(response, "render"): response.render() assert 200 <= response.status_code < 300 # request with iframe mode request = apply_request_middleware(rf.get("/", {"mode": "iframe"}), user=admin_user) response = view(request, pk=pk) if hasattr(response, "render"): response.render() assert 200 <= response.status_code < 300