Files
swift-composable-architectu…/Examples/CaseStudies/SwiftUICaseStudiesTests/01-GettingStarted-SharedStateTests.swift
Stephen Celis 195284b94b The Composable Architecture 1.0 (#2318)
* docs

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Fix invalid states count for 3 optionals and typos (#2094)

* wip

* wip

* more dismisseffect docs

* fixed some references

* navigation doc corrections

* more nav docs

* fix cancellation tests in release mode

* wrap some tests in #if DEBUG since they are testing expected failures

* update UUIDs in tests to use shorter initializer

* fixed a todo

* wip

* fix merge errors

* wip

* fix

* wip

* wip

* fixing a bunch of todos

* get rid of rawvalue in StackElementID

* more todos

* NavLinkStore docs

* fix swift 5.6 stuff

* fix some standups tests

* fix

* clean up

* docs fix

* fixes

* wip

* 5.6 fix

* wip

* wip

* dont parallelize tests

* updated demo readmes

* wip

* Use ObservedObject instead of StateObject for alert/dialog modifiers.

* integration tests for bad dismissal behavior

* check for runtime warnings in every integration test

* wip

* wip

* wip

* fix

* wip

* wip

* wip

* wip

* wip

* wip

* Drop a bunch of Hashables.

* some nav bug fixes

* wip

* wip

* wip

* fix

* fix

* wip

* wip

* Simplify recording test.

* add concurrent async test

* fix

* wip

* Refact how detail dismisses itself.

* fix

* 5.6 fix

* wip

* wip

* wip

* wip

* Add TestStore.assert.

* Revert "Add TestStore.assert."

This reverts commit a892cccc66.

* add Ukrainian Readme.md (#2121)

* Add TestStore.assert. (#2123)

* Add TestStore.assert.

* wip

* Update Sources/ComposableArchitecture/TestStore.swift

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* Update Sources/ComposableArchitecture/Documentation.docc/Extensions/TestStore.md

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* fix tests

---------

Co-authored-by: Stephen Celis <stephen@stephencelis.com>

* Run swift-format

* push for store.finish and presentation

* wip

* move docs around

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Add case subscripts

* wip

* wip

* wip

* 5.7-only

* wip

* wip

* wip

* wip

* fix

* revert store.finish task cancellation

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* add test for presentation scope

* wip

* wip

* wip

* wip

* wip

* cleanup

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Rename ReducerProtocol.swift to Reducer.swift (#2206)

* Hard-deprecate old SwitchStore initializers/overloads

* wip

* wip

* Resolve CaseStudies crash (#2258)

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Bump timeout for CI

* wip

* Remove old deprecations

* Simplify test store

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* images for tutorials

* wip

* wip

* Remove deprecated alert APIs

* Bump dependencies

* wip

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>
Co-authored-by: 유재호 <y73447jh@gmail.com>
Co-authored-by: Dmytro <barabashdmyto@gmail.com>
Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>
Co-authored-by: mbrandonw <mbrandonw@users.noreply.github.com>
2023-07-30 14:58:40 -07:00

105 lines
2.7 KiB
Swift

import ComposableArchitecture
import XCTest
@testable import SwiftUICaseStudies
@MainActor
final class SharedStateTests: XCTestCase {
func testTabRestoredOnReset() async {
let store = TestStore(initialState: SharedState.State()) {
SharedState()
}
await store.send(.selectTab(.profile)) {
$0.currentTab = .profile
$0.profile = SharedState.Profile.State(
currentTab: .profile, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0
)
}
await store.send(.profile(.resetCounterButtonTapped)) {
$0.currentTab = .counter
$0.profile = SharedState.Profile.State(
currentTab: .counter, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0
)
}
}
func testTabSelection() async {
let store = TestStore(initialState: SharedState.State()) {
SharedState()
}
await store.send(.selectTab(.profile)) {
$0.currentTab = .profile
$0.profile = SharedState.Profile.State(
currentTab: .profile, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0
)
}
await store.send(.selectTab(.counter)) {
$0.currentTab = .counter
$0.profile = SharedState.Profile.State(
currentTab: .counter, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0
)
}
}
func testSharedCounts() async {
let store = TestStore(initialState: SharedState.State()) {
SharedState()
}
await store.send(.counter(.incrementButtonTapped)) {
$0.counter.count = 1
$0.counter.maxCount = 1
$0.counter.numberOfCounts = 1
}
await store.send(.counter(.decrementButtonTapped)) {
$0.counter.count = 0
$0.counter.numberOfCounts = 2
}
await store.send(.counter(.decrementButtonTapped)) {
$0.counter.count = -1
$0.counter.minCount = -1
$0.counter.numberOfCounts = 3
}
}
func testIsPrimeWhenPrime() async {
let store = TestStore(
initialState: SharedState.Counter.State(
alert: nil, count: 3, maxCount: 0, minCount: 0, numberOfCounts: 0
)
) {
SharedState.Counter()
}
await store.send(.isPrimeButtonTapped) {
$0.alert = AlertState {
TextState("👍 The number 3 is prime!")
}
}
await store.send(.alert(.dismiss)) {
$0.alert = nil
}
}
func testIsPrimeWhenNotPrime() async {
let store = TestStore(
initialState: SharedState.Counter.State(
alert: nil, count: 6, maxCount: 0, minCount: 0, numberOfCounts: 0
)
) {
SharedState.Counter()
}
await store.send(.isPrimeButtonTapped) {
$0.alert = AlertState {
TextState("👎 The number 6 is not prime :(")
}
}
await store.send(.alert(.dismiss)) {
$0.alert = nil
}
}
}