diff --git a/Sources/Library/Tasks/CreateRootFolderTask.swift b/Sources/Library/Tasks/CreateRootFolderTask.swift index 805b7c2..fdee7e0 100644 --- a/Sources/Library/Tasks/CreateRootFolderTask.swift +++ b/Sources/Library/Tasks/CreateRootFolderTask.swift @@ -18,6 +18,10 @@ public struct CreateRootFolderTask { name: String, at location: URL? = nil ) async throws -> URL { + guard !name.isEmpty else { + throw CreateRootFolderError.nameIsEmpty + } + let rootFolder = if let location { location } else { @@ -36,3 +40,9 @@ public struct CreateRootFolderTask { } } + +// MARK: - Errors + +public enum CreateRootFolderError: Error { + case nameIsEmpty +} diff --git a/Tests/Library/Cases/Tasks/CreateRootFolderTaskTests.swift b/Tests/Library/Cases/Tasks/CreateRootFolderTaskTests.swift index 72ce72e..a3f6795 100644 --- a/Tests/Library/Cases/Tasks/CreateRootFolderTaskTests.swift +++ b/Tests/Library/Cases/Tasks/CreateRootFolderTaskTests.swift @@ -6,12 +6,19 @@ struct CreateRootFolderTaskTests { // MARK: Functions tests - @Test(arguments: [String.someProjectName], [URL.someCurrentProjectFolder, .someNewProjectFolder]) + @Test(arguments: [String.someProjectName], [URL.someCurrentProjectFolder, .someNewProjectFolder, .someDotProjectFolder, .someTildeProjectFolder]) func task( name: String, expects folder: URL ) async throws { // GIVEN + let location: URL? = switch folder { + case .someNewProjectFolder: .someNewFolder + case .someDotProjectFolder: .someDotFolder + case .someTildeProjectFolder: .someTildeFolder + default: nil + } + let fileService = FileServiceMock( currentFolder: .someCurrentFolder, action: .createFolder(folder) @@ -21,7 +28,7 @@ struct CreateRootFolderTaskTests { // WHEN let result = try await task(name: name, - at: folder == .someNewProjectFolder ? .someNewFolder : nil) + at: location) // THEN #expect(result == folder) @@ -47,12 +54,30 @@ struct CreateRootFolderTaskTests { try await task(name: name) } } + + @Test(arguments: [String.someEmptyName], [CreateRootFolderError.nameIsEmpty]) + func task( + name: String, + throws error: CreateRootFolderError + ) async throws { + // GIVEN + let fileService = FileServiceMock(currentFolder: .someCurrentFolder) + + let task = CreateRootFolderTask(fileService: fileService) + + // WHEN + // THEN + await #expect(throws: error) { + try await task(name: name) + } + } } // MARK: - String+Constants private extension String { + static let someEmptyName = "" static let someProjectName = "SomeProjectName" } @@ -60,5 +85,7 @@ private extension String { private extension URL { static let someCurrentProjectFolder = URL.someCurrentFolder.appending(component: String.someProjectName) + static let someDotProjectFolder = URL.someDotFolder.appending(component: String.someProjectName) static let someNewProjectFolder = URL.someNewFolder.appending(component: String.someProjectName) + static let someTildeProjectFolder = URL.someTildeFolder.appending(component: String.someProjectName) } diff --git a/Tests/Library/Helpers/Extensions/URL+Samples.swift b/Tests/Library/Helpers/Extensions/URL+Samples.swift index 83c9f6a..5869bb5 100644 --- a/Tests/Library/Helpers/Extensions/URL+Samples.swift +++ b/Tests/Library/Helpers/Extensions/URL+Samples.swift @@ -7,10 +7,12 @@ extension URL { // MARK: Constants static let someCurrentFolder = URL(at: "/some/current/folder") + static let someDotFolder = URL(at: ".") static let someExistingFolder = URL(at: "/some/existing/folder") static let someExistingFile = URL(at: "/some/existing/file") static let someNewFolder = URL(at: "/some/new/folder") static let someNewFile = URL(at: "/some/new/file") static let someRandomURL = URL(string: "http://some.random.url")! + static let someTildeFolder = URL(at: "~") }