feat: create project folders from desktop app
This commit is contained in:
@@ -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,
|
||||
);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user