Skip to content

Commit

Permalink
Feature/add upsertSettingByKey to SettingsFacade (#257)
Browse files Browse the repository at this point in the history
* feat: add upsertSettingByKey

* test: update

* fix: actually bump the runtime

* chore: bump stuff

* fix: test
  • Loading branch information
jkoenig134 authored Sep 3, 2024
1 parent 7004e5c commit 15b0e4d
Show file tree
Hide file tree
Showing 7 changed files with 107 additions and 53 deletions.
2 changes: 1 addition & 1 deletion packages/enmeshed_runtime_bridge/assets/index.js

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -17,45 +17,58 @@ void run(EnmeshedRuntime runtime) {
session = runtime.getSession(account.id);
});

group('SettingsFacade', () {
final value = {'aKey': 'a-value'};
late String settingId;
tearDown(() async {
final settings = await session.consumptionServices.settings.getSettings();
for (final setting in settings.value) {
await session.consumptionServices.settings.deleteSetting(setting.id);
}
});

group('SettingsFacade', () {
test('should create a setting', () async {
const value = {'aKey': 'a-value'};
final result = await session.consumptionServices.settings.createSetting(key: 'a-key', value: value);
expect(result, isSuccessful<SettingDTO>());

final setting = result.value;
settingId = setting.id;

expect(setting.value, value);
});

test('should contain the setting in the list of settings', () async {
const value = {'aKey': 'a-value'};
final setting = (await session.consumptionServices.settings.createSetting(key: 'a-key', value: value)).value;

final result = await session.consumptionServices.settings.getSettings();
expect(result, isSuccessful<List<SettingDTO>>());

final settings = result.value;

expect(settings, hasLength(1));
expect(settings[0].id, settingId);
expect(settings[0].id, setting.id);
expect(settings[0].value, value);
});

test('should edit the setting', () async {
const value = {'aKey': 'a-value'};
final setting = (await session.consumptionServices.settings.createSetting(key: 'a-key', value: value)).value;

final newValue = {'aKey': 'another-Value'};
final updateResult = await session.consumptionServices.settings.updateSetting(settingId, newValue);
final updateResult = await session.consumptionServices.settings.updateSetting(setting.id, newValue);
expect(updateResult, isSuccessful<SettingDTO>());

final result = await session.consumptionServices.settings.getSetting(settingId);
final result = await session.consumptionServices.settings.getSetting(setting.id);
expect(result, isSuccessful<SettingDTO>());

final setting = result.value;
expect(setting.value, newValue);
final updatedSetting = result.value;
expect(updatedSetting.value, newValue);
});

test('should delete the setting', () async {
final deleteResult = await session.consumptionServices.settings.deleteSetting(settingId);
const value = {'aKey': 'a-value'};
final setting = (await session.consumptionServices.settings.createSetting(key: 'a-key', value: value)).value;

final deleteResult = await session.consumptionServices.settings.deleteSetting(setting.id);
expect(deleteResult, isSuccessful());

final result = await session.consumptionServices.settings.getSettings();
Expand Down Expand Up @@ -87,5 +100,30 @@ void run(EnmeshedRuntime runtime) {
'key': ['newValue']
});
});

test('should upsert a setting by key when it does not exist yet', () async {
await session.consumptionServices.settings.upsertSettingByKey('a-key', {'aKey': 'a-value'});

final result = await session.consumptionServices.settings.getSettings();
expect(result, isSuccessful<List<SettingDTO>>());
expect(result.value, hasLength(1));

final setting = await session.consumptionServices.settings.getSettingByKey('a-key');
expect(setting.value.value, {'aKey': 'a-value'});
});

test('should upsert a setting by key', () async {
const value = {'aKey': 'a-value'};
await session.consumptionServices.settings.createSetting(key: 'a-key', value: value);

await session.consumptionServices.settings.upsertSettingByKey('a-key', {'aKey': 'aNewValue'});

final result = await session.consumptionServices.settings.getSettings();
expect(result, isSuccessful<List<SettingDTO>>());
expect(result.value, hasLength(1));

final setting = await session.consumptionServices.settings.getSettingByKey('a-key');
expect(setting.value.value, {'aKey': 'aNewValue'});
});
});
}
2 changes: 1 addition & 1 deletion packages/enmeshed_runtime_bridge/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ SPEC CHECKSUMS:
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_inappwebview_ios: 97215cf7d4677db55df76782dbd2930c5e1c1ea0
flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
integration_test: ce0a3ffa1de96d1a89ca0ac26fca7ea18a749ef4
integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import UIKit
import Flutter

@UIApplicationMain
@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,20 @@ class SettingsFacade {

return Result.fromJson(result.valueToMap(), (x) => SettingDTO.fromJson(x));
}

Future<Result<SettingDTO>> upsertSettingByKey(String key, Map<String, dynamic> value) async {
final result = await _evaluator.evaluateJavaScript(
'''const result = await session.consumptionServices.settings.upsertSettingByKey(request)
if (result.isError) return { error: { message: result.error.message, code: result.error.code } }
return { value: result.value }''',
arguments: {
'request': {
'key': key,
'value': value,
},
},
);

return Result.fromJson(result.valueToMap(), (x) => SettingDTO.fromJson(x));
}
}
74 changes: 37 additions & 37 deletions packages/enmeshed_runtime_bridge/natives/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions packages/enmeshed_runtime_bridge/natives/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
"@js-soft/logging-abstractions": "^1.0.1",
"@js-soft/ts-utils": "^2.3.3",
"@js-soft/web-logger": "^1.0.4",
"@nmshd/app-runtime": "5.3.0",
"@nmshd/runtime": "5.3.0",
"@nmshd/app-runtime": "5.4.0",
"@nmshd/runtime": "5.4.0",
"js-logger": "^1.6.1",
"json-stringify-safe": "^5.0.1",
"lodash": "^4.17.21"
Expand All @@ -24,7 +24,7 @@
"@types/json-stringify-safe": "^5.0.3",
"@types/lodash": "^4.17.7",
"@types/luxon": "^3.4.2",
"@types/node": "^22.5.0",
"@types/node": "^22.5.2",
"esbuild": "^0.23.1",
"luxon": "^3.5.0",
"prettier": "^3.3.3",
Expand Down

0 comments on commit 15b0e4d

Please sign in to comment.