Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 136 additions & 0 deletions Mark-In-Tests/UseCaseTests/DeleteFolderUseCaseTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
//
// DeleteFolderUseCaseTests.swift
// Mark-In-Tests
//
// Created by 이정동 on 6/6/25.
//

import Testing

@testable import Mark_In

struct DeleteFolderUseCaseTests {

@Test
func test_includingChildren이_true면_링크들을_삭제한다() async throws {
// Given: 준비
let userID = "testUser"
let folderID = "testFolderID"

let stubAuthUserManager = StubAuthUserManager(userID: userID)
let fakeLinkRepo = FakeLinkRepository()
.withTestLinks(userID: userID, folderID: folderID, count: 5)
let fakeFolderRepo = FakeFolderRepository()
.withTestFolder(userID: userID, folderID: folderID)
.withTestFolders(userID: userID, count: 2)

let sut = DeleteFolderUseCaseImpl(
authUserManager: stubAuthUserManager,
linkRepository: fakeLinkRepo,
folderRepository: fakeFolderRepo
)

// When: 실행
_ = try await sut.execute(folderID: folderID, includingChildren: true)

// Then: 검증
let links = fakeLinkRepo.data[userID]!

#expect(links.filter { $0.folderID == folderID }.isEmpty)

// TearDown: 해제

}

@Test
func test_includingChildren이_false면_링크들을_기본_폴더로_이동한다() async throws {
// Given: 준비
let userID = "testUser"
let folderID = "testFolderID"
let defaultFolderID: String? = nil

let stubAuthUserManager = StubAuthUserManager(userID: userID)
let fakeLinkRepo = FakeLinkRepository()
.withTestLinks(userID: userID, folderID: folderID, count: 5)
let fakeFolderRepo = FakeFolderRepository()
.withTestFolder(userID: userID, folderID: folderID)
.withTestFolder(userID: userID, folderID: defaultFolderID)

let sut = DeleteFolderUseCaseImpl(
authUserManager: stubAuthUserManager,
linkRepository: fakeLinkRepo,
folderRepository: fakeFolderRepo
)

// When: 실행
_ = try await sut.execute(folderID: folderID, includingChildren: false)

// Then: 검증
let links = fakeLinkRepo.data[userID]!

#expect(links.filter { $0.folderID == defaultFolderID }.count == 5)

// TearDown: 해제

}

@Test
func test_folderID가_nil이면_폴더는_삭제되지_않는다() async throws {
// Given: 준비
let userID = "testUser"
let folderID: String? = nil

let stubAuthUserManager = StubAuthUserManager(userID: userID)
let fakeLinkRepo = FakeLinkRepository()
.withTestLinks(userID: userID, folderID: folderID, count: 5)
let fakeFolderRepo = FakeFolderRepository()
.withTestFolder(userID: userID, folderID: folderID)

let sut = DeleteFolderUseCaseImpl(
authUserManager: stubAuthUserManager,
linkRepository: fakeLinkRepo,
folderRepository: fakeFolderRepo
)

// When: 실행
_ = try await sut.execute(folderID: folderID, includingChildren: false)

// Then: 검증
let folders = fakeFolderRepo.data[userID]!

#expect(folders.contains { $0.id == folderID })

// TearDown: 해제

}

@Test
func test_folderID가_존재하면_폴더를_삭제한다() async throws {
// Given: 준비
let userID = "testUser"
let folderID = "testFolder"

let stubAuthUserManager = StubAuthUserManager(userID: userID)
let fakeLinkRepo = FakeLinkRepository()
.withTestLinks(userID: userID, folderID: folderID, count: 5)
let fakeFolderRepo = FakeFolderRepository()
.withTestFolder(userID: userID, folderID: folderID)

let sut = DeleteFolderUseCaseImpl(
authUserManager: stubAuthUserManager,
linkRepository: fakeLinkRepo,
folderRepository: fakeFolderRepo
)

// When: 실행
_ = try await sut.execute(folderID: folderID, includingChildren: false)

// Then: 검증
let folders = fakeFolderRepo.data[userID]!

#expect(folders.contains { $0.id == folderID } == false)

// TearDown: 해제

}
}
48 changes: 48 additions & 0 deletions Mark-In-Tests/ValidationsTests/DTOFieldKeyMappingTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
//
// Mark_In_Tests.swift
// Mark-In-Tests
//
// Created by 이정동 on 6/4/25.
//

import Testing
@testable import Mark_In

struct DTOFieldKeyMappingTests {

@Test
func test_FolderDTO의_CodingKey와_FirestoreFieldKey가_일치해야_한다() async throws {
// Given: 준비

// When: 실행

// Then: 검증
#expect(FolderDTO.CodingKeys.id.rawValue == FirestoreFieldKey.Folder.id)
#expect(FolderDTO.CodingKeys.name.rawValue == FirestoreFieldKey.Folder.name)
#expect(FolderDTO.CodingKeys.createdAt.rawValue == FirestoreFieldKey.Folder.createdAt)

// TearDown: 해제

}

@Test
func test_WebLinkDTO의_CodingKey와_FirestoreFieldKey가_일치해야_한다() async throws {
// Given: 준비

// When: 실행

// Then: 검증
#expect(WebLinkDTO.CodingKeys.id.rawValue == FirestoreFieldKey.Link.id)
#expect(WebLinkDTO.CodingKeys.url.rawValue == FirestoreFieldKey.Link.url)
#expect(WebLinkDTO.CodingKeys.title.rawValue == FirestoreFieldKey.Link.title)
#expect(WebLinkDTO.CodingKeys.thumbnailUrl.rawValue == FirestoreFieldKey.Link.thumbnailUrl)
#expect(WebLinkDTO.CodingKeys.faviconUrl.rawValue == FirestoreFieldKey.Link.faviconUrl)
#expect(WebLinkDTO.CodingKeys.isPinned.rawValue == FirestoreFieldKey.Link.isPinned)
#expect(WebLinkDTO.CodingKeys.createdAt.rawValue == FirestoreFieldKey.Link.createdAt)
#expect(WebLinkDTO.CodingKeys.lastAccessedAt.rawValue == FirestoreFieldKey.Link.lastAccessedAt)
#expect(WebLinkDTO.CodingKeys.folderID.rawValue == FirestoreFieldKey.Link.folderID)

// TearDown: 해제

}
}
Loading
Loading