66 lines
1.7 KiB
Dart
66 lines
1.7 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('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,
|
|
);
|
|
});
|
|
}
|