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

71 lines
2.0 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'dart:async';
import 'package:hepan_everyday/features/school/school_page_adapter.dart';
void main() {
test(
'a rejected origin does not poison later legitimate page reading',
() async {
final reader = SchoolReader(SchoolPageAdapter());
await expectLater(
reader.read(
Uri.parse('https://idas.uestc.edu.cn/authserver/login'),
() async => 'x',
),
throwsA(isA<UnsupportedSchoolLayout>()),
);
var reads = 0;
await expectLater(
reader.read(
Uri.parse('https://yjsjy.uestc.edu.cn/pyxx/pygl/xskbcx/index/1'),
() async {
reads++;
return 'unknown';
},
),
throwsA(isA<UnsupportedSchoolLayout>()),
);
expect(reads, 1);
},
);
test('concurrent timetable reading obtains page content once', () async {
final reader = SchoolReader(SchoolPageAdapter());
final body = Completer<String>();
var reads = 0;
Future<String> getHtml() {
reads++;
return body.future;
}
final target = Uri.parse(
'https://yjsjy.uestc.edu.cn/pyxx/pygl/xskbcx/index/1',
);
final a = reader.read(target, getHtml), b = reader.read(target, getHtml);
final checks = Future.wait([
expectLater(a, throwsA(isA<UnsupportedSchoolLayout>())),
expectLater(b, throwsA(isA<UnsupportedSchoolLayout>())),
]);
body.complete('unknown');
await checks;
expect(reads, 1);
});
test('unknown school markup never becomes an empty successful import', () {
final adapter = SchoolPageAdapter();
final target = Uri.parse(
'https://yjsjy.uestc.edu.cn/pyxx/pygl/xskbcx/index/1',
);
for (final html in [
'',
'<html>验证码</html>',
'<table><tr><td>课程名称</td></tr></table>',
]) {
expect(
() => adapter.extract(html, target),
throwsA(isA<UnsupportedSchoolLayout>()),
);
}
});
}