File: ui_files_actions_test.py

package info (click to toggle)
nc-py-api 0.19.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,320 kB
  • sloc: python: 12,415; makefile: 238; xml: 100; javascript: 56; sh: 14
file content (152 lines) | stat: -rw-r--r-- 7,255 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import pytest

from nc_py_api import FilePermissions, FsNode, NextcloudExceptionNotFound, ex_app


def test_register_ui_file_actions(nc_app):
    nc_app.ui.files_dropdown_menu.register_ex("test_ui_action_im", "UI TEST Image", "/ui_action_test", mime="image")
    result = nc_app.ui.files_dropdown_menu.get_entry("test_ui_action_im")
    assert result.name == "test_ui_action_im"
    assert result.display_name == "UI TEST Image"
    assert result.action_handler == "ui_action_test"
    assert result.mime == "image"
    assert result.permissions == 31
    assert result.order == 0
    assert result.icon == ""
    assert result.appid == "nc_py_api"
    assert result.version == "2.0"
    nc_app.ui.files_dropdown_menu.unregister(result.name)
    nc_app.ui.files_dropdown_menu.register("test_ui_action_any", "UI TEST", "ui_action", permissions=1, order=1)
    result = nc_app.ui.files_dropdown_menu.get_entry("test_ui_action_any")
    assert result.name == "test_ui_action_any"
    assert result.display_name == "UI TEST"
    assert result.action_handler == "ui_action"
    assert result.mime == "file"
    assert result.permissions == 1
    assert result.order == 1
    assert result.icon == ""
    assert result.version == "1.0"
    nc_app.ui.files_dropdown_menu.register_ex("test_ui_action_any", "UI", "/ui_action2", icon="/img/icon.svg")
    result = nc_app.ui.files_dropdown_menu.get_entry("test_ui_action_any")
    assert result.name == "test_ui_action_any"
    assert result.display_name == "UI"
    assert result.action_handler == "ui_action2"
    assert result.mime == "file"
    assert result.permissions == 31
    assert result.order == 0
    assert result.icon == "img/icon.svg"
    assert result.version == "2.0"
    nc_app.ui.files_dropdown_menu.unregister(result.name)
    assert str(result).find("name=test_ui_action")


@pytest.mark.asyncio(scope="session")
async def test_register_ui_file_actions_async(anc_app):
    await anc_app.ui.files_dropdown_menu.register_ex(
        "test_ui_action_im", "UI TEST Image", "/ui_action_test", mime="image"
    )
    result = await anc_app.ui.files_dropdown_menu.get_entry("test_ui_action_im")
    assert result.name == "test_ui_action_im"
    assert result.display_name == "UI TEST Image"
    assert result.action_handler == "ui_action_test"
    assert result.mime == "image"
    assert result.permissions == 31
    assert result.order == 0
    assert result.icon == ""
    assert result.appid == "nc_py_api"
    assert result.version == "2.0"
    await anc_app.ui.files_dropdown_menu.unregister(result.name)
    await anc_app.ui.files_dropdown_menu.register("test_ui_action_any", "UI TEST", "ui_action", permissions=1, order=1)
    result = await anc_app.ui.files_dropdown_menu.get_entry("test_ui_action_any")
    assert result.name == "test_ui_action_any"
    assert result.display_name == "UI TEST"
    assert result.action_handler == "ui_action"
    assert result.mime == "file"
    assert result.permissions == 1
    assert result.order == 1
    assert result.icon == ""
    assert result.version == "1.0"
    await anc_app.ui.files_dropdown_menu.register_ex("test_ui_action_any", "UI", "/ui_action2", icon="/img/icon.svg")
    result = await anc_app.ui.files_dropdown_menu.get_entry("test_ui_action_any")
    assert result.name == "test_ui_action_any"
    assert result.display_name == "UI"
    assert result.action_handler == "ui_action2"
    assert result.mime == "file"
    assert result.permissions == 31
    assert result.order == 0
    assert result.icon == "img/icon.svg"
    assert result.version == "2.0"
    await anc_app.ui.files_dropdown_menu.unregister(result.name)
    assert str(result).find("name=test_ui_action")


def test_unregister_ui_file_actions(nc_app):
    nc_app.ui.files_dropdown_menu.register_ex("test_ui_action", "NcPyApi UI TEST", "/any_rel_url")
    nc_app.ui.files_dropdown_menu.unregister("test_ui_action")
    assert nc_app.ui.files_dropdown_menu.get_entry("test_ui_action") is None
    nc_app.ui.files_dropdown_menu.unregister("test_ui_action")
    with pytest.raises(NextcloudExceptionNotFound):
        nc_app.ui.files_dropdown_menu.unregister("test_ui_action", not_fail=False)


@pytest.mark.asyncio(scope="session")
async def test_unregister_ui_file_actions_async(anc_app):
    await anc_app.ui.files_dropdown_menu.register_ex("test_ui_action", "NcPyApi UI TEST", "/any_rel_url")
    await anc_app.ui.files_dropdown_menu.unregister("test_ui_action")
    assert await anc_app.ui.files_dropdown_menu.get_entry("test_ui_action") is None
    await anc_app.ui.files_dropdown_menu.unregister("test_ui_action")
    with pytest.raises(NextcloudExceptionNotFound):
        await anc_app.ui.files_dropdown_menu.unregister("test_ui_action", not_fail=False)


def test_ui_file_to_fs_node(nc_app):
    def ui_action_check(directory: str, fs_object: FsNode):
        permissions = 0
        if fs_object.is_readable:
            permissions += FilePermissions.PERMISSION_READ
        if fs_object.is_updatable:
            permissions += FilePermissions.PERMISSION_UPDATE
        if fs_object.is_creatable:
            permissions += FilePermissions.PERMISSION_CREATE
        if fs_object.is_deletable:
            permissions += FilePermissions.PERMISSION_DELETE
        if fs_object.is_shareable:
            permissions += FilePermissions.PERMISSION_SHARE
        fileid_str = str(fs_object.info.fileid)
        i = fs_object.file_id.find(fileid_str)
        file_info = ex_app.UiActionFileInfo(
            fileId=fs_object.info.fileid,
            name=fs_object.name,
            directory=directory,
            etag=fs_object.etag,
            mime=fs_object.info.mimetype,
            fileType="dir" if fs_object.is_dir else "file",
            mtime=int(fs_object.info.last_modified.timestamp()),
            size=fs_object.info.size,
            favorite=str(fs_object.info.favorite),
            permissions=permissions,
            userId=fs_object.user,
            shareOwner="some_user" if fs_object.is_shared else None,
            shareOwnerId="some_user_id" if fs_object.is_shared else None,
            instanceId=fs_object.file_id[i + len(fileid_str) :],
        )
        fs_node = file_info.to_fs_node()
        assert isinstance(fs_node, FsNode)
        assert fs_node.etag == fs_object.etag
        assert fs_node.name == fs_object.name
        assert fs_node.user_path == fs_object.user_path
        assert fs_node.full_path == fs_object.full_path
        assert fs_node.file_id == fs_object.file_id
        assert fs_node.is_dir == fs_object.is_dir
        assert fs_node.info.mimetype == fs_object.info.mimetype
        assert fs_node.info.permissions == fs_object.info.permissions
        assert fs_node.info.last_modified == fs_object.info.last_modified
        assert fs_node.info.favorite == fs_object.info.favorite
        assert fs_node.info.content_length == fs_object.info.content_length
        assert fs_node.info.size == fs_object.info.size
        assert fs_node.info.fileid == fs_object.info.fileid

    for each_file in nc_app.files.listdir():
        ui_action_check(directory="/", fs_object=each_file)
    for each_file in nc_app.files.listdir("test_dir"):
        ui_action_check(directory="/test_dir", fs_object=each_file)