Skip to content

Commit

Permalink
Update tests (#119)
Browse files Browse the repository at this point in the history
  • Loading branch information
erolburak authored Nov 6, 2024
1 parent 445ff16 commit 8c97eba
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,13 @@ public final class PersistenceController {
else {
fatalError("Error initializing managed object model with module url!")
}
let cloudKitContainer = NSPersistentCloudKitContainer(name: "BobbysNews",
managedObjectModel: managedObjectModel)
#if DEBUG
if CommandLine.arguments.contains("-testing") {
container = NSPersistentContainer(name: "BobbysNews",
managedObjectModel: managedObjectModel)
} else {
container = NSPersistentCloudKitContainer(name: "BobbysNews",
managedObjectModel: managedObjectModel)
}
container = CommandLine.arguments.contains("-testing") ? NSPersistentContainer(name: "BobbysNews",
managedObjectModel: managedObjectModel) : cloudKitContainer
#else
container = NSPersistentCloudKitContainer(name: "BobbysNews",
managedObjectModel: managedObjectModel)
container = cloudKitContainer
#endif
container.loadPersistentStores { _, error in
if let error = error as NSError? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,7 @@ public final class FetchSourcesUseCase: PFetchSourcesUseCase {

public init(sourcesRepository: PSourcesRepository) {
#if DEBUG
if CommandLine.arguments.contains("–testing") {
self.sourcesRepository = SourcesRepositoryMock()
} else {
self.sourcesRepository = sourcesRepository
}
self.sourcesRepository = CommandLine.arguments.contains("–testing") ? SourcesRepositoryMock() : sourcesRepository
#else
self.sourcesRepository = sourcesRepository
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,7 @@ public final class ReadSourcesUseCase: PReadSourcesUseCase {

public init(sourcesRepository: PSourcesRepository) {
#if DEBUG
if CommandLine.arguments.contains("–testing") {
self.sourcesRepository = SourcesRepositoryMock()
} else {
self.sourcesRepository = sourcesRepository
}
self.sourcesRepository = CommandLine.arguments.contains("–testing") ? SourcesRepositoryMock() : sourcesRepository
#else
self.sourcesRepository = sourcesRepository
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,7 @@ public final class FetchTopHeadlinesUseCase: PFetchTopHeadlinesUseCase {

public init(topHeadlinesRepository: PTopHeadlinesRepository) {
#if DEBUG
if CommandLine.arguments.contains("–testing") {
self.topHeadlinesRepository = TopHeadlinesRepositoryMock()
} else {
self.topHeadlinesRepository = topHeadlinesRepository
}
self.topHeadlinesRepository = CommandLine.arguments.contains("–testing") ? TopHeadlinesRepositoryMock() : topHeadlinesRepository
#else
self.topHeadlinesRepository = topHeadlinesRepository
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,7 @@ public final class ReadTopHeadlinesUseCase: PReadTopHeadlinesUseCase {

public init(topHeadlinesRepository: PTopHeadlinesRepository) {
#if DEBUG
if CommandLine.arguments.contains("–testing") {
self.topHeadlinesRepository = TopHeadlinesRepositoryMock()
} else {
self.topHeadlinesRepository = topHeadlinesRepository
}
self.topHeadlinesRepository = CommandLine.arguments.contains("–testing") ? TopHeadlinesRepositoryMock() : topHeadlinesRepository
#else
self.topHeadlinesRepository = topHeadlinesRepository
#endif
Expand Down
2 changes: 1 addition & 1 deletion BobbysNewsUITests/App/BobbysNewsUITests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@

import XCTest

@MainActor
final class BobbysNewsUITests: XCTestCase {
// MARK: - Methods

override func setUpWithError() throws {
continueAfterFailure = false
}

@MainActor
func testLaunchPerformance() throws {
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
measure(metrics: [XCTApplicationLaunchMetric()]) {
Expand Down
2 changes: 1 addition & 1 deletion BobbysNewsUITests/App/BobbysNewsUITestsLaunchTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import XCTest

@MainActor
final class BobbysNewsUITestsLaunchTests: XCTestCase {
// MARK: - Methods

Expand All @@ -19,6 +18,7 @@ final class BobbysNewsUITestsLaunchTests: XCTestCase {
continueAfterFailure = false
}

@MainActor
func testLaunch() throws {
let app = XCUIApplication()
app.launch()
Expand Down
19 changes: 14 additions & 5 deletions BobbysNewsUITests/Extension/XCUIApplication+Extension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,40 @@ import XCTest
extension XCUIApplication {
// MARK: - Methods

/// Launch app steps:
/// 1) Set launch arguments to -testing
/// 2) Close settings tip
/// 2) Open country picker
/// 3) Set selected country to uk
func appLaunch() -> XCUIApplication {
let app = XCUIApplication()
/// Set launch arguments to `-testing`
app.launchArguments = ["–testing"]
/// Launch app
app.launch()
/// Close settings tip if needed
let closeSettingsTipButton = popovers.buttons["Close"]
if closeSettingsTipButton.waitForExistence(timeout: 5) {
closeSettingsTipButton.tap()
}
/// Set selected country if needed
let emptySelectedCountryMessage = app.staticTexts["EmptySelectedCountryMessage"]
if emptySelectedCountryMessage.waitForExistence(timeout: 5) {
/// Open settings menu
let settingsImage = app.images["SettingsImage"]
XCTAssertTrue(settingsImage.waitForExistence(timeout: 5))
settingsImage.tap()
/// Open country picker
let countryPicker = app.buttons["Country selection"]
XCTAssertTrue(countryPicker.waitForExistence(timeout: 5))
countryPicker.tap()
/// Set selected country to `uk`
let countryPickerItem = app.buttons["CountryPickerItem" + "uk"]
XCTAssertTrue(countryPickerItem.waitForExistence(timeout: 5))
countryPickerItem.tap()
}
return app
}

func openDetailView(with app: XCUIApplication) {
/// Open detail view
let navigationLink = app.buttons["NavigationLink"]
XCTAssertTrue(navigationLink.waitForExistence(timeout: 5))
navigationLink.tap()
}
}
60 changes: 35 additions & 25 deletions BobbysNewsUITests/Presentation/ContentViewTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,53 +7,63 @@

import XCTest

@MainActor
final class ContentViewTests: XCTestCase {
// MARK: - Methods

override func setUpWithError() throws {
continueAfterFailure = false
}

/// Test navigation link to open detail view steps:
/// 1) Open detail view
func testNavigationLink() {
@MainActor
func testContentView() {
/// Launch app
let app = XCUIApplication().appLaunch()
let navigationLink = app.buttons["NavigationLink"]
XCTAssertTrue(navigationLink.waitForExistence(timeout: 5))
navigationLink.tap()
app.openDetailView(with: app)
closeDetailView(with: app)
changeApiKey(with: app)
resetApp(with: app)
}

/// Test api key picker item to change api key steps:
/// 1) Open settings menu
/// 2) Open api key picker
/// 3) Set selected api key to 2
func testApiKeyPickerItem() {
let app = XCUIApplication().appLaunch()
@MainActor
private func closeDetailView(with app: XCUIApplication) {
/// Close detail view
let backButton = app.buttons.element(boundBy: .zero)
XCTAssertTrue(backButton.waitForExistence(timeout: 5))
backButton.tap()
}

@MainActor
private func changeApiKey(with app: XCUIApplication) {
/// Open settings menu
let settingsImage = app.images["SettingsImage"]
XCTAssertTrue(settingsImage.waitForExistence(timeout: 5))
settingsImage.tap()
let apiKeyPicker = app.buttons["API key selection"]
XCTAssertTrue(apiKeyPicker.waitForExistence(timeout: 5))
apiKeyPicker.tap()
let apiKeyPickerItem2 = app.buttons["ApiKeyPickerItem2"]
XCTAssertTrue(apiKeyPickerItem2.waitForExistence(timeout: 5))
apiKeyPickerItem2.tap()
/// Open api key picker
let apiKeyPickerButton = app.buttons["API key selection"]
XCTAssertTrue(apiKeyPickerButton.waitForExistence(timeout: 5))
apiKeyPickerButton.tap()
/// Change api key to `2`
let apiKeyPickerItemButton = app.buttons["ApiKeyPickerItem2"]
XCTAssertTrue(apiKeyPickerItemButton.waitForExistence(timeout: 5))
apiKeyPickerItemButton.tap()
}

/// Test reset and confirm reset steps:
/// 1) Open settings menu
/// 2) Press reset
/// 3) Check if `ResetConfirmationDialogButton` exists
func testResetButton() {
let app = XCUIApplication().appLaunch()
@MainActor
private func resetApp(with app: XCUIApplication) {
/// Open settings menu
let settingsImage = app.images["SettingsImage"]
XCTAssertTrue(settingsImage.waitForExistence(timeout: 5))
settingsImage.tap()
/// Open reset confirmation dialog
let resetButton = app.buttons["ResetButton"]
XCTAssertTrue(resetButton.waitForExistence(timeout: 5))
resetButton.tap()
/// Check if `ResetConfirmationDialogButton` exists
let resetConfirmationDialogButton = app.buttons["ResetConfirmationDialogButton"]
XCTAssertTrue(resetConfirmationDialogButton.waitForExistence(timeout: 5))
/// Close reset confirmation dialog
let cancelButton = app.buttons["Cancel"]
XCTAssertTrue(resetConfirmationDialogButton.waitForExistence(timeout: 5))
cancelButton.tap()

Check failure on line 67 in BobbysNewsUITests/Presentation/ContentViewTests.swift

View workflow job for this annotation

GitHub Actions / tests (iPad Pro 13-inch (M4))

testContentView, Failed to tap "Cancel" Button: No matches found for Elements matching predicate '"Cancel" IN identifiers' from input {(
}
}
66 changes: 26 additions & 40 deletions BobbysNewsUITests/Presentation/DetailViewTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,57 +7,43 @@

import XCTest

@MainActor
final class DetailViewTests: XCTestCase {
// MARK: - Methods

override func setUpWithError() throws {
continueAfterFailure = false
}

/// Test share link to open share view steps:
/// 1) Open detail view
/// 1) Press share
func testShareLink() {
@MainActor
func testDetailView() {
/// Launch app
let app = XCUIApplication().appLaunch()
let navigationLink = app.buttons["NavigationLink"]
if navigationLink.waitForExistence(timeout: 5) {
navigationLink.tap()
let shareLink = app.buttons["ShareLink"]
XCTAssertTrue(shareLink.waitForExistence(timeout: 5))
shareLink.tap()
}
app.openDetailView(with: app)
openCloseShareView(with: app)
openCloseWebView(with: app)
}

/// Test read button to open web view steps:
/// 1) Open detail view
/// 2) Press read
func testReadButton() {
let app = XCUIApplication().appLaunch()
let navigationLink = app.buttons["NavigationLink"]
if navigationLink.waitForExistence(timeout: 5) {
navigationLink.tap()
let readButton = app.buttons["ReadButton"]
XCTAssertTrue(readButton.waitForExistence(timeout: 5))
readButton.tap()
}
@MainActor
private func openCloseShareView(with app: XCUIApplication) {
/// Open share view
let shareLink = app.buttons["ShareLink"]
XCTAssertTrue(shareLink.waitForExistence(timeout: 5))
shareLink.tap()
/// Close share view
let closeButton = app.navigationBars["UIActivityContentView"].buttons["Schließen"]
XCTAssertTrue(closeButton.waitForExistence(timeout: 5))

Check failure on line 34 in BobbysNewsUITests/Presentation/DetailViewTests.swift

View workflow job for this annotation

GitHub Actions / tests (iPad Pro 13-inch (M4))

testDetailView, XCTAssertTrue failed
closeButton.tap()
}

/// Test close button of web view steps:
/// 1) Open detail view
/// 2) Press read
/// 3) Close web view
func testCloseButton() {
let app = XCUIApplication().appLaunch()
let navigationLink = app.buttons["NavigationLink"]
if navigationLink.waitForExistence(timeout: 5) {
navigationLink.tap()
let readButton = app.buttons["ReadButton"]
XCTAssertTrue(readButton.waitForExistence(timeout: 5))
readButton.tap()
let closeButton = app.buttons["CloseButton"]
XCTAssertTrue(closeButton.waitForExistence(timeout: 5))
closeButton.tap()
}
@MainActor
private func openCloseWebView(with app: XCUIApplication) {
/// Open web view
let readButton = app.buttons["ReadButton"]
XCTAssertTrue(readButton.waitForExistence(timeout: 5))
readButton.tap()
/// Close web view
let closeButton = app.buttons["CloseButton"]
XCTAssertTrue(closeButton.waitForExistence(timeout: 5))
closeButton.tap()
}
}

0 comments on commit 8c97eba

Please sign in to comment.