Skip to content

Commit

Permalink
Merge 547f60d into 446b89a
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Silk committed Aug 3, 2020
2 parents 446b89a + 547f60d commit 8a69d54
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 24 deletions.
24 changes: 5 additions & 19 deletions lib/src/manup_service.dart
Expand Up @@ -46,6 +46,9 @@ class ManUpService {
}
}

@visibleForTesting
T setting<T>({String key}) => _manupData?.setting(key: key) ?? null;

@visibleForTesting
PlatformData getPlatformData(String os, Metadata data) {
if (data == null) {
Expand All @@ -64,28 +67,11 @@ class ManUpService {
try {
var data = await this.http.get(this.url);
this.http.close();
PlatformData ios;
PlatformData android;

Map<String, dynamic> json = jsonDecode(data.body);

if (json['ios'] != null) {
ios = this.parseJson(json['ios']);
}
if (json['android'] != null) {
android = this.parseJson(json['android']);
}
return Metadata(android: android, ios: ios);
return Metadata(data: json);
} catch (exception) {
throw ManUpException(exception.toString());
}
}

@visibleForTesting
PlatformData parseJson(Map<String, dynamic> data) {
return PlatformData(
enabled: data['enabled'],
latestVersion: data['latest'],
minVersion: data['minimum'],
updateUrl: data['url']);
}
}
26 changes: 23 additions & 3 deletions lib/src/metadata.dart
Expand Up @@ -16,15 +16,35 @@ class PlatformData {

PlatformData(
{this.minVersion, this.latestVersion, this.enabled, this.updateUrl});

@visibleForTesting
static PlatformData fromData(Map<String, dynamic> data) {
return PlatformData(
enabled: data['enabled'],
latestVersion: data['latest'],
minVersion: data['minimum'],
updateUrl: data['url']);
}
}

/// Version information extracted from the JSON file
class Metadata {
/// ios specific configuration
final PlatformData ios;
PlatformData get ios => PlatformData.fromData(_data['ios']);

/// android specific configuration
final PlatformData android;
PlatformData get android => PlatformData.fromData(_data['android']);

// Configuration file data
final Map<String, dynamic> _data;

dynamic rawSetting({String key}) => _data.containsKey(key) ? _data[key] : null;

T setting<T>({String key}) {
var value = rawSetting(key: key);
return value is T ? value : null;
}

Metadata({this.ios, this.android});
Metadata({Map<String, dynamic> data}) :
_data = data;
}
39 changes: 37 additions & 2 deletions test/mandatory_update_test.dart
Expand Up @@ -32,8 +32,7 @@ void main() {
"enabled": true
}''');

ManUpService service = ManUpService('https://example.com/manup.json');
var data = service.parseJson(json);
var data = PlatformData.fromData(json);
expect(data.enabled, true);
expect(data.latestVersion, "2.4.1");
expect(data.minVersion, "2.1.0");
Expand Down Expand Up @@ -77,6 +76,42 @@ void main() {
expect(metadata.android.updateUrl,
"http://example.com/myAppUpdate/android");
});

test('Read custom properties from configuration', () async {
var packageInfo = MockPackageInfo("1.1.0");
OSGetter os = () => 'ios';
var client = MockClient();
var response = http.Response('''
{
"ios": {
"latest": "2.4.1",
"minimum": "2.1.0",
"url": "http://example.com/myAppUpdate",
"enabled": true
},
"android": {
"latest": "2.5.1",
"minimum": "1.9.0",
"url": "http://example.com/myAppUpdate/android",
"enabled": false
},
"api-base": "http://api.example.com/",
"number-of-coins": 12
}
''', 200);
when(client.get("https://example.com/manup.json"))
.thenAnswer((Invocation i) => Future.value(response));
var service = ManUpService('https://example.com/manup.json',
http: client, packageInfoProvider: packageInfo, os: os);
await service.validate();
verify(client.get("https://example.com/manup.json")).called(1);

expect(service.setting<String>(key: "api-base"), "http://api.example.com/");
expect(service.setting<int>(key: "api-base"), null);

expect(service.setting<String>(key: "number-of-coins"), null);
expect(service.setting<int>(key: "number-of-coins"), 12);
});
});

group("validate", () {
Expand Down

0 comments on commit 8a69d54

Please sign in to comment.