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
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
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)
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)