Beispiel #1
0
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']
Beispiel #2
0
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']
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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']
Beispiel #6
0
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']
Beispiel #7
0
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()
Beispiel #8
0
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()
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
    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)))
Beispiel #12
0
    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)))
Beispiel #13
0
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
Beispiel #15
0
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']
Beispiel #16
0
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']
Beispiel #17
0
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
Beispiel #18
0
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']
Beispiel #19
0
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
Beispiel #21
0
 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()
Beispiel #22
0
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']
Beispiel #23
0
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']
Beispiel #24
0
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)
        ]
Beispiel #25
0
 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)
Beispiel #26
0
 def form_valid(self, form):
     identifier = form["theme"].cleaned_data["activate"]
     set_current_theme(identifier)
Beispiel #27
0
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
Beispiel #28
0
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
Beispiel #31
0
 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)
Beispiel #32
0
 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)