From b5c4da825c19ae8db600961c8937feafcd99f8cd Mon Sep 17 00:00:00 2001 From: hogumachu Date: Fri, 19 Jan 2024 20:44:22 +0900 Subject: [PATCH 1/6] =?UTF-8?q?chore:=20Repository=20Mock=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InMyMemory/Domain/Package.swift | 14 +++ .../Repositories/EmotionRepositoryMock.swift | 79 +++++++++++++++++ .../Repositories/MemoryRepositoryMock.swift | 87 +++++++++++++++++++ .../Repositories/TodoRepositoryMock.swift | 79 +++++++++++++++++ 4 files changed, 259 insertions(+) create mode 100644 InMyMemory/Domain/Tests/UseCaseTests/Repositories/EmotionRepositoryMock.swift create mode 100644 InMyMemory/Domain/Tests/UseCaseTests/Repositories/MemoryRepositoryMock.swift create mode 100644 InMyMemory/Domain/Tests/UseCaseTests/Repositories/TodoRepositoryMock.swift diff --git a/InMyMemory/Domain/Package.swift b/InMyMemory/Domain/Package.swift index 8f8b924..73ff2b2 100644 --- a/InMyMemory/Domain/Package.swift +++ b/InMyMemory/Domain/Package.swift @@ -24,6 +24,8 @@ let package = Package( .package(path: "../Shared"), .package(url: "https://github.com/ReactiveX/RxSwift.git", .upToNextMajor(from: "6.6.0")), .package(url: "https://github.com/Swinject/Swinject.git", .upToNextMajor(from: "2.8.4")), + .package(url: "https://github.com/Quick/Quick.git", from: "7.3.0"), + .package(url: "https://github.com/Quick/Nimble.git", from: "13.1.2"), ], targets: [ .target( @@ -47,5 +49,17 @@ let package = Package( .product(name: "CoreKit", package: "Shared"), ] ), + .testTarget( + name: "UseCaseTests", + dependencies: [ + "UseCases", + "Entities", + "Interfaces", + "RxSwift", + .product(name: "CoreKit", package: "Shared"), + "Quick", + "Nimble" + ] + ), ] ) diff --git a/InMyMemory/Domain/Tests/UseCaseTests/Repositories/EmotionRepositoryMock.swift b/InMyMemory/Domain/Tests/UseCaseTests/Repositories/EmotionRepositoryMock.swift new file mode 100644 index 0000000..5689cef --- /dev/null +++ b/InMyMemory/Domain/Tests/UseCaseTests/Repositories/EmotionRepositoryMock.swift @@ -0,0 +1,79 @@ +// +// EmotionRepositoryMock.swift +// +// +// Created by 홍성준 on 1/19/24. +// + +import Foundation +import Interfaces +import Entities +import RxSwift + +final class EmotionRepositoryMock: EmotionRepositoryInterface { + + init() {} + + var createEmotionCallCount = 0 + var createEmotionEmotion: Emotion? + func create(emotion: Emotion) -> Single { + createEmotionCallCount += 1 + createEmotionEmotion = emotion + return .just(()) + } + + var readEmotionIDCallCount = 0 + var readEmotionIDEmotionID: UUID? + var readEmotionIDEmotion: Emotion? + func read(emotionID: UUID) -> Single { + readEmotionIDCallCount += 1 + readEmotionIDEmotionID = emotionID + return .just(readEmotionIDEmotion) + } + + var readGreaterThanCallCount = 0 + var readGreaterThanDate: Date? + var readGreaterThanEmotions: [Emotion] = [] + func read(greaterThan date: Date) -> Single<[Emotion]> { + readGreaterThanCallCount += 1 + readGreaterThanDate = date + return .just(readGreaterThanEmotions) + } + + var readGreaterOrEqualThanLessThanCallCount = 0 + var readGreaterOrEqualThanLessThanGreaterOrEqualDate: Date? + var readGreaterOrEqualThanLessThanLessDate: Date? + var readGreaterOrEqualThanLessThanEmotions: [Emotion] = [] + func read(greaterOrEqualThan greaterOrEqualDate: Date, lessThan lessDate: Date) -> Single<[Emotion]> { + readGreaterOrEqualThanLessThanCallCount += 1 + readGreaterOrEqualThanLessThanGreaterOrEqualDate = greaterOrEqualDate + readGreaterOrEqualThanLessThanLessDate = lessDate + return .just(readGreaterOrEqualThanLessThanEmotions) + } + + var readKeywordCallCount = 0 + var readKeywordKeyword: String? + var readKeywordEmotions: [Emotion] = [] + func read(keyword: String) -> Single<[Emotion]> { + readKeywordCallCount += 1 + readKeywordKeyword = keyword + return .just(readKeywordEmotions) + } + + var updateEmotionCallCount = 0 + var updateEmotionEmotion: Emotion? + func update(emotion: Emotion) -> Single { + updateEmotionCallCount += 1 + updateEmotionEmotion = emotion + return .just(()) + } + + var deleteEmotionCallCount = 0 + var deleteEmotionEmotion: Emotion? + func delete(emotion: Emotion) -> Single { + deleteEmotionCallCount += 1 + deleteEmotionEmotion = emotion + return .just(()) + } + +} diff --git a/InMyMemory/Domain/Tests/UseCaseTests/Repositories/MemoryRepositoryMock.swift b/InMyMemory/Domain/Tests/UseCaseTests/Repositories/MemoryRepositoryMock.swift new file mode 100644 index 0000000..f509ab6 --- /dev/null +++ b/InMyMemory/Domain/Tests/UseCaseTests/Repositories/MemoryRepositoryMock.swift @@ -0,0 +1,87 @@ +// +// MemoryRepositoryMock.swift +// +// +// Created by 홍성준 on 1/19/24. +// + +import Foundation +import Interfaces +import Entities +import RxSwift + +final class MemoryRepositoryMock: MemoryRepositoryInterface { + + init() {} + + var createMemoryCallCount = 0 + var createMemoryMemory: Memory? + func create(memory: Memory) -> Single { + createMemoryCallCount += 1 + createMemoryMemory = memory + return .just(()) + } + + var readMemoryIDCallCount = 0 + var readMemoryIDMemoryID: UUID? + var readMemoryIDMemory: Memory? + func read(memoryID: UUID) -> Single{ + readMemoryIDCallCount += 1 + readMemoryIDMemoryID = memoryID + return .just(readMemoryIDMemory) + } + + var readGreaterThanCallCount = 0 + var readGreaterThanDate: Date? + var readGreaterThanMemories: [Memory] = [] + func read(greaterThan date: Date) -> Single<[Memory]> { + readGreaterThanCallCount += 1 + readGreaterThanDate = date + return .just(readGreaterThanMemories) + } + + var readGreaterOrEqualThanLessThanCallCount = 0 + var readGreaterOrEqualThanLessThanGreaterOrEqualDate: Date? + var readGreaterOrEqualThanLessThanLessDate: Date? + var readGreaterOrEqualThanLessThanMemories: [Memory] = [] + func read(greaterOrEqualThan greaterOrEqualDate: Date, lessThan lessDate: Date) -> Single<[Memory]> { + readGreaterOrEqualThanLessThanCallCount += 1 + readGreaterOrEqualThanLessThanGreaterOrEqualDate = greaterOrEqualDate + readGreaterOrEqualThanLessThanLessDate = lessDate + return .just(readGreaterOrEqualThanLessThanMemories) + } + + var readKeywordCallCount = 0 + var readKeywordKeyword: String? + var readKeywordMemories: [Memory] = [] + func read(keyword: String) -> Single<[Memory]> { + readKeywordCallCount += 1 + readKeywordKeyword = keyword + return .just(readKeywordMemories) + } + + var updateMemoryCallCount = 0 + var updateMemoryMemory: Memory? + func update(memory: Memory) -> Single { + updateMemoryCallCount += 1 + updateMemoryMemory = memory + return .just(()) + } + + var deleteMemoryCallCount = 0 + var deleteMemoryMemory: Memory? + func delete(memory: Memory) -> Single { + deleteMemoryCallCount += 1 + deleteMemoryMemory = memory + return .just(()) + } + + var deleteMemoryIDCallCount = 0 + var deleteMemoryIDMemoryID: UUID? + func delete(memoryID: UUID) -> Single { + deleteMemoryIDCallCount += 1 + deleteMemoryIDMemoryID = memoryID + return .just(()) + } + +} diff --git a/InMyMemory/Domain/Tests/UseCaseTests/Repositories/TodoRepositoryMock.swift b/InMyMemory/Domain/Tests/UseCaseTests/Repositories/TodoRepositoryMock.swift new file mode 100644 index 0000000..37b93bc --- /dev/null +++ b/InMyMemory/Domain/Tests/UseCaseTests/Repositories/TodoRepositoryMock.swift @@ -0,0 +1,79 @@ +// +// TodoRepositoryMock.swift +// +// +// Created by 홍성준 on 1/19/24. +// + +import Foundation +import Interfaces +import Entities +import RxSwift + +final class TodoRepositoryMock: TodoRepositoryInterface { + + init() {} + + var createTodoCallCount = 0 + var createTodoTodo: Todo? + func create(todo: Todo) -> Single { + createTodoCallCount += 1 + createTodoTodo = todo + return .just(()) + } + + var readTodoIDCallCount = 0 + var readTodoIDTodoID: UUID? + var readTodoIDTodo: Todo? + func read(todoID: UUID) -> Single { + readTodoIDCallCount += 1 + readTodoIDTodoID = todoID + return .just(readTodoIDTodo) + } + + var readGreaterThanCallCount = 0 + var readGreaterThanDate: Date? + var readGreaterThanTodo: [Todo] = [] + func read(greaterThan date: Date) -> Single<[Todo]> { + readGreaterThanCallCount += 1 + readGreaterThanDate = date + return .just(readGreaterThanTodo) + } + + var readGreaterOrEqualThanLessThanCallCount = 0 + var readGreaterOrEqualThanLessThanGreaterOrEqualDate: Date? + var readGreaterOrEqualThanLessThanLessDate: Date? + var readGreaterOrEqualThanLessThanTodos: [Todo] = [] + func read(greaterOrEqualThan greaterOrEqualDate: Date, lessThan lessDate: Date) -> Single<[Todo]> { + readGreaterOrEqualThanLessThanCallCount += 1 + readGreaterOrEqualThanLessThanGreaterOrEqualDate = greaterOrEqualDate + readGreaterOrEqualThanLessThanLessDate = lessDate + return .just(readGreaterOrEqualThanLessThanTodos) + } + + var readKeywordCallCount = 0 + var readKeywordKeyword: String? + var readKeywordTodos: [Todo] = [] + func read(keyword: String) -> Single<[Todo]> { + readKeywordCallCount += 1 + readKeywordKeyword = keyword + return .just(readKeywordTodos) + } + + var updateTodoCallCount = 0 + var updateTodoTodo: Todo? + func update(todo: Todo) -> Single { + updateTodoCallCount += 1 + updateTodoTodo = todo + return .just(()) + } + + var deleteTodoCallCount = 0 + var deleteTodoTodo: Todo? + func delete(todo: Todo) -> Single { + deleteTodoCallCount += 1 + deleteTodoTodo = todo + return .just(()) + } + +} From f882f7cf5b22ecfc6843d20efac8e928ebdd6530 Mon Sep 17 00:00:00 2001 From: hogumachu Date: Fri, 19 Jan 2024 21:00:52 +0900 Subject: [PATCH 2/6] =?UTF-8?q?test:=20HomeUseCase=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcschemes/InMyMemory.xcscheme | 2 +- InMyMemory.xctestplan | 7 ++ .../UseCases/HomeUseCaseTests.swift | 97 +++++++++++++++++++ 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 InMyMemory/Domain/Tests/UseCaseTests/UseCases/HomeUseCaseTests.swift diff --git a/InMyMemory.xcodeproj/xcshareddata/xcschemes/InMyMemory.xcscheme b/InMyMemory.xcodeproj/xcshareddata/xcschemes/InMyMemory.xcscheme index 5cc347d..a0e41db 100644 --- a/InMyMemory.xcodeproj/xcshareddata/xcschemes/InMyMemory.xcscheme +++ b/InMyMemory.xcodeproj/xcshareddata/xcschemes/InMyMemory.xcscheme @@ -1,7 +1,7 @@ + version = "2.1"> diff --git a/InMyMemory.xctestplan b/InMyMemory.xctestplan index a2c759f..f74ee59 100644 --- a/InMyMemory.xctestplan +++ b/InMyMemory.xctestplan @@ -50,6 +50,13 @@ "identifier" : "HomePresentationTests", "name" : "HomePresentationTests" } + }, + { + "target" : { + "containerPath" : "container:InMyMemory\/Domain", + "identifier" : "UseCaseTests", + "name" : "UseCaseTests" + } } ], "version" : 1 diff --git a/InMyMemory/Domain/Tests/UseCaseTests/UseCases/HomeUseCaseTests.swift b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/HomeUseCaseTests.swift new file mode 100644 index 0000000..1716d12 --- /dev/null +++ b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/HomeUseCaseTests.swift @@ -0,0 +1,97 @@ +// +// HomeUseCaseTests.swift +// +// +// Created by 홍성준 on 1/19/24. +// + +@testable import UseCases +import Entities +import XCTest +import Quick +import Nimble + +final class HomeUseCaseTests: QuickSpec { + + override class func spec() { + var sut: HomeUseCase! + var emotionRepository: EmotionRepositoryMock! + var memoryRepository: MemoryRepositoryMock! + var todoRepository: TodoRepositoryMock! + + describe("HomeUseCase 테스트") { + beforeEach { + emotionRepository = .init() + memoryRepository = .init() + todoRepository = .init() + sut = .init( + emotionRepository: emotionRepository, + memoryRepository: memoryRepository, + todoRepository: todoRepository + ) + } + + context("fetchLastSevenDaysMemories를 호출하면") { + beforeEach { + _ = sut.fetchLastSevenDaysMemories() + } + + it("7일 이전의 데이터를 불러온다") { + let date = try unwrap(memoryRepository.readGreaterThanDate) + let sevenDaysAgo = Date().daysAgo(value: 7) + expect(date.year) == sevenDaysAgo.year + expect(date.month) == sevenDaysAgo.month + expect(date.day) == sevenDaysAgo.day + } + } + + context("fetchCurrentWeekTodos를 호출하면") { + beforeEach { + _ = sut.fetchCurrentWeekTodos() + } + + it("7일 이전 그리고 7일 이후 사이의 데이터를 불러온다") { + let greaterOrEqaulData = try unwrap(todoRepository.readGreaterOrEqualThanLessThanGreaterOrEqualDate) + let lessDate = try unwrap(todoRepository.readGreaterOrEqualThanLessThanLessDate) + let sevenDaysAgo = Date().daysAgo(value: 7) + let sevenDaysAfter = Date().daysAgo(value: -7) + expect(greaterOrEqaulData.year) == sevenDaysAgo.year + expect(greaterOrEqaulData.month) == sevenDaysAgo.month + expect(greaterOrEqaulData.day) == sevenDaysAgo.day + + expect(lessDate.year) == sevenDaysAfter.year + expect(lessDate.month) == sevenDaysAfter.month + expect(lessDate.day) == sevenDaysAfter.day + } + } + + context("fetchLastSevenDaysEmotions를 호출하면") { + beforeEach { + _ = sut.fetchLastSevenDaysEmotions() + } + + it("7일 이전의 데이터를 불러온다") { + let date = try unwrap(emotionRepository.readGreaterThanDate) + let sevenDaysAgo = Date().daysAgo(value: 7) + expect(date.year) == sevenDaysAgo.year + expect(date.month) == sevenDaysAgo.month + expect(date.day) == sevenDaysAgo.day + } + } + + context("updateTodo를 호출하면") { + var todo: Todo! + beforeEach { + todo = .init(id: .init(), note: "", isCompleted: true, date: .init()) + _ = sut.updateTodo(todo: todo) + } + + it("TodoRepository의 UpdateTodo를 호출한다") { + expect(todoRepository.updateTodoCallCount) == 1 + expect(todoRepository.updateTodoTodo?.id) == todo.id + } + } + } + } + +} From 03c56dd66d29ee232ba7b5a09034b499ebcc5ace Mon Sep 17 00:00:00 2001 From: hogumachu Date: Fri, 19 Jan 2024 21:05:28 +0900 Subject: [PATCH 3/6] =?UTF-8?q?test:=20MemoryDetailUseCase=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UseCases/MemoryDetailUseCaseTests.swift | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 InMyMemory/Domain/Tests/UseCaseTests/UseCases/MemoryDetailUseCaseTests.swift diff --git a/InMyMemory/Domain/Tests/UseCaseTests/UseCases/MemoryDetailUseCaseTests.swift b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/MemoryDetailUseCaseTests.swift new file mode 100644 index 0000000..7a1d6c8 --- /dev/null +++ b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/MemoryDetailUseCaseTests.swift @@ -0,0 +1,52 @@ +// +// MemoryDetailUseCaseTests.swift +// +// +// Created by 홍성준 on 1/19/24. +// + +@testable import UseCases +import Entities +import XCTest +import Quick +import Nimble + +final class MemoryDetailUseCaseTests: QuickSpec { + + override class func spec() { + var sut: MemoryDetailUseCase! + var repository: MemoryRepositoryMock! + var memoryID: UUID! + + describe("MemoryDetailUseCase 테스트") { + beforeEach { + memoryID = .init() + repository = .init() + sut = .init(memoryRepository: repository) + } + + context("memory를 호출하면") { + beforeEach { + _ = sut.memory(id: memoryID) + } + + it("MemoryRepository의 memory(id: UUID)가 호출된다") { + expect(repository.readMemoryIDCallCount) == 1 + expect(repository.readMemoryIDMemoryID) == memoryID + } + } + + context("remove를 호출하면") { + beforeEach { + _ = sut.remove(memoryID: memoryID) + } + + it("memoryRepository의 delete(memoryID: UUID)가 호출된다") { + expect(repository.deleteMemoryIDCallCount) == 1 + expect(repository.deleteMemoryIDMemoryID) == memoryID + } + } + } + } + +} From f4fde76e32c6665acbae26a67506c9f837684542 Mon Sep 17 00:00:00 2001 From: hogumachu Date: Fri, 19 Jan 2024 21:09:23 +0900 Subject: [PATCH 4/6] =?UTF-8?q?test:=20MemoryRecordUseCase=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UseCases/MemoryRecordUseCaseTests.swift | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 InMyMemory/Domain/Tests/UseCaseTests/UseCases/MemoryRecordUseCaseTests.swift diff --git a/InMyMemory/Domain/Tests/UseCaseTests/UseCases/MemoryRecordUseCaseTests.swift b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/MemoryRecordUseCaseTests.swift new file mode 100644 index 0000000..bde3a68 --- /dev/null +++ b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/MemoryRecordUseCaseTests.swift @@ -0,0 +1,41 @@ +// +// MemoryRecordUseCaseTests.swift +// +// +// Created by 홍성준 on 1/19/24. +// + +@testable import UseCases +import Entities +import XCTest +import Quick +import Nimble + +final class MemoryRecordUseCaseTests: QuickSpec { + + override class func spec() { + var sut: MemoryRecordUseCase! + var repository: MemoryRepositoryMock! + var memory: Memory! + + describe("MemoryRecordUseCase 테스트") { + beforeEach { + repository = .init() + sut = .init(memoryRepository: repository) + memory = .init(id: .init(), images: [], note: "", date: .init()) + } + + context("createMemory를 호출하면") { + beforeEach { + _ = sut.createMemory(memory) + } + + it("MemoryRepository의 update(memory: Memory)가 호출된다") { + expect(repository.updateMemoryCallCount) == 1 + expect(repository.updateMemoryMemory?.id) == memory.id + } + } + } + } + +} From 06ce087a34a6f648d7c46b47e29b55a50986560f Mon Sep 17 00:00:00 2001 From: hogumachu Date: Fri, 19 Jan 2024 21:14:31 +0900 Subject: [PATCH 5/6] =?UTF-8?q?test:=20SearchUseCase=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UseCases/SearchUseCaseTests.swift | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 InMyMemory/Domain/Tests/UseCaseTests/UseCases/SearchUseCaseTests.swift diff --git a/InMyMemory/Domain/Tests/UseCaseTests/UseCases/SearchUseCaseTests.swift b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/SearchUseCaseTests.swift new file mode 100644 index 0000000..1f1a145 --- /dev/null +++ b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/SearchUseCaseTests.swift @@ -0,0 +1,72 @@ +// +// SearchUseCaseTests.swift +// +// +// Created by 홍성준 on 1/19/24. +// + +@testable import UseCases +import Entities +import XCTest +import Quick +import Nimble + +final class SearchUseCaseTests: QuickSpec { + + override class func spec() { + var sut: SearchUseCase! + var emotionRepository: EmotionRepositoryMock! + var memoryRepository: MemoryRepositoryMock! + var todoRepository: TodoRepositoryMock! + + describe("SearchUseCase 테스트") { + beforeEach { + emotionRepository = .init() + memoryRepository = .init() + todoRepository = .init() + sut = .init( + emotionRepository: emotionRepository, + memoryRepository: memoryRepository, + todoRepository: todoRepository + ) + } + + context("fetchMemories가 호출되면") { + let keyword = "Test fetchMemories" + beforeEach { + _ = sut.fetchMemories(keyword: keyword) + } + + it("MemoryRepository의 read(keyword: String)이 호출된다") { + expect { memoryRepository.readKeywordCallCount } == 1 + expect { memoryRepository.readKeywordKeyword } == keyword + } + } + + context("fetchTodos가 호출되면") { + let keyword = "Test fetchTodos" + beforeEach { + _ = sut.fetchTodos(keyword: keyword) + } + + it("TodoRepository의 read(keyword: String)이 호출된다") { + expect { todoRepository.readKeywordCallCount } == 1 + expect { todoRepository.readKeywordKeyword } == keyword + } + } + + context("fetchEmotions가 호출되면") { + let keyword = "Test fetchEmotions" + beforeEach { + _ = sut.fetchEmotions(keyword: keyword) + } + + it("EmotionRepository의 read(keyword: String)이 호출된다") { + expect { emotionRepository.readKeywordCallCount } == 1 + expect { emotionRepository.readKeywordKeyword } == keyword + } + } + } + } + +} From 70754ce3b7799beee371fe625a7640cdee96d16c Mon Sep 17 00:00:00 2001 From: hogumachu Date: Fri, 19 Jan 2024 21:18:37 +0900 Subject: [PATCH 6/6] =?UTF-8?q?test:=20EmotionRecordUseCase=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UseCases/EmotionRecordUseCaseTests.swift | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 InMyMemory/Domain/Tests/UseCaseTests/UseCases/EmotionRecordUseCaseTests.swift diff --git a/InMyMemory/Domain/Tests/UseCaseTests/UseCases/EmotionRecordUseCaseTests.swift b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/EmotionRecordUseCaseTests.swift new file mode 100644 index 0000000..c8f0081 --- /dev/null +++ b/InMyMemory/Domain/Tests/UseCaseTests/UseCases/EmotionRecordUseCaseTests.swift @@ -0,0 +1,40 @@ +// +// EmotionRecordUseCaseTests.swift +// +// +// Created by 홍성준 on 1/19/24. +// + +@testable import UseCases +import Entities +import XCTest +import Quick +import Nimble + +final class EmotionRecordUseCaseTests: QuickSpec { + + override class func spec() { + var sut: EmotionRecordUseCase! + var repository: EmotionRepositoryMock! + + describe("") { + beforeEach { + repository = .init() + sut = .init(emotionRepository: repository) + } + + context("createEmotion이 호출되면") { + let emotion: Emotion = .init(id: .init(), note: "", emotionType: .good, date: .init()) + beforeEach { + _ = sut.createEmotion(emotion) + } + + it("EmotionRepository의 create(emotion: Emotion)이 호출된다") { + expect { repository.createEmotionEmotion?.id } == emotion.id + expect { repository.createEmotionCallCount } == 1 + } + } + } + } + +}