f6e27cd39a
pub_semver is permissive with leading zeros — '2026.05.10' parses as 2026.5.10, so date-style tags get strict semver ordering, not the unparseable-fallback path. The test was asserting "any difference = newer" for date strings, which is incorrect; the actual behavior (and the right behavior) is proper ordering. Split the test group into two: - date-style (parses as semver): newer/older/equal assertions - truly unparseable (e.g. branch names like 'main', 'dev'): the fallback's "any difference = newer" semantics still apply Implementation in client_update_provider.dart unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
2.2 KiB
Dart
62 lines
2.2 KiB
Dart
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 (date-style versions parse as semver)', () {
|
|
// pub_semver is permissive with leading zeros — '2026.05.10'
|
|
// parses as 2026.5.10. So date-style tags get strict ordering,
|
|
// not the unparseable-fallback path.
|
|
test('newer date → newer', () {
|
|
expect(isVersionNewer('2026.05.10', '2026.05.09'), isTrue);
|
|
});
|
|
test('older date → not newer', () {
|
|
expect(isVersionNewer('2026.05.09', '2026.05.10'), isFalse);
|
|
});
|
|
test('equal date → not newer', () {
|
|
expect(isVersionNewer('2026.05.10', '2026.05.10'), isFalse);
|
|
});
|
|
});
|
|
|
|
group('isVersionNewer (truly non-semver fallback)', () {
|
|
// Branch-name-style strings (no version structure) hit the
|
|
// try/catch fallback. Any string difference reads as "newer" so
|
|
// operators see _something_ rather than silently miss updates.
|
|
test('different unparseable strings → newer', () {
|
|
expect(isVersionNewer('main', 'dev'), isTrue);
|
|
expect(isVersionNewer('dev', 'main'), isTrue);
|
|
});
|
|
test('equal unparseable strings → not newer', () {
|
|
expect(isVersionNewer('main', 'main'), isFalse);
|
|
});
|
|
});
|
|
}
|