development
swift 98 lines 2.89 KB
Raw
1 import SnapshotTesting
2 import SwiftUI
3 import XCTest
4
5 @testable import Klepon
6
7 @MainActor
8 final class KleponSnapshotTests: XCTestCase {
9 override func invokeTest() {
10 if ProcessInfo.processInfo.environment["RECORD_SNAPSHOTS"] == "1" {
11 withSnapshotTesting(record: .all) {
12 super.invokeTest()
13 }
14 } else {
15 super.invokeTest()
16 }
17 }
18
19 override func setUp() {
20 super.setUp()
21 continueAfterFailure = false
22 }
23
24 func testOnboardingView_defaultState() {
25 let guideEngine = OndeGuideEngine()
26 let view = OnboardingView(onBrowseFirst: {}, onComplete: {})
27 .environmentObject(guideEngine)
28
29 assertSnapshot(
30 of: makeHostingController(view),
31 as: .image(on: .iPhoneSe),
32 named: "default"
33 )
34 }
35
36 func testEmptyStateView() {
37 let view = ZStack {
38 KleponColor.background.ignoresSafeArea()
39
40 EmptyStateView(
41 title: "No saved dishes yet",
42 message:
43 "When something looks delicious, save it here so you can come back later.",
44 systemImage: "heart"
45 )
46 .padding(24)
47 }
48
49 assertSnapshot(
50 of: makeHostingController(view),
51 as: .image(on: .iPhoneSe),
52 named: "saved-empty-state"
53 )
54 }
55
56 func testGuideArtworkView() {
57 let view = ZStack {
58 KleponColor.background.ignoresSafeArea()
59
60 GuideArtworkView(entry: .snapshotFixture, height: 210)
61 .padding(24)
62 }
63
64 assertSnapshot(
65 of: makeHostingController(view),
66 as: .image(on: .iPhoneSe),
67 named: "guide-artwork"
68 )
69 }
70
71 private func makeHostingController<Content: View>(_ view: Content) -> UIViewController {
72 let controller = UIHostingController(rootView: view.preferredColorScheme(.light))
73 controller.overrideUserInterfaceStyle = .light
74 controller.view.backgroundColor = UIColor(KleponColor.background)
75 return controller
76 }
77 }
78
79 extension GuideEntry {
80 fileprivate static let snapshotFixture = GuideEntry(
81 id: "klepon",
82 kind: .dish,
83 title: "Klepon",
84 subtitle: "Palm sugar-filled rice cake rolled in coconut",
85 summary: "A soft, sweet bite with a warm syrupy center.",
86 story:
87 "Klepon is a beloved Indonesian snack made from glutinous rice flour, filled with palm sugar, and coated in fresh grated coconut.",
88 tasteNotes: ["Sweet", "Chewy", "Coconut"],
89 highlights: ["Palm sugar center", "Fresh coconut coating"],
90 region: "Java",
91 aliases: ["Onde-onde kecil"],
92 tags: ["Snack", "Dessert", "Traditional"],
93 relatedIDs: [],
94 suggestedQuestions: ["What does klepon taste like?"],
95 imageName: nil,
96 isFeatured: true
97 )
98 }