Esempio n. 1
0
    def test_form_suppress_notification_only_for_superusers(self):
        # anonymous users are not allowed to add a notification
        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(user=AnonymousUser(),
                                            data=data,
                                            files=files)

        assert form.is_valid() is True
        assert form.fields["suppress_notification"].disabled is True
        assert form.cleaned_data["suppress_notification"] is True

        # authenticated users are not allowed to add a notification
        authuser = mixer.blend("auth.User")
        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(user=authuser,
                                            data=data,
                                            files=files)

        assert form.is_valid() is True
        assert form.fields["suppress_notification"].disabled is True
        assert form.cleaned_data["suppress_notification"] is True

        # superusers are allowed to change the parameter
        superuser = mixer.blend("auth.User", is_superuser=True)
        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(user=superuser,
                                            data=data,
                                            files=files)

        assert form.is_valid() is True
        assert form.fields["suppress_notification"].disabled is False
        assert form.cleaned_data["suppress_notification"] is False
Esempio n. 2
0
    def test_form(self):
        form = ImportProductsFileUploadForm(data={}, files={})
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "This field is required." in str(form.errors["excel_file"])

        # verify only the file name, the content will raise an Exception in the further processing
        files = {"excel_file": SimpleUploadedFile("myfile", b"yxz")}
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "file type not supported" in str(form.errors["excel_file"])

        files = {"excel_file": SimpleUploadedFile("myfile.png", b"yxz")}
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "only .xlsx files are allowed" in str(form.errors["excel_file"])

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"")}
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "The submitted file is empty." in str(form.errors["excel_file"])

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is True
        assert form.cleaned_data[
            "suppress_notification"] is True, "Should be the True by default"

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": True}
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {
            "suppress_notification": True,
            "update_existing_products_only": False
        }
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {
            "suppress_notification": True,
            "update_existing_products_only": True
        }
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True
Esempio n. 3
0
def import_products(request):
    """
    import of products using Excel
    :param request:
    :return:
    """
    context = {}
    if request.method == "POST":
        form = ImportProductsFileUploadForm(request.POST, request.FILES)
        if form.is_valid():
            # file is valid, save and execute the import job
            job_file = JobFile(file=request.FILES['excel_file'])
            job_file.save()

            if request.user.is_superuser:
                # only the superuser is allowed to add a server notification message
                create_notification = not form.cleaned_data[
                    "suppress_notification"]

            else:
                # all other users are not allowed to add a server notification
                create_notification = False

            task = tasks.import_price_list.delay(
                job_file_id=job_file.id,
                create_notification_on_server=create_notification,
                user_for_revision=request.user.username)
            set_meta_data_for_task(
                task_id=task.id,
                title="Import products from Excel sheet",
                auto_redirect=False,
                redirect_to=reverse("productdb:import_products"))

            return redirect(
                reverse("task_in_progress", kwargs={"task_id": task.id}))

    else:
        form = ImportProductsFileUploadForm(
            initial={"suppress_notification": True})
        if not request.user.is_superuser:
            form.fields["suppress_notification"].disabled = True

    context['form'] = form

    return render(request,
                  "productdb/import/import_products.html",
                  context=context)
Esempio n. 4
0
def import_products(request):
    """import of products using Excel
    :param request:
    :return:
    """
    context = {}
    if request.method == "POST":
        form = ImportProductsFileUploadForm(request.user, request.POST,
                                            request.FILES)
        if form.is_valid():
            # file is valid, save and execute the import job
            job_file = JobFile(file=request.FILES['excel_file'])
            job_file.save()

            eta = now() + timedelta(seconds=3)
            task = tasks.import_price_list.apply_async(
                eta=eta,
                kwargs={
                    "job_file_id":
                    job_file.id,
                    "create_notification_on_server":
                    not form.cleaned_data["suppress_notification"],
                    "update_only":
                    form.cleaned_data["update_existing_products_only"],
                    "user_for_revision":
                    request.user.username
                })

            set_meta_data_for_task(
                task_id=task.id,
                title="Import products from Excel sheet",
                auto_redirect=False,
                redirect_to=reverse("productdb:import_products"))

            return redirect(
                reverse("task_in_progress", kwargs={"task_id": task.id}))

    else:
        form = ImportProductsFileUploadForm(request.user)

    context['form'] = form

    return render(request,
                  "productdb/import/import_products.html",
                  context=context)