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

140 lines
3.8 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:hepan_everyday/features/school/school_login_flow.dart';
void main() {
test(
'exam redirect compares selected xq rather than only the shared path',
() {
final flow = SchoolLoginFlow();
final target = Uri.parse(
'https://yjsjy.uestc.edu.cn/pyxx/pygl/kskcxx/index?xq=72',
);
flow.begin(target);
expect(
flow.onLoaded(
target.replace(query: 'xq=72&view=student'),
authenticated: true,
),
isNull,
);
expect(
flow.onLoaded(target.replace(query: 'xq=73'), authenticated: true),
target,
);
flow.begin(target);
expect(
flow.onLoaded(target.replace(query: ''), authenticated: true),
target,
);
},
);
test(
'repeated school login bounces have a bounded automatic redirect budget',
() {
final flow = SchoolLoginFlow();
final target = Uri.parse(
'https://yjsjy.uestc.edu.cn/pyxx/pygl/xskbcx/index/1',
);
final login = Uri.parse('https://idas.uestc.edu.cn/authserver/login');
final home = Uri.parse('https://yjsjy.uestc.edu.cn/pyxx/home/index');
flow.begin(target);
for (var i = 0; i < 2; i++) {
flow.onLoaded(login, authenticated: false);
expect(flow.onLoaded(home, authenticated: true), target);
}
flow.onLoaded(login, authenticated: false);
expect(flow.onLoaded(home, authenticated: true), isNull);
flow.begin(target);
expect(flow.onLoaded(home, authenticated: true), target);
},
);
test('wait for student authentication then request timetable once', () {
final flow = SchoolLoginFlow();
final target = Uri.parse(
'https://yjsjy.uestc.edu.cn/pyxx/pygl/xskbcx/index/1',
);
flow.begin(target);
expect(
flow.onLoaded(
Uri.parse(
'https://idas.uestc.edu.cn/authserver/login?service=graduate',
),
authenticated: false,
),
isNull,
);
expect(
flow.onLoaded(
Uri.parse('http://yjsjy.uestc.edu.cn/pyxx/jzsso/login?ticket=ST-test'),
authenticated: false,
),
isNull,
);
expect(
flow.onLoaded(
Uri.parse('http://yjsjy.uestc.edu.cn/pyxx/home/index'),
authenticated: true,
),
target,
);
expect(
flow.onLoaded(
Uri.parse('https://yjsjy.uestc.edu.cn/pyxx/home/index'),
authenticated: true,
),
isNull,
);
expect(flow.onLoaded(target, authenticated: true), isNull);
flow.reset();
expect(
flow.onLoaded(
Uri.parse('https://yjsjy.uestc.edu.cn/pyxx/home/index'),
authenticated: true,
),
isNull,
);
});
test(
'reauthentication and untrusted redirects cannot jump into timetable',
() {
final flow = SchoolLoginFlow();
final target = Uri.parse(
'https://yjsjy.uestc.edu.cn/pyxx/pygl/xskbcx/index/1',
);
flow.begin(target);
expect(
flow.onLoaded(
Uri.parse('https://evil.test/pyxx/home/index'),
authenticated: true,
),
isNull,
);
expect(
flow.onLoaded(
Uri.parse('https://yjsjy.uestc.edu.cn/pyxx/home/index'),
authenticated: false,
),
isNull,
);
expect(
flow.onLoaded(
Uri.parse('https://yjsjy.uestc.edu.cn/pyxx/home/index'),
authenticated: true,
),
target,
);
flow.onLoaded(
Uri.parse('https://idas.uestc.edu.cn/authserver/login'),
authenticated: false,
);
expect(
flow.onLoaded(
Uri.parse('https://yjsjy.uestc.edu.cn/pyxx/home/index'),
authenticated: true,
),
target,
);
},
);
}