Files
TPSchedule/mobile/test/school/undergraduate_page_probe_test.dart
T

97 lines
2.8 KiB
Dart

import 'dart:convert';
import 'package:flutter_test/flutter_test.dart';
import 'package:hepan_everyday/features/school/undergraduate/navigation_policy.dart';
import 'package:hepan_everyday/features/school/undergraduate/page_probe.dart';
void main() {
final uri = Uri.parse('https://eams.uestc.edu.cn/eams/');
test(
'navigation and capture distinguish official data from authentication',
() {
for (final host in [
'eams.uestc.edu.cn',
'idas.uestc.edu.cn',
'eportal.uestc.edu.cn',
]) {
expect(
UndergraduateNavigationPolicy.canNavigate(
Uri.https(host, '/'),
isMainFrame: true,
),
isTrue,
);
}
for (final value in [
'https://eams.uestc.edu.cn.attacker.test/eams/',
'https://eams.uestc.edu.cn:444/eams/',
'https://user@eams.uestc.edu.cn/eams/',
'http://eams.uestc.edu.cn/eams/',
]) {
expect(
UndergraduateNavigationPolicy.canNavigate(
Uri.parse(value),
isMainFrame: true,
),
isFalse,
);
}
expect(UndergraduateNavigationPolicy.isDataPage(uri), isTrue);
expect(
UndergraduateNavigationPolicy.isDataPage(
Uri.parse('https://idas.uestc.edu.cn/authserver/login'),
),
isFalse,
);
expect(
UndergraduateNavigationPolicy.secureIdentityRedirect(
Uri.parse('http://idas.uestc.edu.cn/authserver/login?service=abc'),
).toString(),
'https://idas.uestc.edu.cn/authserver/login?service=abc',
);
},
);
test(
'page evidence rejects changed URLs cross origins and aggregate oversize',
() {
Map<String, dynamic> value() => {
'topUrl': uri.toString(),
'authenticated': true,
'pages': [
{'kind': 'timetable', 'url': uri.toString(), 'html': 'table'},
],
};
expect(
UndergraduatePageEvidence.decode(jsonEncode(value()), uri).pages,
hasLength(1),
);
expect(
() => UndergraduatePageEvidence.decode({
...value(),
'topUrl': 'https://other.test',
}, uri),
throwsFormatException,
);
final cross = value();
(cross['pages'] as List).single['url'] = 'https://idas.uestc.edu.cn/';
expect(
() => UndergraduatePageEvidence.decode(cross, uri),
throwsFormatException,
);
final large = value();
(large['pages'] as List).single['html'] = '汉' * 800000;
expect(
() => UndergraduatePageEvidence.decode(large, uri),
throwsFormatException,
);
expect(
() => UndergraduatePageEvidence.decode({
...value(),
'error': 'capture_limit',
}, uri),
throwsFormatException,
);
},
);
}