diff --git a/Apps/Locations/Libraries/Tests/DependencyTests/Helpers/TestServices.swift b/Apps/Locations/Libraries/Tests/DependencyTests/Helpers/TestServices.swift new file mode 100644 index 0000000..2f19465 --- /dev/null +++ b/Apps/Locations/Libraries/Tests/DependencyTests/Helpers/TestServices.swift @@ -0,0 +1,34 @@ +// +// TestServices.swift +// DependencyTests +// +// Created by Javier Cicchelli on 11/04/2023. +// Copyright © 2023 Röck+Cöde. All rights reserved. +// + +import Dependency + +// MARK: - Protocols + +protocol TestService {} + +// MARK: - Services + +struct SomeService: TestService, Equatable {} +struct SomeOtherService: TestService, Equatable {} + +// MARK: - DependencyKey + +struct TestServiceKey: DependencyKey { + static var currentValue: TestService = SomeService() +} + +// MARK: - DependencyService+Keys + +extension DependencyService { + var testService: TestService { + get { Self[TestServiceKey.self] } + set { Self[TestServiceKey.self] = newValue } + } +} + diff --git a/Apps/Locations/Libraries/Tests/DependencyTests/Property Wrappers/DependencyTests.swift b/Apps/Locations/Libraries/Tests/DependencyTests/Property Wrappers/DependencyTests.swift new file mode 100644 index 0000000..7daf5ab --- /dev/null +++ b/Apps/Locations/Libraries/Tests/DependencyTests/Property Wrappers/DependencyTests.swift @@ -0,0 +1,74 @@ +// +// DependencyTests.swift +// DependencyTests +// +// Created by Javier Cicchelli on 11/04/2023. +// Copyright © 2023 Röck+Cöde. All rights reserved. +// + +import XCTest + +@testable import Dependency + +final class DependencyTests: XCTestCase { + + // MARK: Properties + + private var subject: TestSubject! + + // MARK: Setup + + override func setUp() { + DependencyService[\.testService] = SomeService() + } + + // MARK: Tests + + func test_readTestService() { + // GIVEN + subject = .init() + + // WHEN + let service = subject.testService + + // THEN + XCTAssertNotNil(service) + XCTAssert(service is SomeService) + } + + func test_writeDependencyKey() async throws { + // GIVEN + subject = .init() + + subject.testService = SomeOtherService() + + // WHEN + let service = DependencyService[\.testService] + + // THEN + XCTAssertNotNil(service) + XCTAssert(service is SomeOtherService) + } + + func test_writeDependencyKeyTwice() async throws { + // GIVEN + subject = .init() + + subject.testService = SomeOtherService() + subject.testService = SomeService() + + // WHEN + let service = DependencyService[\.testService] + + // THEN + XCTAssertNotNil(service) + XCTAssert(service is SomeService) + } + +} + +// MARK: - TestSubject + +private struct TestSubject { + @Dependency(\.testService) var testService +} diff --git a/Apps/Locations/Libraries/Tests/DependencyTests/Services/DependencyServiceTests.swift b/Apps/Locations/Libraries/Tests/DependencyTests/Services/DependencyServiceTests.swift new file mode 100644 index 0000000..186931a --- /dev/null +++ b/Apps/Locations/Libraries/Tests/DependencyTests/Services/DependencyServiceTests.swift @@ -0,0 +1,58 @@ +// +// DependencyServiceTests.swift +// DependencyTests +// +// Created by Javier Cicchelli on 11/04/2023. +// Copyright © 2023 Röck+Cöde. All rights reserved. +// + +import XCTest + +@testable import Dependency + +final class DependencyServiceTests: XCTestCase { + + // MARK: Setup + + override func setUp() { + DependencyService[\.testService] = SomeService() + } + + // MARK: Tests + + func test_readDependencyKey() async throws { + // GIVEN + // WHEN + let service = DependencyService[\.testService] + + // THEN + XCTAssertNotNil(service) + XCTAssert(service is SomeService) + } + + func test_writeDependencyKey() async throws { + // GIVEN + DependencyService[\.testService] = SomeOtherService() + + // WHEN + let service = DependencyService[\.testService] + + // THEN + XCTAssertNotNil(service) + XCTAssert(service is SomeOtherService) + } + + func test_writeDependencyKeyTwice() async throws { + // GIVEN + DependencyService[\.testService] = SomeOtherService() + DependencyService[\.testService] = SomeService() + + // WHEN + let service = DependencyService[\.testService] + + // THEN + XCTAssertNotNil(service) + XCTAssert(service is SomeService) + } + +}