From 6938b358e100d7cd9da162827aa5105d686b8998 Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Sat, 11 Jan 2025 01:26:26 +0100 Subject: [PATCH] Implemented the "currentFolder" property for the FileService service in the Library target. --- Sources/Library/Protocols/FileServicing.swift | 9 +++++++ Sources/Library/Services/FileService.swift | 27 +++++++++++++++++++ Tests/Library/Services/FileServiceTests.swift | 22 +++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 Sources/Library/Protocols/FileServicing.swift create mode 100644 Sources/Library/Services/FileService.swift create mode 100644 Tests/Library/Services/FileServiceTests.swift diff --git a/Sources/Library/Protocols/FileServicing.swift b/Sources/Library/Protocols/FileServicing.swift new file mode 100644 index 0000000..55dc203 --- /dev/null +++ b/Sources/Library/Protocols/FileServicing.swift @@ -0,0 +1,9 @@ +import Foundation + +protocol FileServicing { + + // MARK: Properties + + var currentFolder: URL { get async } + +} diff --git a/Sources/Library/Services/FileService.swift b/Sources/Library/Services/FileService.swift new file mode 100644 index 0000000..a81b2ce --- /dev/null +++ b/Sources/Library/Services/FileService.swift @@ -0,0 +1,27 @@ +import Foundation + +struct FileService: FileServicing { + + // MARK: Properties + + private let fileManager: FileManager + + // MARK: Initialisers + + init(fileManager: FileManager = .default) { + self.fileManager = fileManager + } + + // MARK: Computed + + var currentFolder: URL { + get async { + if #available(macOS 13.0, *) { + .init(filePath: fileManager.currentDirectoryPath) + } else { + .init(fileURLWithPath: fileManager.currentDirectoryPath) + } + } + } + +} diff --git a/Tests/Library/Services/FileServiceTests.swift b/Tests/Library/Services/FileServiceTests.swift new file mode 100644 index 0000000..01878a2 --- /dev/null +++ b/Tests/Library/Services/FileServiceTests.swift @@ -0,0 +1,22 @@ +import Testing + +@testable import ColibriLibrary + +struct FileServiceTests { + + // MARK: Properties tests + + @Test("Test the file service provides a current folder URL") + func currentFolder() async { + // GIVEN + let service = FileService() + + // WHEN + let url = await service.currentFolder + + // THEN + #expect(url.path() == "/private/tmp") + #expect(url.isFileURL == true) + } + +}