Skip to content

Commit 3929875

Browse files
committed
tests: fix
1 parent 433d331 commit 3929875

File tree

19 files changed

+569
-451
lines changed

19 files changed

+569
-451
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,6 @@ frontend/windows/flutter/ephemeral/
8585
*.iml
8686

8787
# Embedded web build for desktop wrapper
88-
cmd/network-debugger-web/_web/
88+
cmd/network-debugger-web/_web/
89+
90+
/.dart_tool/*

dart_packages/web_socket_channel_debugger/.dart_tool/package_config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@
296296
"languageVersion": "3.0"
297297
}
298298
],
299-
"generated": "2025-10-29T09:48:49.933871Z",
299+
"generated": "2025-10-29T21:49:29.906986Z",
300300
"generator": "pub",
301301
"generatorVersion": "3.7.2",
302302
"flutterRoot": "file:///Users/belief/dev/flutter",
Binary file not shown.

dart_packages/web_socket_channel_debugger/lib/web_socket_channel_debugger.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ class WebSocketChannelDebugger {
112112
final uri = Uri.parse(proxyHttp);
113113
final wsScheme = uri.scheme == 'https' ? 'wss' : 'ws';
114114
// Собираем конечный URL подключения к прокси без мусорных символов в пути
115-
final effective = uri.replace(scheme: wsScheme, path: path, queryParameters: {});
115+
final effective =
116+
uri.replace(scheme: wsScheme, path: path, queryParameters: null);
116117
// ignore: avoid_print
117118
print('[WscDebugger] effective URL (should be proxy): $effective');
118119
// ignore: avoid_print
@@ -147,7 +148,8 @@ class WebSocketChannelDebugger {
147148
// Используем Uri конструктор напрямую
148149
uri = Uri(
149150
scheme: config.connectUrl.scheme,
150-
userInfo: config.connectUrl.hasAuthority ? config.connectUrl.userInfo : '',
151+
userInfo:
152+
config.connectUrl.hasAuthority ? config.connectUrl.userInfo : '',
151153
host: config.connectUrl.host,
152154
port: config.connectUrl.hasPort ? config.connectUrl.port : null,
153155
path: config.connectUrl.path,

dart_packages/web_socket_debugger/.dart_tool/package_config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@
296296
"languageVersion": "3.0"
297297
}
298298
],
299-
"generated": "2025-10-29T09:48:43.155790Z",
299+
"generated": "2025-10-29T21:49:20.740253Z",
300300
"generator": "pub",
301301
"generatorVersion": "3.7.2",
302302
"flutterRoot": "file:///Users/belief/dev/flutter",
Binary file not shown.

frontend/lib/features/landing/presentation/pages/integrations_page.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,24 @@ class _IntegrationsPageState extends State<IntegrationsPage> {
237237
),
238238
),
239239
actions: [
240+
TextButton(
241+
onPressed: () async {
242+
await Clipboard.setData(
243+
ClipboardData(text: txt),
244+
);
245+
if (!mounted) return;
246+
ScaffoldMessenger.of(
247+
context,
248+
).showSnackBar(
249+
const SnackBar(
250+
content: Text(
251+
'Diagnostics copied',
252+
),
253+
),
254+
);
255+
},
256+
child: const Text('Copy'),
257+
),
240258
TextButton(
241259
onPressed:
242260
() => Navigator.pop(context),

frontend/lib/features/landing/presentation/pages/integrations_platform_io.dart

Lines changed: 42 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -83,57 +83,50 @@ Future<void> autoIntegrateMacOS(String baseUrl) async {
8383
await f.writeAsString(pem);
8484
} catch (_) {}
8585

86-
// 3) Enable system proxy and trust CA via AppleScript (admin prompt)
87-
final port = _tryParsePort(baseUrl) ?? 9091;
88-
final dollar = String.fromCharCode(36);
89-
final shell =
90-
"security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain '" +
86+
// 3) Trust CA (admin prompt)
87+
final trustCmd =
88+
'security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "' +
9189
tmpPath +
92-
"'" +
93-
"; networksetup -listallnetworkservices | tail -n +2 | sed \"s/^\\* \\?//\" | while IFS= read -r svc; do " +
94-
"networksetup -setwebproxy \"" +
95-
dollar +
96-
"svc\" 127.0.0.1 " +
97-
port.toString() +
98-
"; " +
99-
"networksetup -setsecurewebproxy \"" +
100-
dollar +
101-
"svc\" 127.0.0.1 " +
102-
port.toString() +
103-
"; " +
104-
"networksetup -setwebproxystate \"" +
105-
dollar +
106-
"svc\" on; " +
107-
"networksetup -setsecurewebproxystate \"" +
108-
dollar +
109-
"svc\" on; " +
110-
"done";
111-
final script =
112-
'do shell script "' +
113-
shell.replaceAll('"', '\\"') +
114-
'" with administrator privileges';
115-
// The sed expression keeps service names as-is; we don't inject shell variables from Dart.
116-
final res = await Process.run('osascript', ['-e', script]);
117-
if (res.exitCode != 0) {
118-
final fbShell =
119-
"if networksetup -listallnetworkservices | grep -q \"Wi-Fi\"; then " +
120-
"networksetup -setwebproxy \"Wi-Fi\" 127.0.0.1 " +
121-
port.toString() +
122-
"; " +
123-
"networksetup -setsecurewebproxy \"Wi-Fi\" 127.0.0.1 " +
124-
port.toString() +
125-
"; " +
126-
"networksetup -setwebproxystate \"Wi-Fi\" on; " +
127-
"networksetup -setsecurewebproxystate \"Wi-Fi\" on; " +
128-
"fi; " +
129-
"security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain '" +
130-
tmpPath +
131-
"'";
132-
final fbScript =
90+
'"';
91+
await Process.run('osascript', [
92+
'-e',
93+
'do shell script "' +
94+
trustCmd.replaceAll('"', '\\"') +
95+
'" with administrator privileges',
96+
]);
97+
98+
// 4) Enable HTTP/HTTPS proxy for every service (call networksetup per service)
99+
final port = _tryParsePort(baseUrl) ?? 9091;
100+
final servicesRes = await Process.run('bash', [
101+
'-lc',
102+
'networksetup -listallnetworkservices | tail -n +2 | sed "s/^\\* \\?//"',
103+
]);
104+
final services =
105+
(servicesRes.stdout ?? '')
106+
.toString()
107+
.split('\n')
108+
.map((e) => e.trim())
109+
.where((e) => e.isNotEmpty)
110+
.toList();
111+
for (final svc in services) {
112+
final qSvc = svc.replaceAll('"', '\\"');
113+
final cmds = [
114+
'networksetup -setwebproxy "' + qSvc + '" 127.0.0.1 ' + port.toString(),
115+
'networksetup -setsecurewebproxy "' +
116+
qSvc +
117+
'" 127.0.0.1 ' +
118+
port.toString(),
119+
'networksetup -setwebproxystate "' + qSvc + '" on',
120+
'networksetup -setsecurewebproxystate "' + qSvc + '" on',
121+
];
122+
for (final c in cmds) {
123+
await Process.run('osascript', [
124+
'-e',
133125
'do shell script "' +
134-
fbShell.replaceAll('"', '\\"') +
135-
'" with administrator privileges';
136-
await Process.run('osascript', ['-e', fbScript]);
126+
c.replaceAll('"', '\\"') +
127+
'" with administrator privileges',
128+
]);
129+
}
137130
}
138131
}
139132

frontend/test/debouncer_test.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ void main() {
3535
// Assert — ещё рано
3636
expect(value, 0);
3737

38-
async.elapse(const Duration(milliseconds: 1));
38+
// Дождёмся полного интервала для второго вызова
39+
async.elapse(const Duration(milliseconds: 61));
3940
// Assert — сработал только второй вызов
4041
expect(value, 2);
4142
});

frontend/test/prefs_service_test.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:frontend/services/prefs.dart';
55
void main() {
66
setUp(() async {
77
// Чистим мок перед каждым тестом
8-
SharedPreferences.setMockInitialValues(<String, Object?>{});
8+
SharedPreferences.setMockInitialValues(<String, Object>{});
99
});
1010

1111
test('save/load сохраняет только переданные поля и подставляет дефолты', () async {
@@ -17,8 +17,6 @@ void main() {
1717
baseUrl: 'http://x',
1818
targetWs: 'ws://y',
1919
q: 'abc',
20-
httpMethod: 'GET',
21-
httpStatus: '2xx',
2220
httpMinDurationMs: 250,
2321
groupBy: 'domain',
2422
respDelayEnabled: true,

0 commit comments

Comments
 (0)