import 'package:flutter_test/flutter_test.dart'; import 'package:minstrel/update/client_update_provider.dart'; void main() { group('isVersionNewer (semver path)', () { test('strictly newer', () { expect(isVersionNewer('0.1.1', '0.1.0'), isTrue); expect(isVersionNewer('0.2.0', '0.1.99'), isTrue); expect(isVersionNewer('1.0.0', '0.99.99'), isTrue); }); test('equal returns false', () { expect(isVersionNewer('0.1.0', '0.1.0'), isFalse); }); test('older returns false', () { expect(isVersionNewer('0.1.0', '0.1.1'), isFalse); expect(isVersionNewer('0.1.0', '0.2.0'), isFalse); }); test('strips leading v on either side', () { expect(isVersionNewer('v0.1.1', '0.1.0'), isTrue); expect(isVersionNewer('0.1.1', 'v0.1.0'), isTrue); expect(isVersionNewer('v0.1.0', 'v0.1.0'), isFalse); }); test('honors prerelease ordering', () { // 0.1.0 > 0.1.0-rc.1 per semver expect(isVersionNewer('0.1.0', '0.1.0-rc.1'), isTrue); expect(isVersionNewer('0.1.0-rc.1', '0.1.0'), isFalse); }); }); group('isVersionNewer (non-semver fallback)', () { test('different strings → newer', () { // Date-tag-style versions don't parse as semver; falls back to // string inequality. Operator can dismiss if the comparison is // wrong (the alternative — silent skip — would mean operators // never see updates). expect(isVersionNewer('2026.05.10', '2026.05.09'), isTrue); expect(isVersionNewer('2026.05.09', '2026.05.10'), isTrue); }); test('equal strings → not newer', () { expect(isVersionNewer('2026.05.10', '2026.05.10'), isFalse); }); }); }