123 lines
3.4 KiB
Dart
123 lines
3.4 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:tdc114plus/src/features/auth/domain/auth_models.dart';
|
|
|
|
void main() {
|
|
test('PhoneLoginRequest serializes phone login payload', () {
|
|
const request = PhoneLoginRequest(
|
|
phoneNumber: '01012345678',
|
|
device: LoginDeviceInfo(
|
|
platform: 'android',
|
|
appVersion: '0.1.0',
|
|
deviceName: 'Pixel 8',
|
|
),
|
|
);
|
|
|
|
expect(request.toJson(), {
|
|
'phoneNumber': '01012345678',
|
|
'device': {
|
|
'platform': 'android',
|
|
'appVersion': '0.1.0',
|
|
'deviceName': 'Pixel 8',
|
|
},
|
|
});
|
|
});
|
|
|
|
test('PhoneLoginResponse parses session token response', () {
|
|
final response = PhoneLoginResponse.fromJson({
|
|
'status': 'ok',
|
|
'token': 'baron-sso-session-token',
|
|
'expiresAt': '2026-07-02T12:00:00Z',
|
|
'user': {
|
|
'id': 'user-uuid',
|
|
'name': 'User One',
|
|
'phoneNumber': '+821012345678',
|
|
'tenantId': 'tenant-uuid',
|
|
'tenantName': 'Hanmac',
|
|
'tenantSlug': 'hanmac',
|
|
'department': 'Engineering',
|
|
'grade': 'Lead',
|
|
'position': 'Manager',
|
|
'jobTitle': 'Developer',
|
|
},
|
|
});
|
|
|
|
expect(response.status, 'ok');
|
|
expect(response.token, 'baron-sso-session-token');
|
|
expect(
|
|
response.expiresAt.toUtc().toIso8601String(),
|
|
'2026-07-02T12:00:00.000Z',
|
|
);
|
|
expect(response.user.tenantSlug, 'hanmac');
|
|
});
|
|
|
|
test('PhoneLoginLinkInitResponse parses pending auth response', () {
|
|
final response = PhoneLoginLinkInitResponse.fromJson({
|
|
'status': 'pending',
|
|
'pendingRef': 'pending-ref',
|
|
'expiresIn': 180,
|
|
'interval': 3,
|
|
'resendAfter': 30,
|
|
'provider': 'Ory (Kratos/Hydra)',
|
|
});
|
|
|
|
expect(response.pendingRef, 'pending-ref');
|
|
expect(response.interval, 3);
|
|
expect(response.provider, 'Ory (Kratos/Hydra)');
|
|
});
|
|
|
|
test('PhoneLoginLinkPollResponse parses completed session', () {
|
|
final response = PhoneLoginLinkPollResponse.fromJson({
|
|
'status': 'ok',
|
|
'session': {
|
|
'status': 'ok',
|
|
'token': 'baron-sso-session-token',
|
|
'expiresAt': '2026-07-02T12:00:00Z',
|
|
'user': {
|
|
'id': 'user-uuid',
|
|
'name': 'User One',
|
|
'phoneNumber': '+821012345678',
|
|
'tenantId': 'tenant-uuid',
|
|
'tenantName': 'Hanmac',
|
|
'tenantSlug': 'hanmac',
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(response.session?.token, 'baron-sso-session-token');
|
|
expect(response.isPending, isFalse);
|
|
});
|
|
|
|
test('PhoneLoginLinkPollResponse detects pending response', () {
|
|
final response = PhoneLoginLinkPollResponse.fromJson({
|
|
'status': 'pending',
|
|
'code': 'authorization_pending',
|
|
'interval': 5,
|
|
});
|
|
|
|
expect(response.isPending, isTrue);
|
|
expect(response.interval, 5);
|
|
});
|
|
|
|
test('CurrentUser parses permissions and can map to employee', () {
|
|
final user = CurrentUser.fromJson({
|
|
'id': 'user-uuid',
|
|
'name': 'User One',
|
|
'phoneNumber': '+821012345678',
|
|
'email': 'user@example.com',
|
|
'tenantId': 'tenant-uuid',
|
|
'tenantName': 'Hanmac',
|
|
'tenantSlug': 'hanmac',
|
|
'department': 'Engineering',
|
|
'permissions': {
|
|
'directory': true,
|
|
'organization': true,
|
|
'favoritesSync': false,
|
|
},
|
|
});
|
|
|
|
expect(user.permissions.directory, isTrue);
|
|
expect(user.permissions.favoritesSync, isFalse);
|
|
expect(user.toEmployee().department, 'Engineering');
|
|
});
|
|
}
|