fix: import unpublished exam rooms and add opt-in school HTML feedback
This commit is contained in:
@@ -33,6 +33,31 @@ class FakeFeedbackHttpTransport implements FeedbackHttpTransport {
|
||||
}
|
||||
|
||||
void main() {
|
||||
test('HTML diagnostics use independent attachment field with an immutable payload', () async {
|
||||
final transport = FakeFeedbackHttpTransport();
|
||||
final html = Uint8List.fromList(
|
||||
utf8.encode('<!doctype html><!-- TPSchedule school diagnostic -->'),
|
||||
);
|
||||
final submission = FeedbackSubmission.problem(
|
||||
id: 'same-id',
|
||||
message: '无法导入',
|
||||
diagnosticHtml: html,
|
||||
);
|
||||
html.fillRange(0, html.length, 0);
|
||||
await HttpFeedbackSender(
|
||||
endpoint: 'https://example.com/v1/feedback',
|
||||
transport: transport,
|
||||
).send(submission);
|
||||
final body = utf8.decode(transport.body!);
|
||||
expect(
|
||||
body,
|
||||
contains(
|
||||
'name="diagnostic_html"; filename="TPSchedule-school-page.html"',
|
||||
),
|
||||
);
|
||||
expect(body, contains('TPSchedule school diagnostic'));
|
||||
expect(submission.attachments, isEmpty);
|
||||
});
|
||||
test(
|
||||
'old feedback service gets a specific diagnostic-upgrade hint',
|
||||
() async {
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:hepan_everyday/features/feedback/feedback_page.dart';
|
||||
import 'package:hepan_everyday/features/feedback/feedback_submission.dart';
|
||||
import 'package:hepan_everyday/services/school_page_diagnostic.dart';
|
||||
|
||||
class RecordingSender implements FeedbackSender {
|
||||
final submissions = <FeedbackSubmission>[];
|
||||
@@ -35,6 +37,47 @@ Future<void> reveal(
|
||||
}
|
||||
|
||||
void main() {
|
||||
testWidgets('HTML is opt in, confirmed, and stays identical on retry', (
|
||||
tester,
|
||||
) async {
|
||||
final store = SchoolPageDiagnostic.instance;
|
||||
addTearDown(store.clear);
|
||||
store.remember(
|
||||
'<input name="semester.id" value="523"><table id="manualArrangeCourseTable"><tr><td>课程内容</td></tr></table>',
|
||||
Uri.parse('https://eams.uestc.edu.cn/eams/courseTableForStd.action'),
|
||||
);
|
||||
final sender = RecordingSender()..fail = true;
|
||||
await tester.pumpWidget(MaterialApp(home: FeedbackPage(sender: sender)));
|
||||
await tester.enterText(find.byKey(const Key('feedback-message')), '不能导入');
|
||||
await reveal(tester, find.byKey(const Key('feedback-html')));
|
||||
expect(
|
||||
tester
|
||||
.widget<CheckboxListTile>(find.byKey(const Key('feedback-html')))
|
||||
.value,
|
||||
isFalse,
|
||||
);
|
||||
await tester.tap(find.byKey(const Key('feedback-logs')));
|
||||
await tester.pump();
|
||||
await tester.tap(find.byKey(const Key('feedback-html')));
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.text('附带网页排查资料?'), findsOneWidget);
|
||||
await tester.tap(find.text('同意附带'));
|
||||
await tester.pumpAndSettle();
|
||||
await reveal(tester, find.byKey(const Key('feedback-submit')));
|
||||
await tester.tap(find.byKey(const Key('feedback-submit')));
|
||||
await tester.pumpAndSettle();
|
||||
expect(
|
||||
utf8.decode(sender.submissions.single.diagnosticHtml!),
|
||||
contains('课程内容'),
|
||||
);
|
||||
store.clear();
|
||||
await tester.tap(find.byKey(const Key('feedback-submit')));
|
||||
await tester.pumpAndSettle();
|
||||
expect(
|
||||
identical(sender.submissions.first, sender.submissions.last),
|
||||
isTrue,
|
||||
);
|
||||
});
|
||||
testWidgets('logs are opt in and included only when checked', (tester) async {
|
||||
final sender = RecordingSender();
|
||||
await tester.pumpWidget(MaterialApp(home: FeedbackPage(sender: sender)));
|
||||
@@ -52,6 +95,7 @@ void main() {
|
||||
await tester.tap(find.byKey(const Key('feedback-submit')));
|
||||
await tester.pumpAndSettle();
|
||||
expect(sender.submissions.single.diagnosticLog, isNotNull);
|
||||
expect(sender.submissions.single.diagnosticHtml, isNull);
|
||||
expect(sender.submissions.single.attachments, isEmpty);
|
||||
});
|
||||
testWidgets('uncertain delivery retains original payload for status check', (
|
||||
@@ -186,6 +230,8 @@ void main() {
|
||||
backwards: true,
|
||||
);
|
||||
await tester.enterText(find.byKey(const Key('feedback-message')), ' 建议内容 ');
|
||||
// Validation removes the error label after the tap, changing list height.
|
||||
await tester.pumpAndSettle();
|
||||
await reveal(tester, find.byKey(const Key('feedback-submit')));
|
||||
await tester.tap(find.byKey(const Key('feedback-submit')));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
Reference in New Issue
Block a user