Skip to content

Commit ce95eac

Browse files
committed
small refactor; more tests
Signed-off-by: bigcat88 <bigcat88@icloud.com>
1 parent 0fc7704 commit ce95eac

File tree

2 files changed

+86
-74
lines changed

2 files changed

+86
-74
lines changed

nc_py_api/_preferences_ex.py

Lines changed: 32 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,21 @@ def delete(self, keys: str | list[str], not_fail=True) -> None:
6161
if not not_fail:
6262
raise e from None
6363

64+
def set_value(self, key: str, value: str, sensitive: bool | None = None) -> None:
65+
"""Sets a value and if specified the sensitive flag for a key.
66+
67+
.. note:: A sensitive flag ensures key value are encrypted and truncated in Nextcloud logs.
68+
Default for new records is ``False`` when sensitive is *unspecified*, if changes existing record and
69+
sensitive is *unspecified* it will not change the existing `sensitive` flag.
70+
"""
71+
if not key:
72+
raise ValueError("`key` parameter can not be empty")
73+
require_capabilities("app_api", self._session.capabilities)
74+
params: dict = {"configKey": key, "configValue": value}
75+
if sensitive is not None:
76+
params["sensitive"] = sensitive
77+
self._session.ocs("POST", f"{self._session.ae_url}/{self._url_suffix}", json=params)
78+
6479

6580
class _AsyncBasicAppCfgPref:
6681
_url_suffix: str
@@ -104,72 +119,41 @@ async def delete(self, keys: str | list[str], not_fail=True) -> None:
104119
if not not_fail:
105120
raise e from None
106121

122+
async def set_value(self, key: str, value: str, sensitive: bool | None = None) -> None:
123+
"""Sets a value and if specified the sensitive flag for a key.
124+
125+
.. note:: A sensitive flag ensures key value are encrypted and truncated in Nextcloud logs.
126+
Default for new records is ``False`` when sensitive is *unspecified*, if changes existing record and
127+
sensitive is *unspecified* it will not change the existing `sensitive` flag.
128+
"""
129+
if not key:
130+
raise ValueError("`key` parameter can not be empty")
131+
require_capabilities("app_api", await self._session.capabilities)
132+
params: dict = {"configKey": key, "configValue": value}
133+
if sensitive is not None:
134+
params["sensitive"] = sensitive
135+
await self._session.ocs("POST", f"{self._session.ae_url}/{self._url_suffix}", json=params)
136+
107137

108138
class PreferencesExAPI(_BasicAppCfgPref):
109-
"""User specific preferences API, avalaible as **nc.preferences_ex.<method>**."""
139+
"""User specific preferences API, available as **nc.preferences_ex.<method>**."""
110140

111141
_url_suffix = "ex-app/preference"
112142

113-
def set_value(self, key: str, value: str, sensitive: bool = False) -> None:
114-
"""Sets a value for a key."""
115-
if not key:
116-
raise ValueError("`key` parameter can not be empty")
117-
require_capabilities("app_api", self._session.capabilities)
118-
params = {"configKey": key, "configValue": value, "sensitive": sensitive}
119-
self._session.ocs("POST", f"{self._session.ae_url}/{self._url_suffix}", json=params)
120-
121143

122144
class AsyncPreferencesExAPI(_AsyncBasicAppCfgPref):
123145
"""User specific preferences API."""
124146

125147
_url_suffix = "ex-app/preference"
126148

127-
async def set_value(self, key: str, value: str, sensitive: bool = False) -> None:
128-
"""Sets a value for a key."""
129-
if not key:
130-
raise ValueError("`key` parameter can not be empty")
131-
require_capabilities("app_api", await self._session.capabilities)
132-
params = {"configKey": key, "configValue": value, "sensitive": sensitive}
133-
await self._session.ocs("POST", f"{self._session.ae_url}/{self._url_suffix}", json=params)
134-
135149

136150
class AppConfigExAPI(_BasicAppCfgPref):
137-
"""Non-user(App) specific preferences API, avalaible as **nc.appconfig_ex.<method>**."""
151+
"""Non-user(App) specific preferences API, available as **nc.appconfig_ex.<method>**."""
138152

139153
_url_suffix = "ex-app/config"
140154

141-
def set_value(self, key: str, value: str, sensitive: bool | None = None) -> None:
142-
"""Sets a value and if specified the sensitive flag for a key.
143-
144-
.. note:: A sensitive flag ensures key values are truncated in Nextcloud logs.
145-
Default for new records is ``False`` when sensitive is *unspecified*, if changes existing record and
146-
sensitive is *unspecified* it will not change the existing `sensitive` flag.
147-
"""
148-
if not key:
149-
raise ValueError("`key` parameter can not be empty")
150-
require_capabilities("app_api", self._session.capabilities)
151-
params: dict = {"configKey": key, "configValue": value}
152-
if sensitive is not None:
153-
params["sensitive"] = sensitive
154-
self._session.ocs("POST", f"{self._session.ae_url}/{self._url_suffix}", json=params)
155-
156155

157156
class AsyncAppConfigExAPI(_AsyncBasicAppCfgPref):
158157
"""Non-user(App) specific preferences API."""
159158

160159
_url_suffix = "ex-app/config"
161-
162-
async def set_value(self, key: str, value: str, sensitive: bool | None = None) -> None:
163-
"""Sets a value and if specified the sensitive flag for a key.
164-
165-
.. note:: A sensitive flag ensures key values are truncated in Nextcloud logs.
166-
Default for new records is ``False`` when sensitive is *unspecified*, if changes existing record and
167-
sensitive is *unspecified* it will not change the existing `sensitive` flag.
168-
"""
169-
if not key:
170-
raise ValueError("`key` parameter can not be empty")
171-
require_capabilities("app_api", await self._session.capabilities)
172-
params: dict = {"configKey": key, "configValue": value}
173-
if sensitive is not None:
174-
params["sensitive"] = sensitive
175-
await self._session.ocs("POST", f"{self._session.ae_url}/{self._url_suffix}", json=params)

tests/actual_tests/appcfg_prefs_ex_test.py

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -233,60 +233,88 @@ async def test_cfg_ex_get_typing_async(class_to_test):
233233
assert r[1].value == "321"
234234

235235

236-
def test_appcfg_sensitive(nc_app):
237-
appcfg = nc_app.appconfig_ex
238-
appcfg.delete("test_key")
239-
appcfg.set_value("test_key", "123", sensitive=True)
240-
assert appcfg.get_value("test_key") == "123"
241-
assert appcfg.get_values(["test_key"])[0].value == "123"
242-
appcfg.delete("test_key")
236+
@pytest.mark.parametrize("class_to_test", (NC_APP.appconfig_ex, NC_APP.preferences_ex))
237+
def test_appcfg_sensitive(nc_app, class_to_test):
238+
class_to_test.delete("test_key")
239+
class_to_test.set_value("test_key", "123", sensitive=True)
240+
assert class_to_test.get_value("test_key") == "123"
241+
assert class_to_test.get_values(["test_key"])[0].value == "123"
242+
class_to_test.delete("test_key")
243243
# next code tests `sensitive` value from the `AppAPI`
244244
params = {"configKey": "test_key", "configValue": "123"}
245-
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{appcfg._url_suffix}", json=params)
245+
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
246246
assert not result["sensitive"] # by default if sensitive value is unspecified it is False
247-
appcfg.delete("test_key")
248-
params = {"configKey": "test_key", "configValue": "123", "sensitive": True}
249-
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{appcfg._url_suffix}", json=params)
247+
class_to_test.delete("test_key")
248+
params["sensitive"] = True
249+
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
250250
assert result["configkey"] == "test_key"
251251
assert result["configvalue"] == "123"
252252
assert bool(result["sensitive"]) is True
253253
params.pop("sensitive") # if we not specify value, AppEcosystem should not change it.
254-
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{appcfg._url_suffix}", json=params)
254+
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
255255
assert result["configkey"] == "test_key"
256256
assert result["configvalue"] == "123"
257257
assert bool(result["sensitive"]) is True
258258
params["sensitive"] = False
259-
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{appcfg._url_suffix}", json=params)
259+
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
260260
assert result["configkey"] == "test_key"
261261
assert result["configvalue"] == "123"
262262
assert bool(result["sensitive"]) is False
263+
# test setting to empty value (sensitive=False)
264+
params["configValue"] = ""
265+
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
266+
assert result["configkey"] == "test_key"
267+
assert result["configvalue"] == ""
268+
assert bool(result["sensitive"]) is False
269+
assert class_to_test.get_value("test_key") == ""
270+
# test setting to empty value (sensitive=True)
271+
params["sensitive"] = True
272+
result = nc_app._session.ocs("POST", f"{nc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
273+
assert result["configkey"] == "test_key"
274+
assert result["configvalue"] == ""
275+
assert bool(result["sensitive"]) is True
276+
assert class_to_test.get_value("test_key") == ""
263277

264278

265279
@pytest.mark.asyncio(scope="session")
266-
async def test_appcfg_sensitive_async(anc_app):
267-
appcfg = anc_app.appconfig_ex
268-
await appcfg.delete("test_key")
269-
await appcfg.set_value("test_key", "123", sensitive=True)
270-
assert await appcfg.get_value("test_key") == "123"
271-
assert (await appcfg.get_values(["test_key"]))[0].value == "123"
272-
await appcfg.delete("test_key")
280+
@pytest.mark.parametrize("class_to_test", (NC_APP_ASYNC.appconfig_ex, NC_APP_ASYNC.preferences_ex))
281+
async def test_appcfg_sensitive_async(anc_app, class_to_test):
282+
await class_to_test.delete("test_key")
283+
await class_to_test.set_value("test_key", "123", sensitive=True)
284+
assert await class_to_test.get_value("test_key") == "123"
285+
assert (await class_to_test.get_values(["test_key"]))[0].value == "123"
286+
await class_to_test.delete("test_key")
273287
# next code tests `sensitive` value from the `AppAPI`
274288
params = {"configKey": "test_key", "configValue": "123"}
275-
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{appcfg._url_suffix}", json=params)
289+
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
276290
assert not result["sensitive"] # by default if sensitive value is unspecified it is False
277-
await appcfg.delete("test_key")
278-
params = {"configKey": "test_key", "configValue": "123", "sensitive": True}
279-
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{appcfg._url_suffix}", json=params)
291+
await class_to_test.delete("test_key")
292+
params["sensitive"] = True
293+
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
280294
assert result["configkey"] == "test_key"
281295
assert result["configvalue"] == "123"
282296
assert bool(result["sensitive"]) is True
283297
params.pop("sensitive") # if we not specify value, AppEcosystem should not change it.
284-
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{appcfg._url_suffix}", json=params)
298+
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
285299
assert result["configkey"] == "test_key"
286300
assert result["configvalue"] == "123"
287301
assert bool(result["sensitive"]) is True
288302
params["sensitive"] = False
289-
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{appcfg._url_suffix}", json=params)
303+
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
290304
assert result["configkey"] == "test_key"
291305
assert result["configvalue"] == "123"
292306
assert bool(result["sensitive"]) is False
307+
# test setting to empty value (sensitive=False)
308+
params["configValue"] = ""
309+
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
310+
assert result["configkey"] == "test_key"
311+
assert result["configvalue"] == ""
312+
assert bool(result["sensitive"]) is False
313+
assert await class_to_test.get_value("test_key") == ""
314+
# test setting to empty value (sensitive=True)
315+
params["sensitive"] = True
316+
result = await anc_app._session.ocs("POST", f"{anc_app._session.ae_url}/{class_to_test._url_suffix}", json=params)
317+
assert result["configkey"] == "test_key"
318+
assert result["configvalue"] == ""
319+
assert bool(result["sensitive"]) is True
320+
assert await class_to_test.get_value("test_key") == ""

0 commit comments

Comments
 (0)