feat(grabaciones): add recordings library screen
This commit is contained in:
@@ -8,6 +8,9 @@ import 'package:pluriwave/modelos/emisora.dart';
|
||||
import 'package:pluriwave/servicios/servicio_grabacion_radio.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
/// WU15 task 15.5: `listarGrabaciones()` is a pure filesystem-listing
|
||||
/// addition — no logic edit to any existing method above.
|
||||
|
||||
void main() {
|
||||
group('ServicioGrabacionRadio', () {
|
||||
test(
|
||||
@@ -194,6 +197,119 @@ void main() {
|
||||
await servicio.dispose();
|
||||
await servicio2.dispose();
|
||||
});
|
||||
|
||||
group('listarGrabaciones (WU15 task 15.5)', () {
|
||||
test('lista archivos existentes con metadata, orden más reciente '
|
||||
'primero', () async {
|
||||
final dir = await Directory.systemTemp.createTemp(
|
||||
'pluriwave-rec-list-',
|
||||
);
|
||||
final carpeta = Directory(
|
||||
'${dir.path}${Platform.pathSeparator}grabaciones',
|
||||
);
|
||||
await carpeta.create(recursive: true);
|
||||
final antiguo = File(
|
||||
'${carpeta.path}${Platform.pathSeparator}2026-01-01-radio-a.mp3',
|
||||
);
|
||||
await antiguo.writeAsBytes(List.filled(10, 0));
|
||||
await antiguo.setLastModified(DateTime(2026, 1, 1));
|
||||
final reciente = File(
|
||||
'${carpeta.path}${Platform.pathSeparator}2026-06-01-radio-b.mp3',
|
||||
);
|
||||
await reciente.writeAsBytes(List.filled(20, 0));
|
||||
await reciente.setLastModified(DateTime(2026, 6, 1));
|
||||
|
||||
final servicio = ServicioGrabacionRadio(
|
||||
resolverDirectorioBase: () async => dir,
|
||||
);
|
||||
|
||||
final lista = await servicio.listarGrabaciones();
|
||||
|
||||
expect(lista, hasLength(2));
|
||||
expect(lista.first.nombre, '2026-06-01-radio-b');
|
||||
expect(lista.first.tamanoBytes, 20);
|
||||
expect(lista.first.fecha, DateTime(2026, 6, 1));
|
||||
expect(lista.last.nombre, '2026-01-01-radio-a');
|
||||
expect(lista.last.tamanoBytes, 10);
|
||||
|
||||
await servicio.dispose();
|
||||
});
|
||||
|
||||
test('carpeta inexistente devuelve lista vacía, no lanza', () async {
|
||||
final dir = await Directory.systemTemp.createTemp(
|
||||
'pluriwave-rec-list-empty-',
|
||||
);
|
||||
final servicio = ServicioGrabacionRadio(
|
||||
resolverDirectorioBase: () async => dir,
|
||||
);
|
||||
|
||||
final lista = await servicio.listarGrabaciones();
|
||||
|
||||
expect(lista, isEmpty);
|
||||
await servicio.dispose();
|
||||
});
|
||||
});
|
||||
|
||||
group('eliminarGrabacion y renombrarGrabacion (WU15 task 15.5)', () {
|
||||
test('eliminarGrabacion borra el archivo del disco', () async {
|
||||
final dir = await Directory.systemTemp.createTemp(
|
||||
'pluriwave-rec-delete-',
|
||||
);
|
||||
final archivo = File('${dir.path}${Platform.pathSeparator}a.mp3');
|
||||
await archivo.writeAsBytes([1, 2, 3]);
|
||||
final servicio = ServicioGrabacionRadio(
|
||||
resolverDirectorioBase: () async => dir,
|
||||
);
|
||||
|
||||
await servicio.eliminarGrabacion(archivo.path);
|
||||
|
||||
expect(await archivo.exists(), isFalse);
|
||||
await servicio.dispose();
|
||||
});
|
||||
|
||||
test('eliminarGrabacion sobre un archivo ya borrado no lanza', () async {
|
||||
final dir = await Directory.systemTemp.createTemp(
|
||||
'pluriwave-rec-delete-missing-',
|
||||
);
|
||||
final servicio = ServicioGrabacionRadio(
|
||||
resolverDirectorioBase: () async => dir,
|
||||
);
|
||||
|
||||
await expectLater(
|
||||
servicio.eliminarGrabacion(
|
||||
'${dir.path}${Platform.pathSeparator}no-existe.mp3',
|
||||
),
|
||||
completes,
|
||||
);
|
||||
await servicio.dispose();
|
||||
});
|
||||
|
||||
test(
|
||||
'renombrarGrabacion preserva la extensión y devuelve la nueva ruta',
|
||||
() async {
|
||||
final dir = await Directory.systemTemp.createTemp(
|
||||
'pluriwave-rec-rename-',
|
||||
);
|
||||
final archivo = File(
|
||||
'${dir.path}${Platform.pathSeparator}original.mp3',
|
||||
);
|
||||
await archivo.writeAsBytes([1, 2, 3]);
|
||||
final servicio = ServicioGrabacionRadio(
|
||||
resolverDirectorioBase: () async => dir,
|
||||
);
|
||||
|
||||
final nuevaRuta = await servicio.renombrarGrabacion(
|
||||
archivo.path,
|
||||
'mi grabación',
|
||||
);
|
||||
|
||||
expect(nuevaRuta, endsWith('mi grabación.mp3'));
|
||||
expect(await File(nuevaRuta).exists(), isTrue);
|
||||
expect(await archivo.exists(), isFalse);
|
||||
await servicio.dispose();
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user