Example #1
0
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
Example #2
0
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"]
Example #3
0
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)
Example #4
0
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
Example #5
0
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
Example #6
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
Example #7
0
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"
Example #8
0
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]
Example #9
0
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]
Example #10
0
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()
Example #11
0
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
Example #12
0
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)})
Example #13
0
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())
Example #14
0
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()