Skip to content

Commit b42e301

Browse files
committed
Fixed UI tests
1 parent facf597 commit b42e301

File tree

9 files changed

+34
-31
lines changed

9 files changed

+34
-31
lines changed

ExampleMVVM.xcodeproj/project.pbxproj

+8
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
1F53E2B623125896008D6A05 /* UIViewController+AddChild.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F53E2B523125896008D6A05 /* UIViewController+AddChild.swift */; };
2828
1F53E2B823125F71008D6A05 /* MoviesQueryListItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F53E2B723125F71008D6A05 /* MoviesQueryListItemViewModel.swift */; };
2929
1F53E2B923125FAD008D6A05 /* MoviesQueryListItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F53E2B723125F71008D6A05 /* MoviesQueryListItemViewModel.swift */; };
30+
1F57F8D223C656F600981E09 /* AccessibilityIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F57F8D123C656F600981E09 /* AccessibilityIdentifier.swift */; };
31+
1F57F8D323C656F600981E09 /* AccessibilityIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F57F8D123C656F600981E09 /* AccessibilityIdentifier.swift */; };
32+
1F57F8D423C656F600981E09 /* AccessibilityIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F57F8D123C656F600981E09 /* AccessibilityIdentifier.swift */; };
3033
1F6B521323630016002FCDE9 /* RepositoryTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6B521223630016002FCDE9 /* RepositoryTask.swift */; };
3134
1F77930F222C0DF2004E034C /* StoryboardInstantiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F77930E222C0DF2004E034C /* StoryboardInstantiable.swift */; };
3235
1F84DECE2300677B00139F73 /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FEE31612218B17E00C160B9 /* Observable.swift */; };
@@ -123,6 +126,7 @@
123126
1F474F2122356B1E0092DB4B /* Cancelable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cancelable.swift; sourceTree = "<group>"; };
124127
1F53E2B523125896008D6A05 /* UIViewController+AddChild.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+AddChild.swift"; sourceTree = "<group>"; };
125128
1F53E2B723125F71008D6A05 /* MoviesQueryListItemViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoviesQueryListItemViewModel.swift; sourceTree = "<group>"; };
129+
1F57F8D123C656F600981E09 /* AccessibilityIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityIdentifier.swift; sourceTree = "<group>"; };
126130
1F6B521223630016002FCDE9 /* RepositoryTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepositoryTask.swift; sourceTree = "<group>"; };
127131
1F77930E222C0DF2004E034C /* StoryboardInstantiable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryboardInstantiable.swift; sourceTree = "<group>"; };
128132
1F84DECF23006BDA00139F73 /* FetchRecentMovieQueriesUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchRecentMovieQueriesUseCase.swift; sourceTree = "<group>"; };
@@ -510,6 +514,7 @@
510514
1FEE31612218B17E00C160B9 /* Observable.swift */,
511515
1F53E2B523125896008D6A05 /* UIViewController+AddChild.swift */,
512516
1FF53EB323688893008D6CCC /* DataTransferError+ConnectionError.swift */,
517+
1F57F8D123C656F600981E09 /* AccessibilityIdentifier.swift */,
513518
);
514519
path = Utils;
515520
sourceTree = "<group>";
@@ -852,6 +857,7 @@
852857
buildActionMask = 2147483647;
853858
files = (
854859
1F02DE3522F8507500E40C3A /* MoviesSceneUITests.swift in Sources */,
860+
1F57F8D423C656F600981E09 /* AccessibilityIdentifier.swift in Sources */,
855861
);
856862
runOnlyForDeploymentPostprocessing = 0;
857863
};
@@ -878,6 +884,7 @@
878884
1F1FC48A22E3693100BCBA8D /* DataTransferService.swift in Sources */,
879885
1FEE31622218B17E00C160B9 /* Observable.swift in Sources */,
880886
1FFFC836221B0041007D99D2 /* MoviesRepository.swift in Sources */,
887+
1F57F8D223C656F600981E09 /* AccessibilityIdentifier.swift in Sources */,
881888
1F0CEFCF23436B67004141FA /* ConnectionError.swift in Sources */,
882889
1FE49D91230AA7C200D1D42E /* MoviesListItemViewModel.swift in Sources */,
883890
1F05A6CC2220A2CB001E2801 /* SearchMoviesUseCase.swift in Sources */,
@@ -917,6 +924,7 @@
917924
1F9034C62306FF2D00DEA4BD /* DataTransferService.swift in Sources */,
918925
1F9034C42306FDFE00DEA4BD /* NetworkServiceTests.swift in Sources */,
919926
1F53E2B923125FAD008D6A05 /* MoviesQueryListItemViewModel.swift in Sources */,
927+
1F57F8D323C656F600981E09 /* AccessibilityIdentifier.swift in Sources */,
920928
1F9035412307758D00DEA4BD /* PosterImagesRepositoryMock.swift in Sources */,
921929
1F474F2E22356C7F0092DB4B /* MoviesRepository.swift in Sources */,
922930
1FE49D9A230AEC4F00D1D42E /* MoviesListItemViewModel.swift in Sources */,

ExampleMVVM/Application/DIContainer/AppDIContainer.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ final class AppDIContainer {
1414
// MARK: - Network
1515
lazy var apiDataTransferService: DataTransferService = {
1616
let config = ApiDataNetworkConfig(baseURL: URL(string: appConfigurations.apiBaseURL)!,
17-
queryParameters: ["api_key": appConfigurations.apiKey])
17+
queryParameters: ["api_key": appConfigurations.apiKey,
18+
"language": NSLocale.preferredLanguages.first ?? "en"])
1819

1920
let apiDataNetwork = DefaultNetworkService(config: config)
2021
return DefaultDataTransferService(with: apiDataNetwork)

ExampleMVVM/Presentation/MoviesScene/MovieDetails/View/MovieDetailsViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ final class MovieDetailsViewController: UIViewController, StoryboardInstantiable
2727
super.viewDidLoad()
2828

2929
bind(to: viewModel)
30-
view.accessibilityLabel = NSLocalizedString("Movie details view", comment: "")
30+
view.accessibilityIdentifier = AccessibilityIdentifier.movieDetailsView
3131
}
3232

3333
private func bind(to viewModel: MovieDetailsViewModel) {

ExampleMVVM/Presentation/MoviesScene/MoviesList/View/MoviesListTableView/MoviesListTableViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ extension MoviesListTableViewController {
6767
viewModel.didLoadNextPage()
6868
}
6969

70-
cell.accessibilityIdentifier = String(format: "Result row %d", indexPath.row + 1)
70+
cell.accessibilityIdentifier = String(format: AccessibilityIdentifier.searchResultRow, indexPath.row + 1)
7171

7272
return cell
7373
}

ExampleMVVM/Presentation/MoviesScene/MoviesList/View/MoviesListViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ extension MoviesListViewController {
150150
searchController.searchBar.autoresizingMask = [.flexibleWidth]
151151
searchBarContainer.addSubview(searchController.searchBar)
152152
definesPresentationContext = true
153-
searchController.accessibilityLabel = NSLocalizedString("Search Movies", comment: "")
153+
searchController.searchBar.searchTextField.accessibilityIdentifier = AccessibilityIdentifier.searchField
154154
}
155155
}
156156

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//
2+
// AccessibilityIdentifier.swift
3+
// ExampleMVVM
4+
//
5+
// Created by Oleh Kudinov on 08.01.20.
6+
//
7+
8+
import Foundation
9+
10+
public struct AccessibilityIdentifier {
11+
static let movieDetailsView = "AccessibilityIdentifierMovieDetailsView"
12+
static let searchField = "AccessibilityIdentifierSearchMovies"
13+
static let searchResultRow = "AccessibilityIdentifierResultRow%d"
14+
}

ExampleMVVM/Resources/en.lproj/Localizable.strings

-2
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,3 @@
1414
"No internet connection" = "No internet connection";
1515
"Failed loading movies" = "Failed loading movies";
1616
"Search Movies" = "Search Movies";
17-
"Result row %d" = "Result row %d";
18-
"Movie details view" = "Movie details view";

ExampleMVVM/Resources/es.lproj/Localizable.strings

-2
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,3 @@
1414
"No internet connection" = "Sin conexión a internet";
1515
"Failed loading movies" = "Error al descargar películas";
1616
"Search Movies" = "Buscar películas";
17-
"Result row %d" = "Resultado fila% d";
18-
"Movie details view" = "Vista de detalles de la película";

ExampleMVVMUITests/Presentation/MoviesScene/MoviesSceneUITests.swift

+7-23
Original file line numberDiff line numberDiff line change
@@ -22,35 +22,19 @@ class MoviesSceneUITests: XCTestCase {
2222
let app = XCUIApplication()
2323

2424
// Search for Batman
25-
app.searchFields[localized("Search Movies")].tap()
25+
app.searchFields[AccessibilityIdentifier.searchField].tap()
2626
if !app.keys["A"].waitForExistence(timeout: 5) {
2727
XCTFail("The keyboard could not be found. Use keyboard shortcut COMMAND + SHIFT + K while simulator has focus on text input")
2828
}
29-
app.searchFields[localized("Search Movies")].typeText("Batman Begins")
30-
app.buttons["search"].forceTapElement()
29+
app.searchFields[AccessibilityIdentifier.searchField].typeText("Batman Begins")
30+
app.buttons["search"].tap()
3131

3232
// Tap on first result row
33-
_ = app.cells[String(format: "Result row %d", 1)].waitForExistence(timeout: 10)
34-
app.cells[String(format: "Result row %d", 1)].forceTapElement()
33+
_ = app.cells[String(format: AccessibilityIdentifier.searchResultRow, 1)].waitForExistence(timeout: 10)
34+
app.cells[String(format: AccessibilityIdentifier.searchResultRow, 1)].tap()
3535

3636
// Make sure movie details view
37-
XCTAssertTrue(app.otherElements[localized("Movie details view")].waitForExistence(timeout: 5))
38-
XCTAssertTrue(app.navigationBars[localized("Batman Begins")].waitForExistence(timeout: 5))
39-
}
40-
41-
private func localized(_ key: String) -> String {
42-
return NSLocalizedString(key, bundle: Bundle(for: Self.self), comment: "")
43-
}
44-
}
45-
46-
extension XCUIElement {
47-
func forceTapElement() {
48-
if self.isHittable {
49-
self.tap()
50-
}
51-
else {
52-
let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.0, dy:0.0))
53-
coordinate.tap()
54-
}
37+
XCTAssertTrue(app.otherElements[AccessibilityIdentifier.movieDetailsView].waitForExistence(timeout: 5))
38+
XCTAssertTrue(app.navigationBars["Batman Begins"].waitForExistence(timeout: 5))
5539
}
5640
}

0 commit comments

Comments
 (0)