def test_get_installments_12x_with_simples_intereset(): """ Max 12 installs with PRICE intereset interest_rate = 2.30% min_installment_amount = 30.00 """ patch_cielo_request() shop = get_default_shop() create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') c = SmartClient() _configure_basket(c) cielo_config = CieloConfig.objects.create(shop=shop, max_installments=12, installments_without_interest=2, interest_type=InterestType.Price, interest_rate=Decimal(2.3), min_installment_amount=Decimal(30)) order_total = (PRODUCT_QTNTY * PRODUCT_PRICE) installment_choices = InstallmentContext(order_total, cielo_config).get_intallments_choices() response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == len(installment_choices) for installment in range(len(installment_choices)): total = format_money(shop.create_price(installment_choices[installment][2])) installment_amount = format_money(shop.create_price(installment_choices[installment][1])) assert json_content['installments'][installment]['number'] == installment+1 assert installment_amount in json_content['installments'][installment]['name'] assert total in json_content['installments'][installment]['name']
def test_get_installments_cc_does_not_allow_installments(): """ Max 9 installs with SIMPLE intereset interest_rate = 4.00% Credit card does not allow installments """ patch_cielo_request() shop = get_default_shop() create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') c = SmartClient() _configure_basket(c) CieloConfig.objects.create(shop=shop, max_installments=9, installments_without_interest=3, interest_type=InterestType.Simple, interest_rate=Decimal(4.0)) order_total = (PRODUCT_QTNTY * PRODUCT_PRICE) total_price_str = "{0}".format(format_money( shop.create_price(order_total))) response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Discover}) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == 1 assert json_content['installments'][0]['number'] == 1 assert total_price_str in json_content['installments'][0]['name']
def test_ratings_plugin(show_recommenders, title): shop = factories.get_default_shop() product = factories.create_product("product", shop=shop, supplier=factories.get_default_supplier()) # create 15 reviews for the product [create_random_review_for_product(shop, product) for _ in range(15)] set_current_theme(ClassicGrayTheme.identifier, shop) svc = SavedViewConfig( theme_identifier=ClassicGrayTheme.identifier, shop=shop, view_name="ProductDetailView", status=SavedViewConfigStatus.CURRENT_DRAFT ) layout = Layout(get_current_theme(shop), "product_extra_2") layout.add_plugin(ProductReviewStarRatingsPlugin.identifier, { "customer_ratings_title": { "en": title }, "show_recommenders": show_recommenders }) svc.set_layout_data(layout.placeholder_name, layout) svc.save() svc.publish() client = Client() response = client.get(reverse("shuup:product", kwargs=dict(pk=product.pk, slug=product.slug))) assert response.status_code == 200 response.render() content = response.content.decode("utf-8") assert "product-reviews-rating-star" in content assert 'class="rating"' in content assert ('class="recommend"' in content) == show_recommenders assert title in content
def test_comments_plugin(title): shop = factories.get_default_shop() product = factories.create_product( "product", shop=shop, supplier=factories.get_default_supplier()) # create 15 reviews for the product [create_random_review_for_product(shop, product) for _ in range(15)] set_current_theme(ClassicGrayTheme.identifier, shop) svc = SavedViewConfig(theme_identifier=ClassicGrayTheme.identifier, shop=shop, view_name="ProductDetailView", status=SavedViewConfigStatus.CURRENT_DRAFT) layout = Layout(get_current_theme(shop), "product_bottom") layout.add_plugin(ProductReviewCommentsPlugin.identifier, {"title": { "en": title }}) svc.set_layout_data(layout.placeholder_name, layout) svc.save() svc.publish() client = Client() response = client.get( reverse("shuup:product", kwargs=dict(pk=product.pk, slug=product.slug))) assert response.status_code == 200 response.render() content = response.content.decode("utf-8") assert "product-review-comments" in content assert 'data-url="%s"' % reverse('shuup:product_review_comments', kwargs=dict(pk=product.pk)) in content assert 'data-title="%s"' % title in content
def test_get_installments_3x_no_intereset(): """ Max 3 installs with no intereset """ patch_cielo_request() shop = get_default_shop() create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') c = SmartClient() _configure_basket(c) CieloConfig.objects.create(shop=shop, max_installments=3, installments_without_interest=3) order_total = PRODUCT_QTNTY * PRODUCT_PRICE total_price_str = "{0}".format(format_money(shop.create_price(order_total))) response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == 3 assert json_content['installments'][0]['number'] == 1 assert total_price_str in json_content['installments'][0]['name'] total_2x_no_interest = format_money(shop.create_price(order_total / Decimal(2))) assert json_content['installments'][1]['number'] == 2 assert total_price_str in json_content['installments'][1]['name'] assert total_2x_no_interest in json_content['installments'][1]['name'] total_3x_no_interest = format_money(shop.create_price(order_total / Decimal(3))) assert json_content['installments'][2]['number'] == 3 assert total_price_str in json_content['installments'][2]['name'] assert total_3x_no_interest in json_content['installments'][2]['name']
def test_get_installments_cc_does_not_allow_installments(): """ Max 9 installs with SIMPLE intereset interest_rate = 4.00% Credit card does not allow installments """ patch_cielo_request() shop = get_default_shop() create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') c = SmartClient() _configure_basket(c) CieloConfig.objects.create(shop=shop, max_installments=9, installments_without_interest=3, interest_type=InterestType.Simple, interest_rate=Decimal(4.0)) order_total = (PRODUCT_QTNTY * PRODUCT_PRICE) total_price_str = "{0}".format(format_money(shop.create_price(order_total))) response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Discover}) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == 1 assert json_content['installments'][0]['number'] == 1 assert total_price_str in json_content['installments'][0]['name']
def initialize(): get_default_shop() set_current_theme('shuup.themes.classic_gray') create_default_order_statuses() populate_if_required() default_product = get_default_product() sp = ShopProduct.objects.get(product=default_product, shop=get_default_shop()) sp.default_price = get_default_shop().create_price(PRODUCT_PRICE) sp.save()
def initialize(): get_cielo_config() get_default_shop() set_current_theme('shuup.themes.classic_gray') create_default_order_statuses() populate_if_required() default_product = get_default_product() sp = ShopProduct.objects.get(product=default_product, shop=get_default_shop()) sp.default_price = get_default_shop().create_price(PRODUCT_PRICE) sp.save()
def _get_configured_basket_client(): """ Initialized and configure client adding product and setting address, ready to make transactions """ get_default_shop() create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') c = SmartClient() _configure_basket(c) return c
def form_valid(self, form): identifier = form["theme"].cleaned_data["activate"] data = {"settings": {"stylesheet": form["theme"].cleaned_data["selected_style"]}} theme_settings, created = ThemeSettings.objects.get_or_create( theme_identifier=identifier, shop=get_shop(self.request) ) if created: theme_settings.data = data theme_settings.save() else: theme_settings.update_settings(data["settings"]) set_current_theme(identifier, self.object) cache.bump_version(get_theme_cache_key(get_shop(self.request)))
def form_valid(self, form): identifier = form["theme"].cleaned_data["activate"] data = { "settings": { "stylesheet": form["theme"].cleaned_data["selected_style"] } } theme_settings, created = ThemeSettings.objects.get_or_create( theme_identifier=identifier, shop=get_shop(self.request) ) if created: theme_settings.data = data theme_settings.save() else: theme_settings.update_settings(data["settings"]) set_current_theme(identifier, self.object) cache.bump_version(get_theme_cache_key(get_shop(self.request)))
def test_get_installments_options_rest(): patch_cielo_request() shop = get_default_shop() c = SmartClient() # method not allowed response = c.post(INSTALLMENTS_PATH) assert response.status_code == 405 # missing parameters response = c.get(INSTALLMENTS_PATH) assert response.status_code == 400 # no CieloConfig for shop response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) assert response.status_code == 400 CieloConfig.objects.create(shop=shop) # basket not valid (no products and not payment/shipping methods) response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) assert response.status_code == 400 create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') # configures the user basket _configure_basket(c) # only 1 installment, because no configurations were set on CieloConfig response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) assert response.status_code == 200 # should be the order total order_total = PRODUCT_QTNTY * PRODUCT_PRICE total_price_str = "{0}".format(format_money( shop.create_price(order_total))) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == 1 assert json_content['installments'][0]['number'] == 1 assert total_price_str in json_content['installments'][0]['name']
def test_classic_gray_theme_settings(admin_user): with override_settings( CACHES={ 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'test_configuration_cache', } }): cache.init_cache() shop = get_default_shop() with override_provides( "xtheme", ["shuup.themes.classic_gray.theme:ClassicGrayTheme"]): set_current_theme(ClassicGrayTheme.identifier, shop) theme = _get_current_theme(shop) assert isinstance(theme, ClassicGrayTheme) ThemeSettings.objects.all().delete() client = Client() admin_user.set_password("admin") admin_user.save() client.login(username=admin_user.username, password="******") theme_config_url = reverse( "shuup_admin:xtheme.config_detail", kwargs=dict(theme_identifier=ClassicGrayTheme.identifier)) response = client.get(theme_config_url) assert response.status_code == 200 assert theme.get_setting("shop_logo_width") is None assert theme.get_setting("shop_logo_height") is None assert theme.get_setting("shop_logo_alignment") is None assert theme.get_setting("shop_logo_aspect_ratio") is None settings = {"stylesheet": "shuup/classic_gray/blue/style.css"} response = client.post(theme_config_url, data=settings) assert response.status_code == 302 theme = _get_current_theme(shop) for key, value in settings.items(): assert theme.get_setting(key) == value
def test_get_installments_9x_with_simples_intereset(): """ Max 9 installs with SIMPLE intereset interest_rate = 4.00% """ patch_cielo_request() shop = get_default_shop() create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') c = SmartClient() _configure_basket(c) cielo_config = CieloConfig.objects.create( shop=shop, max_installments=9, installments_without_interest=3, interest_type=InterestType.Simple, interest_rate=Decimal(4.0)) SHIP_AMOUNT = Decimal(19.0) shipping_method = get_default_shipping_method() shipping_method.behavior_components.add( FixedCostBehaviorComponent.objects.create(price_value=SHIP_AMOUNT)) order_total = (PRODUCT_QTNTY * PRODUCT_PRICE) + SHIP_AMOUNT installment_choices = InstallmentContext( order_total, cielo_config).get_intallments_choices() response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == len(installment_choices) for installment in range(len(installment_choices)): total = format_money( shop.create_price(installment_choices[installment][2])) installment_amount = format_money( shop.create_price(installment_choices[installment][1])) assert json_content['installments'][installment][ 'number'] == installment + 1 assert installment_amount in json_content['installments'][installment][ 'name'] assert total in json_content['installments'][installment]['name']
def test_get_installments_options_rest(): patch_cielo_request() shop = get_default_shop() c = SmartClient() # method not allowed response = c.post(INSTALLMENTS_PATH) assert response.status_code == 405 # missing parameters response = c.get(INSTALLMENTS_PATH) assert response.status_code == 400 # no CieloConfig for shop response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) assert response.status_code == 400 CieloConfig.objects.create(shop=shop) # basket not valid (no products and not payment/shipping methods) response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) assert response.status_code == 400 create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') # configures the user basket _configure_basket(c) # only 1 installment, because no configurations were set on CieloConfig response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) assert response.status_code == 200 # should be the order total order_total = PRODUCT_QTNTY * PRODUCT_PRICE total_price_str = "{0}".format(format_money(shop.create_price(order_total))) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == 1 assert json_content['installments'][0]['number'] == 1 assert total_price_str in json_content['installments'][0]['name']
def test_registration_PJ1(client): get_default_shop() set_current_theme('shuup.themes.classic_gray') clear_load_cache() with override_settings( AUTH_USER_MODEL = 'shuup_br.ShuupBRUser', SHUUP_REGISTRATION_REQUIRES_ACTIVATION = False, SHUUP_CHECKOUT_VIEW_SPEC = "shuup_br.views:ShuupBRCheckoutView", PARLER_DEFAULT_LANGUAGE_CODE = 'pt-br', SHUUP_ADDRESS_HOME_COUNTRY = 'BR' ): EMAIL = "*****@*****.**" NAME = "empresa muito legal" CNPJ = "66873247000120" IE = "378217321" IM = "0321033218372183721" TAXATION = Taxation.ICMS.value RESPONSIBLE = "Matheus Responsavel" client.post(reverse("shuup:registration_register"), data={ "email": EMAIL, "password1": "password", "password2": "password", "person_type": PersonType.JURIDICA.value, "PJ-name": NAME, "PJ-cnpj": CNPJ, "PJ-ie": IE, "PJ-im": IM, "PJ-taxation": TAXATION, "PJ-responsible": RESPONSIBLE }) user = get_user_model().objects.get(email=EMAIL) assert user.is_active assert user.pj_person.name == NAME assert user.pj_person.cnpj == CNPJ assert user.pj_person.ie == IE assert user.pj_person.im == IM assert user.pj_person.taxation.value == TAXATION assert user.pj_person.responsible == RESPONSIBLE
def test_get_installments_12x_with_simples_intereset(): """ Max 12 installs with PRICE intereset interest_rate = 2.30% min_installment_amount = 30.00 """ patch_cielo_request() shop = get_default_shop() create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') c = SmartClient() _configure_basket(c) cielo_config = CieloConfig.objects.create( shop=shop, max_installments=12, installments_without_interest=2, interest_type=InterestType.Price, interest_rate=Decimal(2.3), min_installment_amount=Decimal(30)) order_total = (PRODUCT_QTNTY * PRODUCT_PRICE) installment_choices = InstallmentContext( order_total, cielo_config).get_intallments_choices() response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == len(installment_choices) for installment in range(len(installment_choices)): total = format_money( shop.create_price(installment_choices[installment][2])) installment_amount = format_money( shop.create_price(installment_choices[installment][1])) assert json_content['installments'][installment][ 'number'] == installment + 1 assert installment_amount in json_content['installments'][installment][ 'name'] assert total in json_content['installments'][installment]['name']
def test_registration_PF(client): get_default_shop() set_current_theme('shuup.themes.classic_gray') clear_load_cache() with override_settings( AUTH_USER_MODEL = 'shuup_br.ShuupBRUser', SHUUP_REGISTRATION_REQUIRES_ACTIVATION = False, SHUUP_CHECKOUT_VIEW_SPEC = "shuup_br.views:ShuupBRCheckoutView", PARLER_DEFAULT_LANGUAGE_CODE = 'pt-br', SHUUP_ADDRESS_HOME_COUNTRY = 'BR' ): EMAIL = "*****@*****.**" NAME = "NOME DA PESSOA" CPF = "01234567890" RG = "123456SC" BIRTH_DATE = "03/28/1954" GENDER = Gender.MALE.value client.post(reverse("shuup:registration_register"), data={ "email": EMAIL, "password1": "password", "password2": "password", "person_type": PersonType.FISICA.value, "PF-name": NAME, "PF-cpf": CPF, "PF-rg": RG, "PF-birth_date": BIRTH_DATE, "PF-gender": GENDER }) user = get_user_model().objects.get(email=EMAIL) assert user.is_active assert user.pf_person.name == NAME assert user.pf_person.cpf == CPF assert user.pf_person.rg == RG assert user.pf_person.birth_date.day == 28 assert user.pf_person.birth_date.month == 3 assert user.pf_person.birth_date.year == 1954 assert user.pf_person.gender.value == GENDER
def test_classic_gray_theme_settings(admin_user): with override_settings(CACHES={ 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'test_configuration_cache', } }): cache.init_cache() shop = get_default_shop() with override_provides("xtheme", ["shuup.themes.classic_gray.theme:ClassicGrayTheme"]): set_current_theme(ClassicGrayTheme.identifier, shop) theme = _get_current_theme(shop) assert isinstance(theme, ClassicGrayTheme) ThemeSettings.objects.all().delete() client = Client() admin_user.set_password("admin") admin_user.save() client.login(username=admin_user.username, password="******") theme_config_url = reverse("shuup_admin:xtheme.config_detail", kwargs=dict(theme_identifier=ClassicGrayTheme.identifier)) response = client.get(theme_config_url) assert response.status_code == 200 assert theme.get_setting("shop_logo_width") is None assert theme.get_setting("shop_logo_height") is None assert theme.get_setting("shop_logo_alignment") is None assert theme.get_setting("shop_logo_aspect_ratio") is None settings = { "stylesheet": "shuup/classic_gray/blue/style.css" } response = client.post(theme_config_url, data=settings) assert response.status_code == 302 theme = _get_current_theme(shop) for key, value in settings.items(): assert theme.get_setting(key) == value
def form_valid(self, form): identifier = form["theme"].cleaned_data["activate"] theme = set_current_theme(identifier) data = { "settings": { "stylesheet": form["theme"].cleaned_data["selected_style"] } } theme_settings, created = ThemeSettings.objects.get_or_create(theme_identifier=theme.identifier) if created: theme_settings.data = data else: theme_settings.update_settings(data["settings"]) theme_settings.activate()
def test_get_installments_3x_no_intereset(): """ Max 3 installs with no intereset """ patch_cielo_request() shop = get_default_shop() create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') c = SmartClient() _configure_basket(c) CieloConfig.objects.create(shop=shop, max_installments=3, installments_without_interest=3) order_total = PRODUCT_QTNTY * PRODUCT_PRICE total_price_str = "{0}".format(format_money( shop.create_price(order_total))) response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == 3 assert json_content['installments'][0]['number'] == 1 assert total_price_str in json_content['installments'][0]['name'] total_2x_no_interest = format_money( shop.create_price(order_total / Decimal(2))) assert json_content['installments'][1]['number'] == 2 assert total_price_str in json_content['installments'][1]['name'] assert total_2x_no_interest in json_content['installments'][1]['name'] total_3x_no_interest = format_money( shop.create_price(order_total / Decimal(3))) assert json_content['installments'][2]['number'] == 3 assert total_price_str in json_content['installments'][2]['name'] assert total_3x_no_interest in json_content['installments'][2]['name']
def test_get_installments_9x_with_simples_intereset(): """ Max 9 installs with SIMPLE intereset interest_rate = 4.00% """ patch_cielo_request() shop = get_default_shop() create_default_order_statuses() populate_if_required() set_current_theme('shuup.themes.classic_gray') c = SmartClient() _configure_basket(c) cielo_config = CieloConfig.objects.create(shop=shop, max_installments=9, installments_without_interest=3, interest_type=InterestType.Simple, interest_rate=Decimal(4.0)) SHIP_AMOUNT = Decimal(19.0) shipping_method = get_default_shipping_method() shipping_method.behavior_components.add( FixedCostBehaviorComponent.objects.create(price_value=SHIP_AMOUNT) ) order_total = (PRODUCT_QTNTY * PRODUCT_PRICE) + SHIP_AMOUNT installment_choices = InstallmentContext(order_total, cielo_config).get_intallments_choices() response = c.get(INSTALLMENTS_PATH, {"cc_brand": CieloCardBrand.Visa}) json_content = json.loads(response.content.decode("utf-8")) assert len(json_content['installments']) == len(installment_choices) for installment in range(len(installment_choices)): total = format_money(shop.create_price(installment_choices[installment][2])) installment_amount = format_money(shop.create_price(installment_choices[installment][1])) assert json_content['installments'][installment]['number'] == installment+1 assert installment_amount in json_content['installments'][installment]['name'] assert total in json_content['installments'][installment]['name']
def test_format_address(): get_default_shop() set_current_theme('shuup.themes.classic_gray') clear_load_cache() with override_settings( SHUUP_ADDRESS_FORMATTER_SPEC='shuup_br.formatters:ShuupBRAddressFormatter' ): addr = MutableAddress.from_data({ 'name': 'name', 'street': 'street', 'street2': 'street2', 'postal_code': 'postal_code', 'city': 'city', 'region': 'region' }) addr.save() extra_addr = ExtraMutableAddress.from_data({ 'numero': '321', 'ponto_ref': 'ref1' }) extra_addr.address = addr extra_addr.save() addr_str_list = addr.as_string_list() assert addr_str_list == [ addr.full_name, "{0}, {1}".format(addr.street, addr.extra.numero), addr.street2, addr.extra.ponto_ref, addr.postal_code, "{0} {1}".format(addr.city, addr.region or addr.region_code) ]
def form_valid(self, form): identifier = form["theme"].cleaned_data["activate"] theme = set_current_theme(identifier) data = { "settings": { "stylesheet": form["theme"].cleaned_data["selected_style"] } } theme_settings, created = ThemeSettings.objects.get_or_create( theme_identifier=theme.identifier) if created: theme_settings.data = data else: theme_settings.update_settings(data["settings"]) theme_settings.activate() cache.bump_version(THEME_CACHE_KEY)
def form_valid(self, form): identifier = form["theme"].cleaned_data["activate"] set_current_theme(identifier)
def test_checkout_with_success(): get_default_shop() set_current_theme('shuup.themes.classic_gray') create_default_order_statuses() populate_if_required() client = SmartClient() # first step - register user person_data = { "email": "*****@*****.**", "password1": "password", "password2": "password", "person_type": PersonType.FISICA.value, "PF-name": "NOME DA PESSOA", "PF-cpf": "012.345.678-90", "PF-rg": "312321", "PF-birth_date": "03/28/1954", "PF-gender": Gender.MALE.value } result = client.post(reverse("shuup:registration_register"), data=person_data) assert not result is None user = get_user_model().objects.get(email=person_data['email']) assert user.is_active # second step -add something into the basket default_product = get_default_product() basket_path = reverse("shuup:basket") add_to_basket_resp = client.post(basket_path, data={ "command": "add", "product_id": default_product.pk, "quantity": 1, "supplier": get_default_supplier().pk }) assert add_to_basket_resp.status_code < 400 # third step - go to checkout and set the addresses addresses_path = reverse("shuup:checkout", kwargs={"phase": "addresses"}) addresses_data = { 'billing-name': 'maria da silva', 'billing-street': 'rua billing', 'billing-street2': 'apto', 'billing-street3': 'bairro outrem', 'billing-postal_code': '89090-200', 'billing-city': 'plumenau', 'billing-region': 'PR', 'billing-country': 'BR', 'billing-phone': '41 2332-0213', 'billing_extra-numero': '563', 'billing_extra-cel': '13 98431-4345', 'billing_extra-ponto_ref': 'longe de tudo', 'shipping-name': 'joao da silva', 'shipping-street': 'rua shipping', 'shipping-street2': 'complemento', 'shipping-street3': 'bairro', 'shipping-postal_code': '89050120', 'shipping-city': 'indaial', 'shipping-region': 'SC', 'shipping-country': 'BR', 'shipping-phone': '39 9999-2332', 'shipping_extra-numero': '323', 'shipping_extra-cel': '21 4444-3333', 'shipping_extra-ponto_ref': 'proximo posto', } response = client.post(addresses_path, data=addresses_data) print(response.content) assert response.status_code == 302 # Should redirect forth # Set the payment and shipping methods methods_path = reverse("shuup:checkout", kwargs={"phase": "methods"}) methods_soup = client.soup(methods_path) assert client.post(methods_path, data=extract_form_fields( methods_soup)).status_code == 302 # Should redirect forth # Confirm the order confirm_path = reverse("shuup:checkout", kwargs={"phase": "confirm"}) confirm_soup = client.soup(confirm_path) assert client.post(confirm_path, data=extract_form_fields( confirm_soup)).status_code == 302 # Should redirect forth
def test_checkout_with_success(): get_default_shop() set_current_theme('shuup.themes.classic_gray') create_default_order_statuses() populate_if_required() client = SmartClient() # first step - register user person_data = { "email": "*****@*****.**", "password1": "password", "password2": "password", "person_type": PersonType.FISICA.value, "PF-name": "NOME DA PESSOA", "PF-cpf": "012.345.678-90", "PF-rg": "312321", "PF-birth_date": "03/28/1954", "PF-gender": Gender.MALE.value } result = client.post(reverse("shuup:registration_register"), data=person_data) assert not result is None user = get_user_model().objects.get(email=person_data['email']) assert user.is_active # second step -add something into the basket default_product = get_default_product() basket_path = reverse("shuup:basket") add_to_basket_resp = client.post(basket_path, data={ "command": "add", "product_id": default_product.pk, "quantity": 1, "supplier": get_default_supplier().pk }) assert add_to_basket_resp.status_code < 400 # third step - go to checkout and set the addresses addresses_path = reverse("shuup:checkout", kwargs={"phase": "addresses"}) addresses_data = { 'billing-name': 'maria da silva', 'billing-street': 'rua billing', 'billing-street2': 'apto', 'billing-street3': 'bairro outrem', 'billing-postal_code': '89090-200', 'billing-city': 'plumenau', 'billing-region': 'PR', 'billing-country': 'BR', 'billing-phone': '41 2332-0213', 'billing_extra-numero': '563', 'billing_extra-cel': '13 98431-4345', 'billing_extra-ponto_ref': 'longe de tudo', 'shipping-name': 'joao da silva', 'shipping-street': 'rua shipping', 'shipping-street2': 'complemento', 'shipping-street3': 'bairro', 'shipping-postal_code': '89050120', 'shipping-city': 'indaial', 'shipping-region': 'SC', 'shipping-country': 'BR', 'shipping-phone': '39 9999-2332', 'shipping_extra-numero': '323', 'shipping_extra-cel': '21 4444-3333', 'shipping_extra-ponto_ref': 'proximo posto', } response = client.post(addresses_path, data=addresses_data) print (response.content) assert response.status_code == 302 # Should redirect forth # Set the payment and shipping methods methods_path = reverse("shuup:checkout", kwargs={"phase": "methods"}) methods_soup = client.soup(methods_path) assert client.post(methods_path, data=extract_form_fields(methods_soup)).status_code == 302 # Should redirect forth # Confirm the order confirm_path = reverse("shuup:checkout", kwargs={"phase": "confirm"}) confirm_soup = client.soup(confirm_path) assert client.post(confirm_path, data=extract_form_fields(confirm_soup)).status_code == 302 # Should redirect forth
def test_checkout(admin_user): get_default_shop() set_current_theme('shuup.themes.classic_gray') create_default_order_statuses() populate_if_required() create_test_data() default_product = get_default_product() sp = ShopProduct.objects.get(product=default_product, shop=get_default_shop()) sp.default_price = get_default_shop().create_price(Decimal(10.0)) sp.save() service = get_custom_carrier_service() component = SpecificShippingTableBehaviorComponent.objects.create( table=ShippingTable.objects.get(identifier='table-1')) service.behavior_components.add(component) c = SmartClient() basket_path = reverse("shuup:basket") add_to_basket_resp = c.post(basket_path, data={ "command": "add", "product_id": default_product.pk, "quantity": 1, "supplier": get_default_supplier().pk }) assert add_to_basket_resp.status_code < 400 shipping_method = service payment_method = get_payment_method(name="neat", price=4) # Resolve paths addresses_path = reverse("shuup:checkout", kwargs={"phase": "addresses"}) methods_path = reverse("shuup:checkout", kwargs={"phase": "methods"}) confirm_path = reverse("shuup:checkout", kwargs={"phase": "confirm"}) # Phase: Addresses addresses_soup = c.soup(addresses_path) inputs = fill_address_inputs(addresses_soup, with_company=False) inputs['shipping-postal_code'] = "89060201" inputs['shipping-country'] = "BR" response = c.post(addresses_path, data=inputs) assert response.status_code == 302, "Address phase should redirect forth" assert response.url.endswith(methods_path) # Phase: Methods assert Order.objects.filter(payment_method=payment_method).count() == 0 response = c.post(methods_path, data={ "payment_method": payment_method.pk, "shipping_method": shipping_method.pk }) assert response.status_code == 302, "Methods phase should redirect forth" assert response.url.endswith(confirm_path) response = c.get(confirm_path) assert response.status_code == 200 # Phase: Confirm assert Order.objects.count() == 0 confirm_soup = c.soup(confirm_path) response = c.post(confirm_path, data=extract_form_fields(confirm_soup)) assert response.status_code == 302, "Confirm should redirect forth" assert Order.objects.count() == 1 order = Order.objects.filter(payment_method=payment_method).first() assert order.payment_status == PaymentStatus.NOT_PAID
def test_checkout(admin_user): get_default_shop() set_current_theme('shuup.themes.classic_gray') create_default_order_statuses() populate_if_required() create_test_data() default_product = get_default_product() sp = ShopProduct.objects.get(product=default_product, shop=get_default_shop()) sp.default_price = get_default_shop().create_price(Decimal(10.0)) sp.save() service = get_custom_carrier_service() component = SpecificShippingTableBehaviorComponent.objects.create( table=ShippingTable.objects.get(identifier='table-1') ) service.behavior_components.add(component) c = SmartClient() basket_path = reverse("shuup:basket") add_to_basket_resp = c.post(basket_path, data={ "command": "add", "product_id": default_product.pk, "quantity": 1, "supplier": get_default_supplier().pk }) assert add_to_basket_resp.status_code < 400 shipping_method = service payment_method = get_payment_method(name="neat", price=4) # Resolve paths addresses_path = reverse("shuup:checkout", kwargs={"phase": "addresses"}) methods_path = reverse("shuup:checkout", kwargs={"phase": "methods"}) confirm_path = reverse("shuup:checkout", kwargs={"phase": "confirm"}) # Phase: Addresses addresses_soup = c.soup(addresses_path) inputs = fill_address_inputs(addresses_soup, with_company=False) inputs['shipping-postal_code'] = "89060201" inputs['shipping-country'] = "BR" response = c.post(addresses_path, data=inputs) assert response.status_code == 302, "Address phase should redirect forth" assert response.url.endswith(methods_path) # Phase: Methods assert Order.objects.filter(payment_method=payment_method).count() == 0 response = c.post( methods_path, data={ "payment_method": payment_method.pk, "shipping_method": shipping_method.pk } ) assert response.status_code == 302, "Methods phase should redirect forth" assert response.url.endswith(confirm_path) response = c.get(confirm_path) assert response.status_code == 200 # Phase: Confirm assert Order.objects.count() == 0 confirm_soup = c.soup(confirm_path) response = c.post(confirm_path, data=extract_form_fields(confirm_soup)) assert response.status_code == 302, "Confirm should redirect forth" assert Order.objects.count() == 1 order = Order.objects.filter(payment_method=payment_method).first() assert order.payment_status == PaymentStatus.NOT_PAID
def form_valid(self, form): identifier = form.cleaned_data["activate"] set_current_theme(identifier, get_shop(self.request)) messages.success(self.request, _("Theme activated.")) return HttpResponseRedirect(self.request.path)