Files
Forge/test/recommended_aur_package_test.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);
});
});
}