Skip to content

Instantly share code, notes, and snippets.

set -e
set +u
# Avoid recursively calling this script.
if [[ $SF_MASTER_SCRIPT_RUNNING ]]
then
exit 0
fi
set -u
export SF_MASTER_SCRIPT_RUNNING=1
func testMoviesList() {
dynamicStubs.setupStub(url: "/Movies", filename: "listOfMovies", method: .GET)
app.launch()
}
[
{
"name": "Avengers: Infinity War",
"rating": "8.5",
"desc": "The Avengers and their allies must be willing to sacrifice all in an attempt to defeat the powerful Thanos before his blitz of devastation and ruin puts an end to the universe.",
},
{
"name": "Bohemian Rhapsody",
"rating": "8.4",
"desc": "A chronicle of the years leading up to Queen's legendary appearance at the Live Aid (1985) concert.",
func testShowingMovieNameAndImageName() {
dynamicStubs.setupStub(url: "/Movies", filename: "listOfMovies", method: .GET)
app.launch()
let tablesQuery = app.tables
// Assert on first movie
XCTAssertTrue(tablesQuery.cells.staticTexts["Avengers: Infinity War"].exists, "Failure: did not show the first movie name.")
XCTAssertTrue(tablesQuery.cells.staticTexts["8.5"].exists, "Failure: did not show the first movie ratting.")
func testShowingMovieNameAndImageName() {
let networkLayer = NetworkLayerMock(mockedData: [["name":"Avengers: Infinity War", "ratting": "8.5"], ["name":"Bohemian Rhapsody", "ratting": "8.4"]])
let moviesListModel = MoviesListModel(networkLayer: networkLayer)
let moviesListPresenter = MoviesListPresenter(moviesListModel: moviesListModel)
let viewControllerMock = ViewControllerMock()
moviesListPresenter.delegate = viewControllerMock
moviesListPresenter.fetchMovies()
XCTAssertTrue(viewControllerMock.didFetchMovies, "Success in fetching movies")
XCTAssertTrue(moviesListPresenter.movieName(index:0) == "Avengers: Infinity War", "First movie name is not as expected")
open func executeGETRequest(api:String, completionBlock:@escaping (Data?) -> Void) {
let environment = ProcessInfo.processInfo.environment
var baseUrl:String = ""
if let _ = environment["isUITest"] {
// Running in a UI test
baseUrl = ProcessInfo.processInfo.environment["BASEURL"]!
} else {
baseUrl = "https://api.example.com"
}
class NetworkLayerMock: Network {
private let mockedData: [[String:String]]
init(mockedData:[[String:String]]) {
self.mockedData = mockedData
}
override func executeGETRequest(api:String, completionBlock:@escaping (Data?) -> Void) {
let data = toJSONString(mockedData: self.mockedData)
func testFetchingMoviesFromNetworkLayer() {
let networkLayer = NetworkLayerMock(mockedData: [["name":"name1", "ratting": "12"], ["name":"name2", "ratting": "123"]])
let movieslistModel = MoviesListModel(networkLayer: networkLayer)
let moviesListModelDelegateMock = MoviesListModelDelegateMock()
movieslistModel.delegate = moviesListModelDelegateMock
movieslistModel.fetchMovies()
XCTAssertTrue(moviesListModelDelegateMock.movies.count == 2, "Failed to return the expected count of movies")
let firstMovie = moviesListModelDelegateMock.movies[0]
class MoviesListModelDelegateMock: NSObject, MoviesListModelDelegate {
public var movies:[Movie] = []
func didFetchMovies(success: Bool, movies: [Movie]) {
self.movies = movies;
}
}
func fetchMovies() {
self.networkLayer.executeGETRequest(api: "/Movies", completionBlock: { (data) in
if let moviesData = data {
let movies = self.parseMovies(data: moviesData)
if let delegate = self.delegate {
delegate.didFetchMovies(success: true, movies: movies)
return
}
}
if let delegate = self.delegate {