Nikolas Rimikis
1 year ago
1 changed files with 84 additions and 0 deletions
@ -0,0 +1,84 @@ |
|||||||
|
import 'package:mocktail/mocktail.dart'; |
||||||
|
import 'package:neon/settings.dart'; |
||||||
|
import 'package:neon/src/settings/models/option.dart'; |
||||||
|
import 'package:neon/src/settings/models/storage.dart'; |
||||||
|
import 'package:test/test.dart'; |
||||||
|
|
||||||
|
// ignore: missing_override_of_must_be_overridden |
||||||
|
class OptionMock extends Mock implements Option {} |
||||||
|
|
||||||
|
class Collection extends NextcloudAppOptions { |
||||||
|
Collection(final List<Option> options) : super(const AppStorage(StorageKeys.apps)) { |
||||||
|
super.options = options; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
enum Keys implements Storable { |
||||||
|
key1._('key1'), |
||||||
|
key2._('key2'); |
||||||
|
|
||||||
|
const Keys._(this.value); |
||||||
|
|
||||||
|
@override |
||||||
|
final String value; |
||||||
|
} |
||||||
|
|
||||||
|
void main() { |
||||||
|
group('OptionsCollection', () { |
||||||
|
final option1 = OptionMock(); |
||||||
|
final option2 = OptionMock(); |
||||||
|
final collection = Collection([ |
||||||
|
option1, |
||||||
|
option2, |
||||||
|
]); |
||||||
|
|
||||||
|
test('reset', () { |
||||||
|
collection.reset(); |
||||||
|
|
||||||
|
verify(option1.reset).called(1); |
||||||
|
verify(option2.reset).called(1); |
||||||
|
}); |
||||||
|
|
||||||
|
test('dispose', () { |
||||||
|
collection.dispose(); |
||||||
|
|
||||||
|
verify(option1.dispose).called(1); |
||||||
|
verify(option2.dispose).called(1); |
||||||
|
}); |
||||||
|
|
||||||
|
test('export', () { |
||||||
|
when(() => option1.key).thenReturn(Keys.key1); |
||||||
|
when(option1.serialize).thenReturn('value1'); |
||||||
|
when(() => option1.enabled).thenReturn(true); |
||||||
|
|
||||||
|
when(() => option2.key).thenReturn(Keys.key2); |
||||||
|
when(option2.serialize).thenReturn('value2'); |
||||||
|
when(() => option2.enabled).thenReturn(false); |
||||||
|
|
||||||
|
const json = { |
||||||
|
'app': {'key1': 'value1'}, |
||||||
|
}; |
||||||
|
|
||||||
|
final export = collection.export(); |
||||||
|
|
||||||
|
expect(Map.fromEntries([export]), equals(json)); |
||||||
|
}); |
||||||
|
|
||||||
|
test('import', () { |
||||||
|
when(() => option1.key).thenReturn(Keys.key1); |
||||||
|
when(() => option2.key).thenReturn(Keys.key2); |
||||||
|
|
||||||
|
const json = { |
||||||
|
'app': { |
||||||
|
'key1': 'value1', |
||||||
|
'key2': null, |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
collection.import(json); |
||||||
|
|
||||||
|
verify(() => option1.load('value1')).called(1); |
||||||
|
verify(option2.reset).called(1); |
||||||
|
}); |
||||||
|
}); |
||||||
|
} |
Loading…
Reference in new issue