// // YearViewDisplayTests.swift // Tests iOS // // Year View display tests: stats section with donut chart and bar chart. // TC-035, TC-036 // import XCTest final class YearViewDisplayTests: BaseUITestCase { override var seedFixture: String? { "week_of_moods" } override var bypassSubscription: Bool { true } /// TC-035: Year View shows donut chart with mood distribution. /// The donut chart center displays the entry count with "days" text. func testYearView_DonutChartVisible() { let tabBar = TabBarScreen(app: app) tabBar.tapYear() XCTAssertTrue(tabBar.yearTab.isSelected, "Year tab should be selected") // Wait for stats section to render let statsSection = app.element(UITestID.Year.statsSection) XCTAssertTrue( statsSection.waitForExistence(timeout: 8), "Year stats section should be visible" ) // The donut chart center shows "days" — search globally since // SwiftUI flattens the accessibility tree under GeometryReader. let daysLabel = app.staticTexts["days"] XCTAssertTrue( daysLabel.waitForExistence(timeout: 3), "Donut chart should display 'days' label in center" ) captureScreenshot(name: "year_donut_chart") } /// TC-036: Year View shows bar chart with mood percentages. func testYearView_BarChartVisible() { let tabBar = TabBarScreen(app: app) tabBar.tapYear() XCTAssertTrue(tabBar.yearTab.isSelected, "Year tab should be selected") let statsSection = app.element(UITestID.Year.statsSection) XCTAssertTrue( statsSection.waitForExistence(timeout: 8), "Year stats section should be visible" ) // week_of_moods fixture: 2 great, 2 good, 1 avg, 1 bad, 1 horrible // Expected percentages: 28% (great, good) and 14% (avg, bad, horrible). // Search for any of the expected percentage labels. let found28 = app.staticTexts["28%"].waitForExistence(timeout: 3) let found14 = app.staticTexts["14%"].waitForExistence(timeout: 2) captureScreenshot(name: "year_bar_chart") XCTAssertTrue( found28 || found14, "Bar chart should show at least one percentage value (28% or 14%)" ) } }