Skip to content

Commit 5b48726

Browse files
committed
UI Test 추가 - 기분 기록
- 기분 기록 추가 및 수정 테스트 - 기록 추가 시 마음 현황 업데이트가 잘 되는지 - 기분 삭제 테스트
1 parent 518c751 commit 5b48726

File tree

5 files changed

+116
-1
lines changed

5 files changed

+116
-1
lines changed

PlantingMind/PlantingMind.xcodeproj/project.pbxproj

+6
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
7B2CFC1D2B5A6FFB00641F6D /* CalendarGridView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B2CFC1C2B5A6FFB00641F6D /* CalendarGridView.swift */; };
2525
7B34415D2BA1B87A00DA43F6 /* MonthPickerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B34415C2BA1B87A00DA43F6 /* MonthPickerViewModel.swift */; };
2626
7B34415F2BA1F85600DA43F6 /* MonthPickerViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B34415E2BA1F85600DA43F6 /* MonthPickerViewModelTests.swift */; };
27+
7B3FA1BF2BCFDE6C007C3633 /* PlantingMindUITests_MoodRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B3FA1BE2BCFDE6C007C3633 /* PlantingMindUITests_MoodRecord.swift */; };
2728
7B4C07B62BB6B42E00B60CCD /* MoodAnalysisModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C07B52BB6B42E00B60CCD /* MoodAnalysisModel.swift */; };
2829
7B4C07B82BB6B6B200B60CCD /* AnalysisView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C07B72BB6B6B200B60CCD /* AnalysisView.swift */; };
2930
7B4C07BC2BB6C1F200B60CCD /* AnalysisViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C07BB2BB6C1F200B60CCD /* AnalysisViewModelTests.swift */; };
@@ -67,6 +68,7 @@
6768
7BA66A8A2BCFEB41009BD9E8 /* AccessibilityIdentifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BA66A892BCFEB41009BD9E8 /* AccessibilityIdentifiers.swift */; };
6869
7BA66A8B2BCFEC21009BD9E8 /* AccessibilityIdentifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BA66A892BCFEB41009BD9E8 /* AccessibilityIdentifiers.swift */; };
6970
7BA66A8D2BCFFB0D009BD9E8 /* XCTestsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BA66A8C2BCFFB0D009BD9E8 /* XCTestsExtension.swift */; };
71+
7BA66A922BD00C0F009BD9E8 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 7B95D1792BA1645C00484F9D /* Localizable.xcstrings */; };
7072
7BAB04F42B9466BC00948CF2 /* Mood.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BAB04F32B9466BC00948CF2 /* Mood.swift */; };
7173
7BAB04F62B946B8700948CF2 /* MoodRecordViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BAB04F52B946B8700948CF2 /* MoodRecordViewModelTests.swift */; };
7274
7BABB0112B5F850200EEEEBB /* ColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BABB0102B5F850200EEEEBB /* ColorExtension.swift */; };
@@ -136,6 +138,7 @@
136138
7B2CFC1C2B5A6FFB00641F6D /* CalendarGridView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarGridView.swift; sourceTree = "<group>"; };
137139
7B34415C2BA1B87A00DA43F6 /* MonthPickerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MonthPickerViewModel.swift; sourceTree = "<group>"; };
138140
7B34415E2BA1F85600DA43F6 /* MonthPickerViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MonthPickerViewModelTests.swift; sourceTree = "<group>"; };
141+
7B3FA1BE2BCFDE6C007C3633 /* PlantingMindUITests_MoodRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlantingMindUITests_MoodRecord.swift; sourceTree = "<group>"; };
139142
7B4C07B52BB6B42E00B60CCD /* MoodAnalysisModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoodAnalysisModel.swift; sourceTree = "<group>"; };
140143
7B4C07B72BB6B6B200B60CCD /* AnalysisView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisView.swift; sourceTree = "<group>"; };
141144
7B4C07BB2BB6C1F200B60CCD /* AnalysisViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisViewModelTests.swift; sourceTree = "<group>"; };
@@ -329,6 +332,7 @@
329332
isa = PBXGroup;
330333
children = (
331334
7B11F8422B4549E000346A41 /* PlantingMindUITests_Calendar.swift */,
335+
7B3FA1BE2BCFDE6C007C3633 /* PlantingMindUITests_MoodRecord.swift */,
332336
7BA66A8C2BCFFB0D009BD9E8 /* XCTestsExtension.swift */,
333337
);
334338
path = PlantingMindUITests;
@@ -593,6 +597,7 @@
593597
isa = PBXResourcesBuildPhase;
594598
buildActionMask = 2147483647;
595599
files = (
600+
7BA66A922BD00C0F009BD9E8 /* Localizable.xcstrings in Resources */,
596601
);
597602
runOnlyForDeploymentPostprocessing = 0;
598603
};
@@ -699,6 +704,7 @@
699704
files = (
700705
7B11F8432B4549E000346A41 /* PlantingMindUITests_Calendar.swift in Sources */,
701706
7BA66A8D2BCFFB0D009BD9E8 /* XCTestsExtension.swift in Sources */,
707+
7B3FA1BF2BCFDE6C007C3633 /* PlantingMindUITests_MoodRecord.swift in Sources */,
702708
7BA66A8B2BCFEC21009BD9E8 /* AccessibilityIdentifiers.swift in Sources */,
703709
);
704710
runOnlyForDeploymentPostprocessing = 0;

PlantingMind/PlantingMind/AccessibilityIdentifiers.swift

+17
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,21 @@ enum AccessibilityIdentifiers: String {
1919
case yearPicker
2020
case monthPicker
2121
case doneButton
22+
23+
// MoodAnalysis
24+
case emptyMoodText
25+
case moodChart
26+
27+
// MoodRecord
28+
case moodTitleText
29+
case moodReasonTextEditor
30+
case saveButton
31+
case cancelButton
32+
case confirmButton
33+
case removeButton
34+
case nice
35+
case good
36+
case normal
37+
case notBad
38+
case bad
2239
}

PlantingMind/PlantingMind/Calender/Analysis/AnalysisView.swift

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ struct AnalysisView: View {
1818
.font(.title3)
1919
.bold()
2020
.padding()
21+
.accessibilityIdentifier(AccessibilityIdentifiers.emptyMoodText.rawValue)
2122
} else {
2223
Text("mood_statistics")
2324
.font(.title3)
@@ -50,6 +51,7 @@ struct AnalysisView: View {
5051
}
5152
}
5253
.frame(height: 45)
54+
.accessibilityIdentifier(AccessibilityIdentifiers.moodChart.rawValue)
5355
}
5456
}
5557
}

PlantingMind/PlantingMind/MoodRecord/MoodRecordView.swift

+9-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ struct MoodRecordView: View {
2828
.font(.title2)
2929
.bold()
3030
.padding(.horizontal)
31+
.accessibilityIdentifier(AccessibilityIdentifiers.moodTitleText.rawValue)
3132

3233
moodSelectView
3334

@@ -58,6 +59,7 @@ struct MoodRecordView: View {
5859
.background(.red)
5960
.clipShape(Capsule(style: .continuous))
6061
}
62+
.accessibilityIdentifier(AccessibilityIdentifiers.removeButton.rawValue)
6163
}
6264

6365
Spacer()
@@ -78,7 +80,9 @@ struct MoodRecordView: View {
7880
Button("confirm", role: .destructive) {
7981
dismiss()
8082
}
83+
.accessibilityIdentifier(AccessibilityIdentifiers.confirmButton.rawValue)
8184
}
85+
.accessibilityIdentifier(AccessibilityIdentifiers.cancelButton.rawValue)
8286
}
8387

8488
ToolbarItem(placement: .topBarTrailing) {
@@ -88,6 +92,7 @@ struct MoodRecordView: View {
8892
}, label: {
8993
Text("save")
9094
})
95+
.accessibilityIdentifier(AccessibilityIdentifiers.saveButton.rawValue)
9196
}
9297
}
9398
.foregroundStyle(Color.Custom.general)
@@ -100,6 +105,7 @@ struct MoodRecordView: View {
100105
dismiss()
101106
})
102107
}
108+
.accessibilityIdentifier(AccessibilityIdentifiers.confirmButton.rawValue)
103109
})
104110
.alert("error_description", isPresented: $viewModel.showErrorAlert) {
105111
Button("ok", role: .cancel) { }
@@ -108,7 +114,7 @@ struct MoodRecordView: View {
108114

109115
var moodSelectView: some View {
110116
HStack(spacing: 20) {
111-
ForEach(Mood.allCases, id: \.self) {mood in
117+
ForEach(Mood.allCases, id: \.self) { mood in
112118
Button(action: {
113119
viewModel.mood = mood
114120
}, label: {
@@ -123,6 +129,7 @@ struct MoodRecordView: View {
123129
.frame(width: 60, height: 60)
124130
}
125131
}
132+
.accessibilityIdentifier(mood.rawValue)
126133
}
127134
}
128135
}
@@ -140,6 +147,7 @@ struct MoodRecordView: View {
140147
viewModel.reason.removeLast()
141148
}
142149
}
150+
.accessibilityIdentifier(AccessibilityIdentifiers.moodReasonTextEditor.rawValue)
143151
}
144152

145153
var emptyStringView: some View {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
//
2+
// PlantingMindUITests_MoodRecord.swift
3+
// PlantingMindUITests
4+
//
5+
// Created by 최은주 on 4/17/24.
6+
//
7+
8+
import XCTest
9+
10+
final class PlantingMindUITests_MoodRecord: XCTestCase {
11+
let app = XCUIApplication()
12+
13+
override func setUpWithError() throws {
14+
continueAfterFailure = false
15+
}
16+
17+
func test_01_감정기록_후_마음현황_체크() {
18+
app.launch()
19+
20+
checkString(element: app.staticTexts[AccessibilityIdentifiers.emptyMoodText.rawValue],
21+
expectedString: localized("mood_statistics_empty"))
22+
23+
tapButton(element: app.buttons["1"])
24+
tapButton(element: app.buttons[AccessibilityIdentifiers.cancelButton.rawValue])
25+
26+
tapButton(element: app.buttons["1"])
27+
checkString(element: app.staticTexts[AccessibilityIdentifiers.moodTitleText.rawValue],
28+
expectedString: localized("mood_title"))
29+
30+
tapButton(element: app.buttons[AccessibilityIdentifiers.nice.rawValue])
31+
32+
let textEditor = app.textViews[AccessibilityIdentifiers.moodReasonTextEditor.rawValue]
33+
XCTAssertTrue(textEditor.waitForExistence(timeout: 1.0))
34+
textEditor.tap()
35+
textEditor.typeText("test string")
36+
37+
tapButton(element: app.buttons[AccessibilityIdentifiers.saveButton.rawValue])
38+
let chart = app.otherElements[AccessibilityIdentifiers.moodChart.rawValue].firstMatch
39+
XCTAssertTrue(chart.waitForExistence(timeout: 1.0))
40+
XCTAssertTrue(chart.otherElements[localized("nice")].value as? String == "1")
41+
}
42+
43+
func test_02_감정기록_수정_취소() {
44+
tapButton(element: app.buttons["1"])
45+
46+
checkString(element: app.staticTexts[AccessibilityIdentifiers.moodTitleText.rawValue],
47+
expectedString: localized("mood_title"))
48+
49+
tapButton(element: app.buttons[AccessibilityIdentifiers.normal.rawValue])
50+
tapButton(element: app.buttons[AccessibilityIdentifiers.cancelButton.rawValue])
51+
XCTAssertTrue(app.staticTexts[localized("record_cancel_alert")].waitForExistence(timeout: 2.0))
52+
tapButton(element: app.buttons[AccessibilityIdentifiers.confirmButton.rawValue])
53+
}
54+
55+
func test_03_감정기록_수정_저장_후_마음현황_체크() {
56+
tapButton(element: app.buttons["1"])
57+
58+
checkString(element: app.staticTexts[AccessibilityIdentifiers.moodTitleText.rawValue],
59+
expectedString: localized("mood_title"))
60+
61+
tapButton(element: app.buttons[AccessibilityIdentifiers.normal.rawValue])
62+
tapButton(element: app.buttons[AccessibilityIdentifiers.saveButton.rawValue])
63+
64+
let chart = app.otherElements[AccessibilityIdentifiers.moodChart.rawValue].firstMatch
65+
XCTAssertTrue(chart.waitForExistence(timeout: 1.0))
66+
XCTAssertTrue(chart.otherElements[localized("normal")].value as? String == "1")
67+
}
68+
69+
func test_04_감정기록_삭제_후_마음현황_체크() {
70+
tapButton(element: app.buttons["1"])
71+
tapButton(element: app.buttons[AccessibilityIdentifiers.removeButton.rawValue])
72+
XCTAssertTrue(app.staticTexts[localized("delete_alert")].waitForExistence(timeout: 1.0))
73+
tapButton(element: app.buttons[AccessibilityIdentifiers.confirmButton.rawValue])
74+
checkString(element: app.staticTexts[AccessibilityIdentifiers.emptyMoodText.rawValue],
75+
expectedString: localized("mood_statistics_empty"))
76+
}
77+
78+
func localized(_ key: String) -> String {
79+
let uiTestBundle = Bundle(for: type(of: self))
80+
return NSLocalizedString(key, bundle: uiTestBundle, comment: "")
81+
}
82+
}

0 commit comments

Comments
 (0)