Beispiel #1
0
def test_basic_order_flow_registered(regular_user):
    cache.clear()
    create_default_order_statuses()
    n_orders_pre = Order.objects.count()
    populate_if_required()
    get_test_script("test script", "order_received")
    # paths
    addresses_path = reverse("E-Commerce:checkout", kwargs={"phase": "addresses"})
    methods_path = reverse("E-Commerce:checkout", kwargs={"phase": "methods"})
    confirm_path = reverse("E-Commerce:checkout", kwargs={"phase": "confirm"})

    template_data = STEP_DATA[0]["actions"][0]["template_data"]

    LANG_CODE = {
        "en": "US",
        "fi": "FI"
    }

    for lang in ["en", "fi"]:
        n_outbox_pre = len(mail.outbox)
        contact = get_person_contact(regular_user)
        contact.language = lang
        contact.save()

        c = SmartClient()
        c.login(username=REGULAR_USER_USERNAME, password=REGULAR_USER_PASSWORD)

        product_ids = _populate_client_basket(c)

        addresses_soup = c.soup(addresses_path)
        address = get_address(country=LANG_CODE[lang])

        inputs = fill_address_inputs(addresses_soup, address)
        response = c.post(addresses_path, data=inputs)
        assert response.status_code == 302  # Should redirect forth

        methods_soup = c.soup(methods_path)
        assert c.post(methods_path, data=extract_form_fields(methods_soup)).status_code == 302  # Should redirect forth

        confirm_soup = c.soup(confirm_path)
        Product.objects.get(pk=product_ids[0]).soft_delete()
        assert c.post(confirm_path, data=extract_form_fields(confirm_soup)).status_code == 200  # user needs to reconfirm
        data = extract_form_fields(confirm_soup)
        data['product_ids'] = ','.join(product_ids[1:])
        assert c.post(confirm_path, data=data).status_code == 302  # Should redirect forth

        n_orders_post = Order.objects.count()
        assert n_orders_post > n_orders_pre, "order was created"
        assert (len(mail.outbox) == n_outbox_pre + 1), "Sending email failed"
        latest_mail = mail.outbox[-1]

        # mail is always sent in fallback language since user is not registered
        assert latest_mail.subject == template_data[lang]["subject"], "Subject doesn't match"
        assert latest_mail.body == template_data[lang]["body"], "Body doesn't match"
Beispiel #2
0
    def run(self):
        for schema in self.schemata:
            self.objects[schema["model"]] = self.process_schema(schema)

        # Ensure default statuses are available
        print_("Creating order statuses...", end=" ")
        create_default_order_statuses()
        print_("done.")
        if not settings.DEBUG and is_telemetry_enabled():
            try:
                data = json.dumps({
                    "key": get_installation_key()
                })
                resp = requests.get(url=settings.E-Commerce_SUPPORT_ID_URL, data=data, timeout=5)
                if resp.json().get("support_id"):
                    configuration.set(None, "E-Commerce_support_id", resp.json().get("support_id"))
            except Exception:
                print_("Failed to get support id")
        print_("Initialization done.")
Beispiel #3
0
def test_custom_status(language):
    """Test custom order statuses."""
    with translation.override(language):
        create_default_order_statuses()
        status = OrderStatus.objects.create(
            identifier='test-identifier',
            role=OrderStatusRole.INITIAL,
            name='Test Name',
            public_name='Test Public Name',
            ordering=10,
            is_active=False,
            default=False,
        )
    test_new_dentifier = 'test-new-identifier'
    test_new_name = 'Test New Name'
    test_new_public_name = 'Test New Public Name'
    test_new_role = OrderStatusRole.PROCESSING
    test_new_ordering = 100
    test_new_is_active = True
    frm = OrderStatusForm(
        languages=[language],
        instance=status,
        default_language=language,
        data={
            'name__{}'.format(language): test_new_name,
            'public_name__{}'.format(language): test_new_public_name,
            "identifier": test_new_dentifier,
            "role": test_new_role,
            "ordering": test_new_ordering,
            "is_active": test_new_is_active,
        }
    )
    assert frm.is_valid()
    assert not frm.errors
    frm.save(commit=False)
    assert frm.instance.name == test_new_name
    assert frm.instance.public_name == test_new_public_name
    assert frm.instance.identifier == test_new_dentifier
    assert frm.instance.role == test_new_role
    assert frm.instance.ordering == test_new_ordering
    assert frm.instance.is_active == test_new_is_active
Beispiel #4
0
def test_default_status(language):
    """Test default order statuses.

    Check can change default statuses
    `name` and `public_name` fields
    but can't change other attributes.
    """
    from django.utils.translation import activate
    activate(language)
    
    create_default_order_statuses()
    
    test_new_name = 'Test New Name'
    test_new_public_name = 'Test New Public Name'
    for status in OrderStatus.objects.all():
        frm = OrderStatusForm(
            languages=[language],
            instance=status,
            default_language=language,
            data={
                'name__{}'.format(language): test_new_name,
                'public_name__{}'.format(language): test_new_public_name,
                "identifier": "test new identifier",
                "role": OrderStatusRole.NONE,
                "ordering": 100,
                "is_active": not status.is_active,
            }
        )
        assert frm.is_valid()
        assert not frm.errors
        frm.save(commit=False)
        assert frm.instance.name == test_new_name
        assert frm.instance.public_name == test_new_public_name
        assert frm.instance.identifier == status.identifier
        assert frm.instance.role == status.role
        assert frm.instance.ordering == status.ordering
        assert frm.instance.is_active == status.is_active
Beispiel #5
0
def get_completed_order_status():
    create_default_order_statuses()
    return OrderStatus.objects.get_default_complete()
Beispiel #6
0
def get_initial_order_status():
    create_default_order_statuses()
    return OrderStatus.objects.get_default_initial()