Skip to content

Commit

Permalink
Add tests to AirportListViewModel and remove UITest target
Browse files Browse the repository at this point in the history
  • Loading branch information
Bruno Muniz Azevedo Filho committed Oct 9, 2023
1 parent 38b5251 commit fe0c6ec
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 213 deletions.
125 changes: 4 additions & 121 deletions Airports.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@
32AB3B522ACA7C3E007C7528 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32AB3B512ACA7C3E007C7528 /* ContentView.swift */; };
32AB3B542ACA7C3E007C7528 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32AB3B532ACA7C3E007C7528 /* Assets.xcassets */; };
32AB3B572ACA7C3E007C7528 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32AB3B562ACA7C3E007C7528 /* Preview Assets.xcassets */; };
32AB3B612ACA7C3F007C7528 /* AirportsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32AB3B602ACA7C3F007C7528 /* AirportsTests.swift */; };
32AB3B6B2ACA7C3F007C7528 /* AirportsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32AB3B6A2ACA7C3F007C7528 /* AirportsUITests.swift */; };
32AB3B6D2ACA7C3F007C7528 /* AirportsUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32AB3B6C2ACA7C3F007C7528 /* AirportsUITestsLaunchTests.swift */; };
32AB3B612ACA7C3F007C7528 /* AirportListViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32AB3B602ACA7C3F007C7528 /* AirportListViewModelTests.swift */; };
32CBD91C2ACBA6D6002E379F /* mock_airports.json in Resources */ = {isa = PBXBuildFile; fileRef = 32CBD91B2ACBA6D6002E379F /* mock_airports.json */; };
32F228942ACBCBBF00E32BEF /* countries.json in Resources */ = {isa = PBXBuildFile; fileRef = 32F228932ACBCBBF00E32BEF /* countries.json */; };
32F228972ACBCF2D00E32BEF /* Country.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F228962ACBCF2D00E32BEF /* Country.swift */; };
Expand All @@ -35,13 +33,6 @@
remoteGlobalIDString = 32AB3B4B2ACA7C3E007C7528;
remoteInfo = Airports;
};
32AB3B672ACA7C3F007C7528 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 32AB3B442ACA7C3E007C7528 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 32AB3B4B2ACA7C3E007C7528;
remoteInfo = Airports;
};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
Expand All @@ -55,10 +46,7 @@
32AB3B532ACA7C3E007C7528 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
32AB3B562ACA7C3E007C7528 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
32AB3B5C2ACA7C3F007C7528 /* AirportsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AirportsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
32AB3B602ACA7C3F007C7528 /* AirportsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirportsTests.swift; sourceTree = "<group>"; };
32AB3B662ACA7C3F007C7528 /* AirportsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AirportsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
32AB3B6A2ACA7C3F007C7528 /* AirportsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirportsUITests.swift; sourceTree = "<group>"; };
32AB3B6C2ACA7C3F007C7528 /* AirportsUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirportsUITestsLaunchTests.swift; sourceTree = "<group>"; };
32AB3B602ACA7C3F007C7528 /* AirportListViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirportListViewModelTests.swift; sourceTree = "<group>"; };
32CBD91B2ACBA6D6002E379F /* mock_airports.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = mock_airports.json; sourceTree = "<group>"; };
32F228932ACBCBBF00E32BEF /* countries.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = countries.json; sourceTree = "<group>"; };
32F228962ACBCF2D00E32BEF /* Country.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Country.swift; sourceTree = "<group>"; };
Expand All @@ -83,13 +71,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
32AB3B632ACA7C3F007C7528 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
Expand Down Expand Up @@ -117,7 +98,6 @@
children = (
32AB3B4E2ACA7C3E007C7528 /* Airports */,
32AB3B5F2ACA7C3F007C7528 /* AirportsTests */,
32AB3B692ACA7C3F007C7528 /* AirportsUITests */,
32AB3B4D2ACA7C3E007C7528 /* Products */,
);
sourceTree = "<group>";
Expand All @@ -127,7 +107,6 @@
children = (
32AB3B4C2ACA7C3E007C7528 /* Airports.app */,
32AB3B5C2ACA7C3F007C7528 /* AirportsTests.xctest */,
32AB3B662ACA7C3F007C7528 /* AirportsUITests.xctest */,
);
name = Products;
sourceTree = "<group>";
Expand Down Expand Up @@ -159,21 +138,12 @@
32AB3B5F2ACA7C3F007C7528 /* AirportsTests */ = {
isa = PBXGroup;
children = (
32AB3B602ACA7C3F007C7528 /* AirportsTests.swift */,
32AB3B602ACA7C3F007C7528 /* AirportListViewModelTests.swift */,
32CBD91B2ACBA6D6002E379F /* mock_airports.json */,
);
path = AirportsTests;
sourceTree = "<group>";
};
32AB3B692ACA7C3F007C7528 /* AirportsUITests */ = {
isa = PBXGroup;
children = (
32AB3B6A2ACA7C3F007C7528 /* AirportsUITests.swift */,
32AB3B6C2ACA7C3F007C7528 /* AirportsUITestsLaunchTests.swift */,
);
path = AirportsUITests;
sourceTree = "<group>";
};
32F228952ACBCF2100E32BEF /* Models */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -224,24 +194,6 @@
productReference = 32AB3B5C2ACA7C3F007C7528 /* AirportsTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
32AB3B652ACA7C3F007C7528 /* AirportsUITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 32AB3B762ACA7C3F007C7528 /* Build configuration list for PBXNativeTarget "AirportsUITests" */;
buildPhases = (
32AB3B622ACA7C3F007C7528 /* Sources */,
32AB3B632ACA7C3F007C7528 /* Frameworks */,
32AB3B642ACA7C3F007C7528 /* Resources */,
);
buildRules = (
);
dependencies = (
32AB3B682ACA7C3F007C7528 /* PBXTargetDependency */,
);
name = AirportsUITests;
productName = AirportsUITests;
productReference = 32AB3B662ACA7C3F007C7528 /* AirportsUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
Expand All @@ -259,10 +211,6 @@
CreatedOnToolsVersion = 15.0;
TestTargetID = 32AB3B4B2ACA7C3E007C7528;
};
32AB3B652ACA7C3F007C7528 = {
CreatedOnToolsVersion = 15.0;
TestTargetID = 32AB3B4B2ACA7C3E007C7528;
};
};
};
buildConfigurationList = 32AB3B472ACA7C3E007C7528 /* Build configuration list for PBXProject "Airports" */;
Expand All @@ -283,7 +231,6 @@
targets = (
32AB3B4B2ACA7C3E007C7528 /* Airports */,
32AB3B5B2ACA7C3F007C7528 /* AirportsTests */,
32AB3B652ACA7C3F007C7528 /* AirportsUITests */,
);
};
/* End PBXProject section */
Expand All @@ -309,13 +256,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
32AB3B642ACA7C3F007C7528 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
Expand All @@ -338,16 +278,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
32AB3B612ACA7C3F007C7528 /* AirportsTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
32AB3B622ACA7C3F007C7528 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
32AB3B6D2ACA7C3F007C7528 /* AirportsUITestsLaunchTests.swift in Sources */,
32AB3B6B2ACA7C3F007C7528 /* AirportsUITests.swift in Sources */,
32AB3B612ACA7C3F007C7528 /* AirportListViewModelTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand All @@ -359,11 +290,6 @@
target = 32AB3B4B2ACA7C3E007C7528 /* Airports */;
targetProxy = 32AB3B5D2ACA7C3F007C7528 /* PBXContainerItemProxy */;
};
32AB3B682ACA7C3F007C7528 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 32AB3B4B2ACA7C3E007C7528 /* Airports */;
targetProxy = 32AB3B672ACA7C3F007C7528 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */

/* Begin XCBuildConfiguration section */
Expand Down Expand Up @@ -580,40 +506,6 @@
};
name = Release;
};
32AB3B772ACA7C3F007C7528 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = bmz.AirportsUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_TARGET_NAME = Airports;
};
name = Debug;
};
32AB3B782ACA7C3F007C7528 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = bmz.AirportsUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_TARGET_NAME = Airports;
};
name = Release;
};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
Expand Down Expand Up @@ -644,15 +536,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
32AB3B762ACA7C3F007C7528 /* Build configuration list for PBXNativeTarget "AirportsUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
32AB3B772ACA7C3F007C7528 /* Debug */,
32AB3B782ACA7C3F007C7528 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */

/* Begin XCRemoteSwiftPackageReference section */
Expand Down
74 changes: 74 additions & 0 deletions AirportsTests/AirportListViewModelTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import XCTest
@testable import Airports

final class AirportListViewModelTests: XCTestCase {
var sut: AirportListViewModel!

override func tearDown() {
sut = nil
}

override func setUpWithError() throws {
sut = AirportListViewModel()
}

func testLoadAirportsWithData() {
sut.loadAirports(from: Airport.mockJSON.data(using: .utf8)!)
XCTAssertEqual(sut.items.count, 1)

let sectionItem = sut.items[0]
XCTAssertEqual(sectionItem.airports.count, 1)

let airport = sectionItem.airports[0]
XCTAssertEqual(airport.id, "CTF")
XCTAssertEqual(airport.isOpen, true)
XCTAssertEqual(airport.lat, 14.766667)
XCTAssertEqual(airport.continent, "NA")
XCTAssertEqual(airport.lon, -91.916664)
XCTAssertEqual(airport.type, "airport")
XCTAssertEqual(airport.name, "Coatepeque Airport")
XCTAssertEqual(airport.country, Country(iso: "GT", name: "Guatemala"))
}

func testLoadAirportsWithEmptyData() {
let emptyData = "[]".data(using: .utf8)!
sut.loadAirports(from: emptyData)

XCTAssertEqual(sut.items.count, 0)
}

func testGetDataFromJSON() {
let data = try? sut.getDataFromJSON(bundle: MockBundle(
mockFileName: "mock_airports"
))
XCTAssertNotNil(data)
}

func testGetDataFromJSONFileNotFound() {
let bundle = MockBundle(mockFileName: "anything_else")

XCTAssertThrowsError(try sut.getDataFromJSON(bundle: bundle)) { error in
XCTAssertEqual(error as? AirportListViewModelError, .fileNotFound)
}
}
}

private class MockBundle: Bundle {
let mockFileName: String

init(mockFileName: String) {
self.mockFileName = mockFileName
super.init()
}

override func url(forResource name: String?, withExtension ext: String?) -> URL? {
Bundle(for: AirportListViewModelTests.self).url(
forResource: mockFileName,
withExtension: "json"
)
}
}

private extension Airport {
static let mockJSON = "[{\"iata\": \"CTF\", \"lon\": -91.916664, \"is_open\": true, \"name\": \"Coatepeque Airport\", \"continent\": \"NA\", \"type\": \"airport\", \"lat\": 14.766667, \"country\": {\"iso\": \"GT\", \"name\": \"Guatemala\"}}]"
}
34 changes: 0 additions & 34 deletions AirportsTests/AirportsTests.swift

This file was deleted.

34 changes: 0 additions & 34 deletions AirportsUITests/AirportsUITests.swift

This file was deleted.

Loading

0 comments on commit fe0c6ec

Please sign in to comment.