109 lines
3.0 KiB
Dart
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,
|
|
);
|
|
});
|
|
});
|
|
}
|