Shuffle/app/test/features/auth/domain/auth_domain_test.dart
cschlaefke 54337ffc59 feat(auth): add auth domain, repository, validators and router redirects
Refs #1

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 00:09:47 +01:00

65 lines
2.1 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:shuffle/features/auth/domain/auth_failure.dart';
import 'package:shuffle/features/auth/domain/email_link_type.dart';
import 'package:shuffle/features/auth/domain/resend_origin.dart';
void main() {
group('KTO-01 Kriterium 6: resendFailureFor (F12)', () {
const limited = AuthFailure.emailSendLimited();
test('check-email screen treats emailSendLimited as success', () {
expect(resendFailureFor(limited, ResendOrigin.checkEmail), isNull);
});
test('login screen shows the throttling hint', () {
expect(
resendFailureFor(limited, ResendOrigin.login),
const AuthFailure.rateLimited(),
);
});
test('other failures pass through unchanged', () {
for (final origin in ResendOrigin.values) {
expect(
resendFailureFor(const AuthFailure.rateLimited(), origin),
const AuthFailure.rateLimited(),
);
expect(
resendFailureFor(const AuthFailure.network(), origin),
const AuthFailure.network(),
);
}
});
});
group('KTO-01 Kriterium 4: openEmailInputFailureFor (F12)', () {
test('emailSendLimited counts as success', () {
expect(
openEmailInputFailureFor(const AuthFailure.emailSendLimited()),
isNull,
);
});
test('rateLimited stays visible', () {
expect(
openEmailInputFailureFor(const AuthFailure.rateLimited()),
const AuthFailure.rateLimited(),
);
});
});
group('KTO-01 Kriterium 8: EmailLinkType.tryParse', () {
test('maps email and signup to confirmation, recovery to recovery', () {
expect(EmailLinkType.tryParse('email'), EmailLinkType.confirmation);
expect(EmailLinkType.tryParse('signup'), EmailLinkType.confirmation);
expect(EmailLinkType.tryParse('recovery'), EmailLinkType.recovery);
});
test('rejects missing and unknown types', () {
expect(EmailLinkType.tryParse(null), isNull);
expect(EmailLinkType.tryParse(''), isNull);
expect(EmailLinkType.tryParse('magiclink'), isNull);
expect(EmailLinkType.tryParse('invite'), isNull);
});
});
}