import 'package:flutter_test/flutter_test.dart'; import 'package:storytime/core/error/failure.dart'; import 'package:storytime/core/error/result.dart'; void main() { group('Result', () { const failure = UnexpectedFailure('boom'); group('Ok', () { test('map transforme la valeur', () { const result = Ok(1); expect(result.map((v) => v + 1), equals(const Ok(2))); }); test('map préserve le type Ok et produit la bonne valeur', () { const result = Ok('hello'); final mapped = result.map((v) => v.length); expect(mapped, isA>()); expect((mapped as Ok).value, equals(5)); }); test('fold appelle la branche ok', () { const result = Ok(42); final out = result.fold(onOk: (v) => 'ok:$v', onErr: (_) => 'err'); expect(out, equals('ok:42')); }); test('when appelle la branche ok et pas la branche err', () { const result = Ok(7); var okCalled = false; var errCalled = false; result.when(ok: (_) => okCalled = true, err: (_) => errCalled = true); expect(okCalled, isTrue); expect(errCalled, isFalse); }); }); group('Err', () { test('map ne transforme pas — reste Err avec le même Failure', () { const result = Err(failure); final mapped = result.map((v) => v + 1); expect(mapped, isA>()); expect((mapped as Err).failure, same(failure)); }); test('fold appelle la branche err', () { const result = Err(failure); final out = result.fold( onOk: (_) => 'ok', onErr: (f) => 'err:${f.message}', ); expect(out, equals('err:boom')); }); test('when appelle la branche err et pas la branche ok', () { const result = Err(failure); var okCalled = false; var errCalled = false; result.when(ok: (_) => okCalled = true, err: (_) => errCalled = true); expect(errCalled, isTrue); expect(okCalled, isFalse); }); }); group('Failure sous-types', () { test('NetworkFailure expose le message', () { const f = NetworkFailure('timeout'); expect(f.message, equals('timeout')); }); test('NotFoundFailure expose le message', () { const f = NotFoundFailure('episode 42'); expect(f.message, equals('episode 42')); }); test('UnexpectedFailure expose le message', () { const f = UnexpectedFailure('oops'); expect(f.message, equals('oops')); }); }); }); }