def test_move_file(admin_user): shop = get_default_shop() folder1 = get_or_create_folder(shop, printable_gibberish()) folder2 = get_or_create_folder(shop, printable_gibberish()) file = File.objects.create(folder=folder1) mbv_command(admin_user, {"action": "move_file", "file_id": file.pk, "folder_id": folder2.pk}) assert File.objects.get(pk=file.pk).folder == folder2 mbv_command(admin_user, {"action": "move_file", "file_id": file.pk, "folder_id": 0}) assert File.objects.get(pk=file.pk).folder is None
def test_get_folder(admin_user): shop = get_default_shop() folder1 = get_or_create_folder(shop, printable_gibberish()) folder2 = get_or_create_folder(shop, printable_gibberish()) folder2.parent = folder1 folder2.save() root_resp = mbv_command(admin_user, {"action": "folder"}, "GET") assert any(f["id"] == folder1.pk for f in root_resp["folder"]["folders"]) f1_resp = mbv_command(admin_user, {"action": "folder", "id": folder1.pk}, "GET") assert f1_resp["folder"]["folders"][0]["id"] == folder2.pk assert not f1_resp["folder"]["files"] assert f1_resp["folder"]["name"] == folder1.name assert mbv_command(admin_user, {"action": "folder", "id": -1}, "GET")["error"]
def media_upload(request, *args, **kwargs): shop = get_shop(request) try: folder_id = int( request.POST.get("folder_id") or request.GET.get("folder_id") or 0) path = request.POST.get("path") or request.GET.get("path") or None if folder_id != 0: folder = _get_folder_query(shop, request.user).get(pk=folder_id) elif path: folder = get_or_create_folder(shop, path, request.user) else: folder = None # Root folder upload. How bold! except Exception as exc: return JsonResponse( {"error": "Error! Invalid folder `%s`." % force_text(exc)}, status=400) if subfolder_of_users_root(request.user, folder) or has_permission( request.user, "media.upload-to-folder"): return _process_form(request, folder) return JsonResponse( { "error": _("You do not have permission to upload content to this folder") }, status=400)
def test_upload(rf, admin_user): shop = get_default_shop() response = mbv_upload(admin_user) assert not File.objects.get(pk=response["file"]["id"]).folder folder = get_or_create_folder(shop, printable_gibberish()) response = mbv_upload(admin_user, folder_id=folder.pk) assert File.objects.get(pk=response["file"]["id"]).folder == folder
def test_media_view_images_without_root_access(rf): shop = factories.get_default_shop() staff_user = factories.UserFactory(is_staff=True) permission_group = factories.get_default_permission_group() staff_user.groups.add(permission_group) shop.staff_members.add(staff_user) set_permissions_for_group(permission_group, ["upload-media"]) assert not can_see_root_folder(staff_user) folder = get_or_create_folder(shop, "Root") File.objects.create(name="normalfile", folder=folder) img = Image.objects.create(name="imagefile", folder=folder, is_public=True) request = apply_request_middleware(rf.get("/", { "filter": "images", "action": "folder" }), user=staff_user) request.user = staff_user view_func = MediaBrowserView.as_view() response = view_func(request) assert isinstance(response, JsonResponse) content = json.loads(response.content.decode("utf-8")) assert len(content["folder"]["folders"]) == 0 assert len(content["folder"]["files"]) == 0
def test_new_folder(admin_user): shop = get_default_shop() folder1 = get_or_create_folder(shop, printable_gibberish()) child_folder_data = mbv_command(admin_user, {"action": "new_folder", "name": "y", "parent": folder1.id})["folder"] assert Folder.objects.get(pk=child_folder_data["id"]).parent == folder1 root_folder_data = mbv_command(admin_user, {"action": "new_folder", "name": "y"})["folder"] assert not Folder.objects.get(pk=root_folder_data["id"]).parent_id
def test_rename_folder(admin_user): shop = get_default_shop() folder = get_or_create_folder(shop, printable_gibberish()) mbv_command(admin_user, { "action": "rename_folder", "id": folder.pk, "name": "Space" }) assert Folder.objects.get(pk=folder.pk).name == "Space"
def test_deleting_mid_folder(rf, admin_user): shop = get_default_shop() folder1 = get_or_create_folder(shop, printable_gibberish(), admin_user) folder2 = get_or_create_folder(shop, printable_gibberish(), admin_user) folder2.parent = folder1 folder2.save() folder3 = get_or_create_folder(shop, printable_gibberish(), admin_user) folder3.parent = folder2 folder3.save() tree = get_id_tree(mbv_command(admin_user, {"action": "folders"}, "GET")) assert tree[folder1.pk] == {folder2.pk: {folder3.pk: {}}} mbv_command(admin_user, {"action": "delete_folder", "id": folder2.pk}) tree = get_id_tree(mbv_command(admin_user, {"action": "folders"}, "GET")) assert tree[folder1.pk] == {folder3.pk: {}} folder1 = Folder.objects.get(pk=folder1.pk) assert list(folder1.get_children()) == [folder3]
def test_get_folders(rf, admin_user): shop = get_default_shop() # Create a structure and retrieve it folder1 = get_or_create_folder(shop, printable_gibberish()) folder2 = get_or_create_folder(shop, printable_gibberish()) folder3 = get_or_create_folder(shop, printable_gibberish()) folder4 = get_or_create_folder(shop, printable_gibberish()) folder4.parent = folder2 folder4.save() folder5 = get_or_create_folder(shop, printable_gibberish()) folder5.parent = folder3 folder5.save() tree = get_id_tree(mbv_command(admin_user, {"action": "folders"}, "GET")) assert set((folder1.id, folder2.id, folder3.id)) <= set(tree.keys()) assert folder4.pk in tree[folder2.pk] assert folder5.pk in tree[folder3.pk]
def test_delete_protected_folder(rf, admin_user): shop = get_default_shop() folder1 = get_or_create_folder(shop, printable_gibberish(), admin_user) folder2 = get_or_create_folder(shop, printable_gibberish(), admin_user) folder2.parent = folder1 folder2.save() with mock.patch( "filer.models.foldermodels.Folder.delete", side_effect=ProtectedError("Cannot delete", [folder2]), ) as mocked: mbv_command(admin_user, {"action": "delete_folder", "id": folder2.pk}) mocked.assert_called() folder1 = Folder.objects.get(pk=folder1.pk) assert list(folder1.get_children()) == [folder2] mbv_command(admin_user, {"action": "delete_folder", "id": folder2.pk}) folder1 = Folder.objects.get(pk=folder1.pk) assert list(folder1.get_children()) == [] assert not Folder.objects.filter(pk=folder2.pk).exists()
def test_media_view_images(rf, admin_user, is_public, expected_file_count): shop = get_default_shop() folder = get_or_create_folder(shop, "Root") File.objects.create(name="normalfile", folder=folder) img = Image.objects.create(name="imagefile", folder=folder, is_public=is_public) request = apply_request_middleware( rf.get("/", {"filter": "images", "action": "folder", "id": folder.id}), user=admin_user ) request.user = admin_user view_func = MediaBrowserView.as_view() response = view_func(request) assert isinstance(response, JsonResponse) content = json.loads(response.content.decode("utf-8")) assert len(content["folder"]["files"]) == expected_file_count if expected_file_count: filedata = content["folder"]["files"][0] assert filedata["name"] == img.name
def media_upload(request, *args, **kwargs): if not settings.SHUUP_CUSTOMER_INFORMATION_ALLOW_PICTURE_UPLOAD: return HttpResponseForbidden() shop = get_shop(request) folder = get_or_create_folder(shop, "/contacts") form = UploadImageForm(request.POST, request.FILES) if form.is_valid(): filer_file = filer_image_from_upload(request, path=folder, upload_data=request.FILES["file"]) else: error_messages = [] for validation_error in form.errors.as_data().get("file", []): error_messages += validation_error.messages return JsonResponse( {"error": ", ".join([msg for msg in error_messages])}, status=400) ensure_media_file(shop, filer_file) return JsonResponse({"file": filer_file_to_json_dict(filer_file)})
def test_get_folders_without_view_all_permission(rf): shop = factories.get_default_shop() staff_user = factories.UserFactory(is_staff=True) permission_group = factories.get_default_permission_group() staff_user.groups.add(permission_group) shop.staff_members.add(staff_user) set_permissions_for_group(permission_group, ["upload-media"]) assert not can_see_root_folder(staff_user) # Create a structure and retrieve it folder1 = get_or_create_folder(shop, printable_gibberish()) folder1_media_folder = ensure_media_folder(shop, folder1) folder1_media_folder.owners.add(staff_user) folder2 = get_or_create_folder(shop, printable_gibberish()) folder3 = get_or_create_folder(shop, printable_gibberish()) folder4 = get_or_create_folder(shop, printable_gibberish()) folder4.parent = folder2 folder4.save() folder4_media_folder = ensure_media_folder(shop, folder4) folder4_media_folder.owners.add(staff_user) folder5 = get_or_create_folder(shop, printable_gibberish()) folder5.parent = folder4 folder5.save() folder6 = get_or_create_folder(shop, printable_gibberish()) folder6.parent = folder5 folder6.save() folder6_media_folder = ensure_media_folder(shop, folder6) folder6_media_folder.owners.add(staff_user) folder7 = get_or_create_folder(shop, printable_gibberish()) folder7.parent = folder6 folder7.save() tree = get_id_tree(mbv_command(staff_user, {"action": "folders"}, "GET")) assert set((folder1.id, folder4.id)) <= set(tree.keys())
def test_delete_folder(admin_user): shop = get_default_shop() folder = get_or_create_folder(shop, printable_gibberish()) mbv_command(admin_user, {"action": "delete_folder", "id": folder.pk}) assert not Folder.objects.filter(pk=folder.pk).exists()