feat: create project folders from desktop app

This commit is contained in:
Hamza Ayed
2026-10-04 04:40:51 +03:00
parent ab34825faf
commit f6a2e8c3d3
7 changed files with 244 additions and 6 deletions
@@ -0,0 +1,65 @@
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,
);
});
}