129 lines
4.4 KiB
Dart
129 lines
4.4 KiB
Dart
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:forge/src/rust/api/packages.dart';
|
|
import 'package:forge/src/services/catalog_service.dart';
|
|
|
|
void main() {
|
|
group('CatalogService.extractAppBaseName', () {
|
|
test('strips common AUR package suffixes correctly', () {
|
|
expect(CatalogService.extractAppBaseName('paru'), 'paru');
|
|
expect(CatalogService.extractAppBaseName('paru-bin'), 'paru');
|
|
expect(CatalogService.extractAppBaseName('paru-git'), 'paru');
|
|
expect(CatalogService.extractAppBaseName('paru-static'), 'paru');
|
|
expect(CatalogService.extractAppBaseName('google-chrome-beta'), 'google-chrome');
|
|
expect(CatalogService.extractAppBaseName('google-chrome-dev'), 'google-chrome');
|
|
expect(CatalogService.extractAppBaseName('telegram-desktop-bin'), 'telegram-desktop');
|
|
expect(CatalogService.extractAppBaseName('visual-studio-code-insiders-bin'), 'visual-studio-code');
|
|
expect(CatalogService.extractAppBaseName('zen-browser-beta-bin'), 'zen-browser');
|
|
});
|
|
});
|
|
|
|
group('CatalogService.markRecommendedAurPackages', () {
|
|
test('marks package with highest votes as recommended when multiple variants exist', () {
|
|
final apps = [
|
|
CatalogApp(
|
|
id: 'paru',
|
|
name: 'paru',
|
|
summary: 'Paru source',
|
|
category: 'AUR',
|
|
backend: BackendType.aur,
|
|
votes: 1256,
|
|
fallbackIcon: CupertinoIcons.app,
|
|
),
|
|
CatalogApp(
|
|
id: 'paru-bin',
|
|
name: 'paru-bin',
|
|
summary: 'Paru binary',
|
|
category: 'AUR',
|
|
backend: BackendType.aur,
|
|
votes: 324,
|
|
fallbackIcon: CupertinoIcons.app,
|
|
),
|
|
CatalogApp(
|
|
id: 'paru-git',
|
|
name: 'paru-git',
|
|
summary: 'Paru development git',
|
|
category: 'AUR',
|
|
backend: BackendType.aur,
|
|
votes: 69,
|
|
fallbackIcon: CupertinoIcons.app,
|
|
),
|
|
CatalogApp(
|
|
id: 'unique-single-utility',
|
|
name: 'unique-single-utility',
|
|
summary: 'Single tool',
|
|
category: 'AUR',
|
|
backend: BackendType.aur,
|
|
votes: 50,
|
|
fallbackIcon: CupertinoIcons.app,
|
|
),
|
|
];
|
|
|
|
CatalogService.markRecommendedAurPackages(apps);
|
|
|
|
final paru = apps.firstWhere((a) => a.id == 'paru');
|
|
final paruBin = apps.firstWhere((a) => a.id == 'paru-bin');
|
|
final paruGit = apps.firstWhere((a) => a.id == 'paru-git');
|
|
final single = apps.firstWhere((a) => a.id == 'unique-single-utility');
|
|
|
|
expect(paru.isRecommended, isTrue);
|
|
expect(paruBin.isRecommended, isFalse);
|
|
expect(paruGit.isRecommended, isFalse);
|
|
expect(single.isRecommended, isFalse);
|
|
});
|
|
|
|
test('correctly handles multiple different app groups in the same search result', () {
|
|
final apps = [
|
|
CatalogApp(
|
|
id: 'spotify',
|
|
name: 'spotify',
|
|
summary: 'Spotify client',
|
|
category: 'AUR',
|
|
backend: BackendType.aur,
|
|
votes: 276,
|
|
fallbackIcon: CupertinoIcons.app,
|
|
),
|
|
CatalogApp(
|
|
id: 'spotify-dev',
|
|
name: 'spotify-dev',
|
|
summary: 'Spotify dev',
|
|
category: 'AUR',
|
|
backend: BackendType.aur,
|
|
votes: 26,
|
|
fallbackIcon: CupertinoIcons.app,
|
|
),
|
|
CatalogApp(
|
|
id: 'zen-browser-bin',
|
|
name: 'zen-browser-bin',
|
|
summary: 'Zen Browser Binary',
|
|
category: 'AUR',
|
|
backend: BackendType.aur,
|
|
votes: 140,
|
|
fallbackIcon: CupertinoIcons.app,
|
|
),
|
|
CatalogApp(
|
|
id: 'zen-browser-beta-bin',
|
|
name: 'zen-browser-beta-bin',
|
|
summary: 'Zen Browser Beta',
|
|
category: 'AUR',
|
|
backend: BackendType.aur,
|
|
votes: 15,
|
|
fallbackIcon: CupertinoIcons.app,
|
|
),
|
|
];
|
|
|
|
CatalogService.markRecommendedAurPackages(apps);
|
|
|
|
final spotify = apps.firstWhere((a) => a.id == 'spotify');
|
|
final spotifyDev = apps.firstWhere((a) => a.id == 'spotify-dev');
|
|
final zenBin = apps.firstWhere((a) => a.id == 'zen-browser-bin');
|
|
final zenBeta = apps.firstWhere((a) => a.id == 'zen-browser-beta-bin');
|
|
|
|
expect(spotify.isRecommended, isTrue);
|
|
expect(spotifyDev.isRecommended, isFalse);
|
|
expect(zenBin.isRecommended, isTrue);
|
|
expect(zenBeta.isRecommended, isFalse);
|
|
});
|
|
});
|
|
}
|