Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions apps_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,76 @@
"asset_pattern": "grupetto-*.apk",
"description": "Sends bike data via BLE and provides a data metrics overlay"
},
"QZ Standard Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug.apk",
"asset_name": "android-debug.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ nightly build for standard Android devices."
},
"QZ NordicTrack Treadmill Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug-nordictrack-treadmill.apk",
"asset_name": "android-debug-nordictrack-treadmill.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ nightly build for NordicTrack/iFIT treadmills using the gRPC integration."
},
"QZ NordicTrack Bike Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug-nordictrack-bike.apk",
"asset_name": "android-debug-nordictrack-bike.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ nightly build for NordicTrack/iFIT bikes using the gRPC integration."
},
"QZ NordicTrack Rower Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug-nordictrack-rower.apk",
"asset_name": "android-debug-nordictrack-rower.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ nightly build for NordicTrack/iFIT rowers using the gRPC integration."
},
"QZ FitPro Treadmill Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug-fitpro-treadmill.apk",
"asset_name": "android-debug-fitpro-treadmill.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ FitPro nightly build for direct USB-HID NordicTrack/iFIT treadmill access."
},
"QZ FitPro Bike Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug-fitpro-bike.apk",
"asset_name": "android-debug-fitpro-bike.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ FitPro nightly build for direct USB-HID NordicTrack/iFIT bike access."
},
"QZ FitPro Elliptical Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug-fitpro-elliptical.apk",
"asset_name": "android-debug-fitpro-elliptical.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ FitPro nightly build for direct USB-HID NordicTrack/iFIT elliptical access."
},
"QZ FitPro Rower Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug-fitpro-rower.apk",
"asset_name": "android-debug-fitpro-rower.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ FitPro nightly build for direct USB-HID NordicTrack/iFIT rower access."
},
"QZ Peloton Bike Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug-peloton-bike.apk",
"asset_name": "android-debug-peloton-bike.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ nightly build for Peloton Bike using the Grupetto integration."
},
"QZ Peloton Bike+ Nightly": {
"category": "Fitness",
"url": "https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/android-debug-peloton-bike-plus.apk",
"asset_name": "android-debug-peloton-bike-plus.apk",
"package_id": "org.cagnulen.qdomyoszwift",
"description": "Latest QZ nightly build for Peloton Bike+ using the Grupetto integration."
},
"Google Text-to-Speech": {
"category": "Accessibility",
"recommendation_id": "google-tts",
Expand Down
46 changes: 46 additions & 0 deletions test/qz_catalog_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:openpelo/services/config_service.dart';

void main() {
TestWidgetsFlutterBinding.ensureInitialized();

test(
'catalog exposes every QZ nightly APK variant through latest URLs',
() async {
final apps = await ConfigService().loadApps();
final qz = {
for (final entry in apps.entries)
if (entry.key.startsWith('QZ ')) entry.key: entry.value,
};

expect(
qz.keys,
containsAll(<String>[
'QZ Standard Nightly',
'QZ NordicTrack Treadmill Nightly',
'QZ NordicTrack Bike Nightly',
'QZ NordicTrack Rower Nightly',
'QZ FitPro Treadmill Nightly',
'QZ FitPro Bike Nightly',
'QZ FitPro Elliptical Nightly',
'QZ FitPro Rower Nightly',
'QZ Peloton Bike Nightly',
'QZ Peloton Bike+ Nightly',
]),
);
expect(qz, hasLength(10));

for (final app in qz.values) {
expect(
app.url,
startsWith(
'https://github.com/cagnulein/qdomyos-zwift/releases/latest/download/',
),
);
expect(app.assetName, endsWith('.apk'));
expect(app.packageId, 'org.cagnulen.qdomyoszwift');
expect(app.category, 'Fitness');
}
},
);
}
Loading