Skip to content

Commit 938c65f

Browse files
committed
feature: LWWRegister 테스트(#149)
1 parent adb517a commit 938c65f

File tree

2 files changed

+117
-14
lines changed

2 files changed

+117
-14
lines changed

Domain/Domain.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
6F5FC15C2D2C1CF80049A44F /* WhiteboardObjectRegistersInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F5FC15B2D2C1CF80049A44F /* WhiteboardObjectRegistersInterface.swift */; };
4747
6F68E7852CEC200000945394 /* TextObjectUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F68E7842CEC200000945394 /* TextObjectUseCase.swift */; };
4848
6F68E7872CEC593300945394 /* TextObjectUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F68E7862CEC593300945394 /* TextObjectUseCaseTests.swift */; };
49+
6F6A89A72D2E9367008CF899 /* LWWRegisterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F6A89A62D2E9367008CF899 /* LWWRegisterTests.swift */; };
4950
A81E7BF32CF70C17007E8414 /* GameObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = A81E7BF22CF70C17007E8414 /* GameObject.swift */; };
5051
A81E7BF92CF72503007E8414 /* GameObjectUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = A81E7BF82CF72503007E8414 /* GameObjectUseCase.swift */; };
5152
A81E7BFB2CF725C2007E8414 /* GameObjectUseCaseInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = A81E7BFA2CF725C2007E8414 /* GameObjectUseCaseInterface.swift */; };
@@ -109,6 +110,7 @@
109110
6F5FC15B2D2C1CF80049A44F /* WhiteboardObjectRegistersInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhiteboardObjectRegistersInterface.swift; sourceTree = "<group>"; };
110111
6F68E7842CEC200000945394 /* TextObjectUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextObjectUseCase.swift; sourceTree = "<group>"; };
111112
6F68E7862CEC593300945394 /* TextObjectUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextObjectUseCaseTests.swift; sourceTree = "<group>"; };
113+
6F6A89A62D2E9367008CF899 /* LWWRegisterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LWWRegisterTests.swift; sourceTree = "<group>"; };
112114
A81E7BF22CF70C17007E8414 /* GameObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameObject.swift; sourceTree = "<group>"; };
113115
A81E7BF82CF72503007E8414 /* GameObjectUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameObjectUseCase.swift; sourceTree = "<group>"; };
114116
A81E7BFA2CF725C2007E8414 /* GameObjectUseCaseInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameObjectUseCaseInterface.swift; sourceTree = "<group>"; };
@@ -248,6 +250,7 @@
248250
6F68E7862CEC593300945394 /* TextObjectUseCaseTests.swift */,
249251
007BCEDB2CEB852C009E6935 /* AddPhotoUseCaseTests.swift */,
250252
6F3BCDD12CF45510005F6642 /* ChatUseCaseTests.swift */,
253+
6F6A89A62D2E9367008CF899 /* LWWRegisterTests.swift */,
251254
);
252255
path = DomainTests;
253256
sourceTree = "<group>";
@@ -430,6 +433,7 @@
430433
buildActionMask = 2147483647;
431434
files = (
432435
007BCEDC2CEB852C009E6935 /* AddPhotoUseCaseTests.swift in Sources */,
436+
6F6A89A72D2E9367008CF899 /* LWWRegisterTests.swift in Sources */,
433437
6F3BCDD22CF45510005F6642 /* ChatUseCaseTests.swift in Sources */,
434438
00D2DD952CE88EDA0089F0BA /* ManageWhiteboardObjectsUseCaseTests.swift in Sources */,
435439
0080E9582CE4D8760095B958 /* DrawObjectUseCaseTests.swift in Sources */,

Domain/DomainTests/LWWRegisterTests.swift

Lines changed: 113 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,130 @@
55
// Created by 박승찬 on 1/8/25.
66
//
77

8+
import Domain
89
import XCTest
910

1011
final class LWWRegisterTests: XCTestCase {
12+
private var register: LWWRegister!
13+
private var defaultTimestamp: Timestamp!
14+
private var defaultDate: Date!
15+
private var defaultObject: WhiteboardObject!
1116

12-
override func setUpWithError() throws {
13-
// Put setup code here. This method is called before the invocation of each test method in the class.
17+
override func setUp() {
18+
super.setUp()
19+
defaultObject = TextObject(
20+
id: UUID(),
21+
centerPosition: CGPoint(x: 0, y: 0),
22+
size: CGSize(width: 100, height: 100),
23+
text: "default")
24+
defaultDate = Date()
25+
defaultTimestamp = Timestamp(updatedAt: defaultDate, updatedBy: UUID())
26+
register = LWWRegister(whiteboardObject: defaultObject, timestamp: defaultTimestamp)
1427
}
1528

16-
override func tearDownWithError() throws {
17-
// Put teardown code here. This method is called after the invocation of each test method in the class.
29+
override func tearDown() {
30+
register = nil
31+
defaultTimestamp = nil
32+
defaultDate = nil
33+
defaultObject = nil
1834
}
1935

20-
func testExample() throws {
21-
// This is an example of a functional test case.
22-
// Use XCTAssert and related functions to verify your tests produce the correct results.
23-
// Any test you write for XCTest can be annotated as throws and async.
24-
// Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
25-
// Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
36+
// Timestamp가 같을 때
37+
func testMergeWhenEqualTimestmap() {
38+
// 준비
39+
let textObject = TextObject(
40+
id: UUID(),
41+
centerPosition: CGPoint(x: 50, y: 50),
42+
size: CGSize(width: 200, height: 200),
43+
text: "equal")
44+
let mockRegister = LWWRegister(whiteboardObject: textObject, timestamp: defaultTimestamp)
45+
46+
// 실행
47+
let sut = register.merge(register: mockRegister)
48+
49+
// 검증
50+
XCTAssertEqual(sut, register)
51+
}
52+
53+
// 새로 들어온 updatedAt이 더 빠를 때
54+
func testMergeWhenIncomingTimestampIsEarlier() {
55+
// 준비
56+
let earlierDate = defaultDate.addingTimeInterval(-10)
57+
let earlierTimestamp = Timestamp(updatedAt: earlierDate, updatedBy: UUID())
58+
let textObject = TextObject(
59+
id: UUID(),
60+
centerPosition: CGPoint(x: 50, y: 50),
61+
size: CGSize(width: 200, height: 200),
62+
text: "incoming")
63+
let mockRegister = LWWRegister(whiteboardObject: textObject, timestamp: earlierTimestamp)
64+
65+
// 실행
66+
let sut = register.merge(register: mockRegister)
67+
68+
// 검증
69+
XCTAssertEqual(sut, register)
2670
}
2771

28-
func testPerformanceExample() throws {
29-
// This is an example of a performance test case.
30-
self.measure {
31-
// Put the code you want to measure the time of here.
72+
// updatedAt은 같지만 새로 들어온 UUID가 작을 때
73+
func testMergeWhenIncomingTimestampHasSmallerUUID() {
74+
// 준비
75+
guard let smallerUUID = UUID(uuidString: "00000000-0000-0000-0000-000000000000") else {
76+
XCTFail("Test UUID생성 실패")
77+
return
3278
}
79+
let smallerTimestamp = Timestamp(updatedAt: defaultDate, updatedBy: smallerUUID)
80+
let textObject = TextObject(
81+
id: UUID(),
82+
centerPosition: CGPoint(x: 50, y: 50),
83+
size: CGSize(width: 200, height: 200),
84+
text: "incoming")
85+
let mockRegister = LWWRegister(whiteboardObject: textObject, timestamp: smallerTimestamp)
86+
87+
// 실행
88+
let sut = register.merge(register: mockRegister)
89+
90+
// 검증
91+
XCTAssertEqual(sut, register)
3392
}
3493

94+
// 새로 들어온 updatedAt이 더 느릴 때
95+
func testMergeWhenIncomingTimestampIsLater() {
96+
// 준비
97+
let laterDate = defaultDate.addingTimeInterval(10)
98+
let laterTimestamp = Timestamp(updatedAt: laterDate, updatedBy: UUID())
99+
let textObject = TextObject(
100+
id: UUID(),
101+
centerPosition: CGPoint(x: 50, y: 50),
102+
size: CGSize(width: 200, height: 200),
103+
text: "incoming")
104+
let mockRegister = LWWRegister(whiteboardObject: textObject, timestamp: laterTimestamp)
105+
106+
// 실행
107+
let sut = register.merge(register: mockRegister)
108+
109+
// 검증
110+
XCTAssertEqual(sut, mockRegister)
111+
}
112+
113+
// updatedAt은 같지만 새로 들어온 UUID가 클 때
114+
func testMergeWhenIncomingTimestampHasLargerUUID() {
115+
// 준비
116+
guard let largerUUID = UUID(uuidString: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF") else {
117+
XCTFail("Test UUID생성 실패")
118+
return
119+
}
120+
let largerTimestamp = Timestamp(updatedAt: defaultDate, updatedBy: largerUUID)
121+
let textObject = TextObject(
122+
id: UUID(),
123+
centerPosition: CGPoint(x: 50, y: 50),
124+
size: CGSize(width: 200, height: 200),
125+
text: "incoming")
126+
let mockRegister = LWWRegister(whiteboardObject: textObject, timestamp: largerTimestamp)
127+
128+
// 실행
129+
let sut = register.merge(register: mockRegister)
130+
131+
// 검증
132+
XCTAssertEqual(sut, mockRegister)
133+
}
35134
}

0 commit comments

Comments
 (0)