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