Add API contract Dart models

This commit is contained in:
Codex
2026-07-02 13:00:17 +09:00
parent d890893966
commit 6d05f36dcc
10 changed files with 864 additions and 6 deletions
+74
View File
@@ -0,0 +1,74 @@
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('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');
});
}