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, ); }); }