nkbmusic/test/widget_test.dart
metatroncubeswdev 178d2d00ab Nanga Kathai: Flutter app, self-hosted backend and song tools
- Flutter app (Android/iOS): home, explore, albums, search, player with
  equalizer, mini player, sign up/sign in with email codes, profile,
  encrypted offline downloads, About page
- server/: one-command deploy of self-hosted Supabase behind HestiaCP/nginx
  (or Caddy), migrations, backups, email templates
- supabase/migrations: schema, row-level security, profiles
- tools/: song scanner and importer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:39:26 -04:00

57 lines
2.0 KiB
Dart

import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:nanga_kathai/core/models.dart';
import 'package:nanga_kathai/core/search_normalize.dart';
import 'package:nanga_kathai/data/catalog_repository.dart';
void main() {
group('foldForSearch', () {
test('treats common Badaga spelling variants as equal', () {
expect(foldForSearch('Madhuvae'), foldForSearch('madhuve'));
expect(foldForSearch('Hethai'), foldForSearch('Hettai'));
expect(foldForSearch('Hethai'), foldForSearch('Hethe'));
expect(foldForSearch('Baduga'), isNot(foldForSearch('Kathai')));
});
test('keeps Tamil script searchable', () {
expect(foldForSearch('பாடல்'), 'பாடல்');
});
});
group('matchesSearch', () {
test('every query word must match some field', () {
expect(matchesSearch('madhuve song', ['Madhuvae Song', null]), isTrue);
expect(matchesSearch('madhuve habba', ['Madhuvae Song']), isFalse);
expect(matchesSearch(' ', ['anything']), isFalse);
});
});
group('demo catalog', () {
late Catalog catalog;
setUpAll(() {
catalog = parseCatalogJson(File('assets/catalog/demo_catalog.json').readAsStringSync());
});
test('every track points at known singers and bundled audio', () {
expect(catalog.tracks, isNotEmpty);
for (final t in catalog.tracks) {
expect(catalog.artistsOf(t), hasLength(t.artistIds.length), reason: t.id);
final path = t.audioUrl.replaceFirst('asset:///', '');
expect(File(path).existsSync(), isTrue, reason: path);
}
});
test('search finds songs by occasion and singer', () {
expect(catalog.searchTracks('madhuve').map((t) => t.occasion), everyElement(Occasion.madhuvae));
expect(catalog.searchTracks('demo singer c'), isNotEmpty);
});
});
test('Artist.initials', () {
expect(const Artist(id: 'x', name: 'Demo Singer A').initials, 'DA');
expect(const Artist(id: 'x', name: 'Ponnamma').initials, 'P');
});
}