Skip to content

Commit ce82dfe

Browse files
author
Alexey Naumov
committed
Add tests for RootViewAppearance
1 parent 5a3efb6 commit ce82dfe

File tree

3 files changed

+73
-1
lines changed

3 files changed

+73
-1
lines changed

CountriesSwiftUI.xcodeproj/project.pbxproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
F661F2CA23777D440014E142 /* SVGImageViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F661F2C923777D440014E142 /* SVGImageViewTests.swift */; };
4747
F661F2CC23783E360014E142 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F661F2CB23783E360014E142 /* Helpers.swift */; };
4848
F66EDB6823F1599F00A01B9F /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F66EDB6A23F1599F00A01B9F /* Localizable.strings */; };
49+
F67451F5243A4CC200A4B498 /* RootViewAppearanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67451F4243A4CC200A4B498 /* RootViewAppearanceTests.swift */; };
4950
F67DBD5223663BCD00C83258 /* SystemEventsHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67DBD5123663BCD00C83258 /* SystemEventsHandler.swift */; };
5051
F67DBD542366E2E200C83258 /* DependencyInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67DBD532366E2E200C83258 /* DependencyInjector.swift */; };
5152
F67DBD652368875A00C83258 /* CountriesWebRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67DBD642368875A00C83258 /* CountriesWebRepository.swift */; };
@@ -124,6 +125,7 @@
124125
F66EDB6C23F168FF00A01B9F /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
125126
F66EDB6D23F1691400A01B9F /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
126127
F66EDB6E23F1692000A01B9F /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
128+
F67451F4243A4CC200A4B498 /* RootViewAppearanceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewAppearanceTests.swift; sourceTree = "<group>"; };
127129
F67833D22369CCBD0065272F /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
128130
F67833D62369CCBD0065272F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
129131
F67DBD5123663BCD00C83258 /* SystemEventsHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemEventsHandler.swift; sourceTree = "<group>"; };
@@ -181,11 +183,12 @@
181183
F60CC501236C3C80007E84B2 /* UI */ = {
182184
isa = PBXGroup;
183185
children = (
184-
F6500B4923C8F2AC0086FD70 /* DeepLinkUITests.swift */,
185186
F6E7ACE423F83BEB00AB48AB /* ContentViewTests.swift */,
186187
F60CC502236C3CA8007E84B2 /* CountriesListTests.swift */,
187188
F60CC506236C5CFA007E84B2 /* CountryDetailsTests.swift */,
189+
F6500B4923C8F2AC0086FD70 /* DeepLinkUITests.swift */,
188190
F60CC50A236C622C007E84B2 /* ModalDetailsViewTests.swift */,
191+
F67451F4243A4CC200A4B498 /* RootViewAppearanceTests.swift */,
189192
F661F2C923777D440014E142 /* SVGImageViewTests.swift */,
190193
F6F606A723CF25EC00F36F5D /* SearchBarTests.swift */,
191194
F60CC508236C6084007E84B2 /* ViewPreviewsTests.swift */,
@@ -568,6 +571,7 @@
568571
files = (
569572
F60CC507236C5CFA007E84B2 /* CountryDetailsTests.swift in Sources */,
570573
F60829712369CE0100DB292E /* RequestMocking.swift in Sources */,
574+
F67451F5243A4CC200A4B498 /* RootViewAppearanceTests.swift in Sources */,
571575
F661F2C5237772CE0014E142 /* ImagesInteractorTests.swift in Sources */,
572576
F6F003B3236AF9F100AAC7C6 /* LoadableTests.swift in Sources */,
573577
F60829762369D58A00DB292E /* CountriesWebRepositoryTests.swift in Sources */,

CountriesSwiftUI/UI/RootViewModifier.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@ struct RootViewAppearance: ViewModifier {
1515

1616
@Environment(\.injected) private var injected: DIContainer
1717
@State private var isActive: Bool = false
18+
let inspection = PassthroughSubject<((AnyView) -> Void), Never>()
1819

1920
func body(content: Content) -> some View {
2021
content
2122
.blur(radius: isActive ? 0 : 10)
2223
.onReceive(stateUpdate) { self.isActive = $0 }
24+
.onReceive(inspection) { callback in
25+
callback(AnyView(self.body(content: content)))
26+
}
2327
}
2428

2529
private var stateUpdate: AnyPublisher<Bool, Never> {
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
// RootViewAppearanceTests.swift
3+
// UnitTests
4+
//
5+
// Created by Alexey Naumov on 05.04.2020.
6+
// Copyright © 2020 Alexey Naumov. All rights reserved.
7+
//
8+
9+
import XCTest
10+
import SwiftUI
11+
import ViewInspector
12+
@testable import CountriesSwiftUI
13+
14+
private typealias ModifierContent = _ViewModifier_Content<RootViewAppearance>
15+
16+
extension ModifierContent: Inspectable { }
17+
18+
final class RootViewAppearanceTests: XCTestCase {
19+
20+
func test_blur_whenInactive() {
21+
let sut = RootViewAppearance()
22+
let exp = XCTestExpectation(description: #function)
23+
let container = DIContainer(appState: .init(AppState()),
24+
interactors: .mocked())
25+
XCTAssertFalse(container.appState.value.system.isActive)
26+
DispatchQueue.main.async {
27+
sut.inspection.send { body in
28+
body.inspect { content in
29+
XCTAssertEqual(try content.anyView()
30+
.view(ModifierContent.self).blur().radius, 10)
31+
}
32+
ViewHosting.expel()
33+
exp.fulfill()
34+
}
35+
}
36+
let view = EmptyView().modifier(sut)
37+
.environment(\.injected, container)
38+
ViewHosting.host(view: view)
39+
wait(for: [exp], timeout: 0.1)
40+
}
41+
42+
func test_blur_whenActive() {
43+
let sut = RootViewAppearance()
44+
let exp = XCTestExpectation(description: #function)
45+
let container = DIContainer(appState: .init(AppState()),
46+
interactors: .mocked())
47+
container.appState[\.system.isActive] = true
48+
XCTAssertTrue(container.appState.value.system.isActive)
49+
DispatchQueue.main.async {
50+
sut.inspection.send { body in
51+
body.inspect { content in
52+
XCTAssertEqual(try content.anyView()
53+
.view(ModifierContent.self).blur().radius, 0)
54+
}
55+
ViewHosting.expel()
56+
exp.fulfill()
57+
}
58+
}
59+
let view = EmptyView().modifier(sut)
60+
.environment(\.injected, container)
61+
ViewHosting.host(view: view)
62+
wait(for: [exp], timeout: 0.1)
63+
}
64+
}

0 commit comments

Comments
 (0)