Files
swift-composable-architectu…/Examples/Integration/IntegrationUITests/EnumTests.swift
Stephen Celis af5ae21f65 Cache store scoping when possible (#2527)
* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Silence test warnings

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Revert "wip"

This reverts commit ed6cc24adb.

* Revert "Revert "wip""

This reverts commit 8358990b1a.

* wip

* wip

* wip

* wip

* wip

* update a bunch of docs

* wip

* wip

* wip

* fix

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Kill integration tests for now

* wip

* wip

* wip

* wip

* updating docs for @Reducer macro

* replaced more Reducer protocols with @Reducer

* Fixed some broken docc references

* wip

* Some @Reducer docs

* more docs

* convert some old styles to new style

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* bump

* update tutorials to use body

* update tutorials to use DML on destination state enum

* Add diagnostic

* wip

* updated a few more tests

* wip

* wip

* Add another gotcha

* wip

* wip

* wip

* Add dynamic lookup to presentation state/action

* wip

* wip

* Better lookup

* wip

* wip

* wip

* IdentifiedAction

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* fixes

* wip

* wip

* added migration guide for new scope operation

* migration guide for new navigation view modifiers

* wip

* fix

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* fix

* fix

* wip

* wip

* remove for now

* wip

* wip

* simplify scope

* wip

* updated some docs

* migration guides

* more migration guide

* fix ci

* fix

* soft deprecate all apis using AnyCasePath

* wip

* Fix

* fix tests

* updated tests

* swift-format 509 compatibility

* wip

* wip

* Update Sources/ComposableArchitecture/Macros.swift

Co-authored-by: Mateusz Bąk <bakmatthew@icloud.com>

* wip

* wip

* update optional state case study

* remove initializer

* Don't use @State for BasicsView integration demo

* fix tests

* remove reduce diagnostics for now

* diagnose error not warning

* Update Sources/ComposableArchitecture/Macros.swift

Co-authored-by: Jesse Tipton <jesse@jessetipton.com>

* wip

* move integration tests to cron

* Revert "move integration tests to cron"

This reverts commit f9bdf2f04b.

* disable flakey tests on CI

* wip

* wip

* fix migration guide

* fix docs

* fix deprecation messages

* wip

* wip

* missing deprecation

* soft

* wip

* update migration guide

* Fix resolved

* update migration guide

* fix test

* format

* wip

* fix

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* fix

* wip

* wip

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>
Co-authored-by: Mateusz Bąk <bakmatthew@icloud.com>
Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>
Co-authored-by: Jesse Tipton <jesse@jessetipton.com>
2023-11-26 09:58:54 -08:00

270 lines
12 KiB
Swift

import InlineSnapshotTesting
import TestCases
import XCTest
@MainActor
final class EnumTests: BaseIntegrationTests {
override func setUpWithError() throws {
try super.setUpWithError()
self.app.buttons["iOS 16"].tap()
self.app.buttons["Enum"].tap()
self.clearLogs()
// SnapshotTesting.isRecording = true
}
func testBasics() {
self.app.buttons["Toggle feature 1 on"].tap()
XCTAssertEqual(self.app.staticTexts["FEATURE 1"].exists, true)
self.assertLogs {
"""
BasicsView.body
EnumView.body
PresentationStoreOf<EnumView.Feature.Destination>.scope
StoreOf<BasicsView.Feature>.init
StoreOf<BasicsView.Feature>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<EnumView.Feature.Destination>.init
StoreOf<EnumView.Feature.Destination>.init
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature>.scope
StoreOf<EnumView.Feature>.scope
ViewStore<BasicsView.Feature.State, BasicsView.Feature.Action>.deinit
ViewStore<BasicsView.Feature.State, BasicsView.Feature.Action>.init
ViewStore<BasicsView.Feature.State?, BasicsView.Feature.Action>.deinit
ViewStore<BasicsView.Feature.State?, BasicsView.Feature.Action>.init
ViewStore<EnumView.Feature.Destination.State, EnumView.Feature.Destination.Action>.deinit
ViewStore<EnumView.Feature.Destination.State, EnumView.Feature.Destination.Action>.init
ViewStore<EnumView.Feature.Destination.State?, EnumView.Feature.Destination.Action>.deinit
ViewStore<EnumView.Feature.Destination.State?, EnumView.Feature.Destination.Action>.init
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.deinit
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.init
ViewStoreOf<BasicsView.Feature>.init
ViewStoreOf<BasicsView.Feature?>.init
ViewStoreOf<EnumView.Feature.Destination>.init
WithViewStore<EnumView.ViewState, EnumView.Feature.Action>.body
WithViewStoreOf<BasicsView.Feature>.body
WithViewStoreOf<BasicsView.Feature?>.body
WithViewStoreOf<EnumView.Feature.Destination>.body
WithViewStoreOf<EnumView.Feature.Destination?>.body
"""
}
self.app.buttons["Increment"].tap()
XCTAssertEqual(self.app.staticTexts["1"].exists, true)
self.assertLogs {
"""
BasicsView.body
PresentationStoreOf<EnumView.Feature.Destination>.scope
StoreOf<BasicsView.Feature>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature>.scope
StoreOf<EnumView.Feature>.scope
ViewStore<BasicsView.Feature.State, BasicsView.Feature.Action>.deinit
ViewStore<BasicsView.Feature.State, BasicsView.Feature.Action>.init
WithViewStoreOf<BasicsView.Feature>.body
"""
}
}
func testToggle1On_Toggle1Off() {
self.app.buttons["Toggle feature 1 on"].tap()
XCTAssertEqual(self.app.staticTexts["FEATURE 1"].exists, true)
self.clearLogs()
self.app.buttons["Toggle feature 1 off"].tap()
XCTAssertEqual(self.app.staticTexts["FEATURE 1"].exists, false)
self.assertLogs {
"""
EnumView.body
PresentationStoreOf<EnumView.Feature.Destination>.scope
StoreOf<BasicsView.Feature>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature>.scope
StoreOf<EnumView.Feature>.scope
ViewStore<EnumView.Feature.Destination.State?, EnumView.Feature.Destination.Action>.deinit
ViewStore<EnumView.Feature.Destination.State?, EnumView.Feature.Destination.Action>.init
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.deinit
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.init
WithViewStore<EnumView.ViewState, EnumView.Feature.Action>.body
WithViewStoreOf<EnumView.Feature.Destination?>.body
"""
}
}
func testToggle1On_Toggle2On() {
self.app.buttons["Toggle feature 1 on"].tap()
XCTAssertEqual(self.app.staticTexts["FEATURE 1"].exists, true)
self.clearLogs()
self.app.buttons["Toggle feature 2 on"].tap()
XCTAssertEqual(self.app.staticTexts["FEATURE 2"].exists, true)
self.assertLogs {
"""
BasicsView.body
EnumView.body
PresentationStoreOf<EnumView.Feature.Destination>.scope
StoreOf<BasicsView.Feature>.init
StoreOf<BasicsView.Feature>.init
StoreOf<BasicsView.Feature>.scope
StoreOf<BasicsView.Feature?>.deinit
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature>.scope
StoreOf<EnumView.Feature>.scope
ViewStore<BasicsView.Feature.State, BasicsView.Feature.Action>.deinit
ViewStore<BasicsView.Feature.State, BasicsView.Feature.Action>.init
ViewStore<BasicsView.Feature.State?, BasicsView.Feature.Action>.deinit
ViewStore<BasicsView.Feature.State?, BasicsView.Feature.Action>.deinit
ViewStore<BasicsView.Feature.State?, BasicsView.Feature.Action>.init
ViewStore<BasicsView.Feature.State?, BasicsView.Feature.Action>.init
ViewStore<EnumView.Feature.Destination.State, EnumView.Feature.Destination.Action>.deinit
ViewStore<EnumView.Feature.Destination.State, EnumView.Feature.Destination.Action>.init
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.deinit
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.init
ViewStoreOf<BasicsView.Feature>.init
ViewStoreOf<BasicsView.Feature?>.deinit
ViewStoreOf<BasicsView.Feature?>.init
ViewStoreOf<BasicsView.Feature?>.init
WithViewStore<EnumView.ViewState, EnumView.Feature.Action>.body
WithViewStoreOf<BasicsView.Feature>.body
WithViewStoreOf<BasicsView.Feature?>.body
WithViewStoreOf<BasicsView.Feature?>.body
WithViewStoreOf<EnumView.Feature.Destination>.body
"""
}
}
func testToggle1On_Increment_Toggle1OffOn() {
self.app.buttons["Toggle feature 1 on"].tap()
XCTAssertEqual(self.app.staticTexts["FEATURE 1"].exists, true)
self.app.buttons["Decrement"].tap()
XCTAssertEqual(self.app.staticTexts["-1"].exists, true)
self.app.buttons["Toggle feature 1 off"].tap()
self.clearLogs()
self.app.buttons["Toggle feature 1 on"].tap()
XCTAssertEqual(self.app.staticTexts["FEATURE 1"].exists, true)
XCTAssertEqual(self.app.staticTexts["-1"].exists, false)
XCTAssertEqual(self.app.staticTexts["0"].exists, true)
self.assertLogs {
"""
BasicsView.body
EnumView.body
PresentationStoreOf<EnumView.Feature.Destination>.scope
StoreOf<BasicsView.Feature>.deinit
StoreOf<BasicsView.Feature>.deinit
StoreOf<BasicsView.Feature>.init
StoreOf<BasicsView.Feature>.init
StoreOf<BasicsView.Feature>.scope
StoreOf<BasicsView.Feature?>.deinit
StoreOf<BasicsView.Feature?>.deinit
StoreOf<BasicsView.Feature?>.deinit
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.init
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<EnumView.Feature.Destination>.deinit
StoreOf<EnumView.Feature.Destination>.deinit
StoreOf<EnumView.Feature.Destination>.init
StoreOf<EnumView.Feature.Destination>.init
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature>.scope
StoreOf<EnumView.Feature>.scope
ViewStore<BasicsView.Feature.State, BasicsView.Feature.Action>.deinit
ViewStore<BasicsView.Feature.State, BasicsView.Feature.Action>.init
ViewStore<BasicsView.Feature.State?, BasicsView.Feature.Action>.deinit
ViewStore<BasicsView.Feature.State?, BasicsView.Feature.Action>.init
ViewStore<EnumView.Feature.Destination.State, EnumView.Feature.Destination.Action>.deinit
ViewStore<EnumView.Feature.Destination.State, EnumView.Feature.Destination.Action>.init
ViewStore<EnumView.Feature.Destination.State?, EnumView.Feature.Destination.Action>.deinit
ViewStore<EnumView.Feature.Destination.State?, EnumView.Feature.Destination.Action>.init
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.deinit
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.init
ViewStoreOf<BasicsView.Feature>.deinit
ViewStoreOf<BasicsView.Feature>.init
ViewStoreOf<BasicsView.Feature?>.deinit
ViewStoreOf<BasicsView.Feature?>.init
ViewStoreOf<EnumView.Feature.Destination>.deinit
ViewStoreOf<EnumView.Feature.Destination>.init
WithViewStore<EnumView.ViewState, EnumView.Feature.Action>.body
WithViewStoreOf<BasicsView.Feature>.body
WithViewStoreOf<BasicsView.Feature?>.body
WithViewStoreOf<EnumView.Feature.Destination>.body
WithViewStoreOf<EnumView.Feature.Destination?>.body
"""
}
}
func testDismiss() {
self.app.buttons["Toggle feature 1 on"].tap()
XCTAssertEqual(self.app.staticTexts["FEATURE 1"].exists, true)
self.clearLogs()
self.app.buttons["Dismiss"].tap()
XCTAssertEqual(self.app.staticTexts["FEATURE 1"].exists, false)
self.assertLogs {
"""
EnumView.body
PresentationStoreOf<EnumView.Feature.Destination>.scope
PresentationStoreOf<EnumView.Feature.Destination>.scope
StoreOf<BasicsView.Feature>.scope
StoreOf<BasicsView.Feature>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<BasicsView.Feature?>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature.Destination?>.scope
StoreOf<EnumView.Feature>.scope
StoreOf<EnumView.Feature>.scope
StoreOf<EnumView.Feature>.scope
StoreOf<EnumView.Feature>.scope
ViewStore<EnumView.Feature.Destination.State?, EnumView.Feature.Destination.Action>.deinit
ViewStore<EnumView.Feature.Destination.State?, EnumView.Feature.Destination.Action>.init
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.deinit
ViewStore<EnumView.ViewState, EnumView.Feature.Action>.init
WithViewStore<EnumView.ViewState, EnumView.Feature.Action>.body
WithViewStoreOf<EnumView.Feature.Destination?>.body
"""
}
}
}