Files

81 lines
2.2 KiB
Dart

import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_app/core/projects/project_folder_service.dart';
void main() {
test(
'explains that browser folder registration uses selected file uploads',
() {
expect(
workspaceFolderPickerUnavailableMessage(isWeb: true),
contains('أرفق ملفات محددة'),
);
expect(
workspaceFolderPickerUnavailableMessage(isWeb: true),
contains('تطبيق سطح المكتب'),
);
expect(workspaceFolderPickerUnavailableMessage(isWeb: false), isNull);
},
);
test('creates a new project folder under the chosen parent', () async {
final parent = await Directory.systemTemp.createTemp(
'mithqal-project-parent-',
);
addTearDown(() => parent.delete(recursive: true));
final createdPath = await createProjectFolder(parent.path, 'تجربة أولى');
expect(await Directory(createdPath).exists(), isTrue);
expect(
Directory(createdPath).parent.resolveSymbolicLinksSync(),
parent.path,
);
});
test('rejects unsafe, hidden, reserved, and empty project names', () async {
final parent = await Directory.systemTemp.createTemp(
'mithqal-project-invalid-',
);
addTearDown(() => parent.delete(recursive: true));
for (final name in [
'',
'.',
'..',
'.hidden',
r'a\b',
'CON',
'node_modules',
]) {
await expectLater(
createProjectFolder(parent.path, name),
throwsArgumentError,
);
}
expect(await parent.list().isEmpty, isTrue);
});
test('does not overwrite an existing file or directory', () async {
final parent = await Directory.systemTemp.createTemp(
'mithqal-project-collision-',
);
addTearDown(() => parent.delete(recursive: true));
await Directory(
'${parent.path}${Platform.pathSeparator}already-there',
).create();
await expectLater(
createProjectFolder(parent.path, 'already-there'),
throwsArgumentError,
);
expect(
await Directory(
'${parent.path}${Platform.pathSeparator}already-there',
).exists(),
isTrue,
);
});
}