Files
Client/test/api/marianumcloud/login_flow_api_test.dart
T

109 lines
3.0 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:marianum_mobile/api/marianumcloud/login_flow/login_flow_api.dart';
void main() {
group('LoginFlowInit.fromJson', () {
test('parses a complete init response', () {
final init = LoginFlowInit.fromJson({
'poll': {
'token': 'abc123',
'endpoint': 'https://cloud.example.org/login/v2/poll',
},
'login': 'https://cloud.example.org/login/v2/flow/xyz',
});
expect(init.loginUrl, 'https://cloud.example.org/login/v2/flow/xyz');
expect(init.pollToken, 'abc123');
expect(init.pollEndpoint, 'https://cloud.example.org/login/v2/poll');
});
test('throws on missing login url', () {
expect(
() => LoginFlowInit.fromJson({
'poll': {'token': 't', 'endpoint': 'e'},
}),
throwsFormatException,
);
});
test('throws on missing poll token or endpoint', () {
expect(
() => LoginFlowInit.fromJson({
'poll': {'endpoint': 'e'},
'login': 'l',
}),
throwsFormatException,
);
expect(
() => LoginFlowInit.fromJson({
'poll': {'token': 't'},
'login': 'l',
}),
throwsFormatException,
);
expect(
() => LoginFlowInit.fromJson({'login': 'l'}),
throwsFormatException,
);
});
});
group('LoginFlowCredentials.fromJson', () {
test('parses a complete poll response', () {
final credentials = LoginFlowCredentials.fromJson({
'server': 'https://cloud.example.org',
'loginName': 'jdoe',
'appPassword': 'secret-app-password',
});
expect(credentials.server, 'https://cloud.example.org');
expect(credentials.loginName, 'jdoe');
expect(credentials.appPassword, 'secret-app-password');
});
test('tolerates a missing server field', () {
final credentials = LoginFlowCredentials.fromJson({
'loginName': 'jdoe',
'appPassword': 'secret',
});
expect(credentials.server, '');
});
test('throws on missing loginName or appPassword', () {
expect(
() => LoginFlowCredentials.fromJson({'appPassword': 'secret'}),
throwsFormatException,
);
expect(
() => LoginFlowCredentials.fromJson({'loginName': 'jdoe'}),
throwsFormatException,
);
expect(
() => LoginFlowCredentials.fromJson({
'loginName': 'jdoe',
'appPassword': '',
}),
throwsFormatException,
);
});
});
group('LoginFlowApi.loginNameMatches', () {
test('matches case-insensitively and ignores surrounding whitespace', () {
expect(
LoginFlowApi.loginNameMatches(expected: 'jdoe', actual: 'JDoe'),
isTrue,
);
expect(
LoginFlowApi.loginNameMatches(expected: 'jdoe', actual: ' jdoe '),
isTrue,
);
});
test('rejects a different account', () {
expect(
LoginFlowApi.loginNameMatches(expected: 'jdoe', actual: 'other'),
isFalse,
);
});
});
}