Abhishek
3 years ago
43 changed files with 380 additions and 214 deletions
@ -0,0 +1,139 @@
|
||||
// Copyright © 2015 Abhishek Banthia |
||||
|
||||
import CoreModelKit |
||||
import XCTest |
||||
|
||||
@testable import Clocker |
||||
|
||||
class SearchDataSourceTests: XCTestCase { |
||||
private var subject: SearchDataSource! |
||||
|
||||
private func setupSubject(searchText: String = "") { |
||||
let mockSearchField = NSSearchField() |
||||
mockSearchField.stringValue = searchText |
||||
subject = SearchDataSource(with: mockSearchField, location: .preferences) |
||||
} |
||||
|
||||
private func setupMockData() { |
||||
subject.searchTimezones("los") |
||||
XCTAssertTrue(subject.calculateChangesets()) |
||||
|
||||
let mockTimezone = TimezoneData() |
||||
mockTimezone.timezoneID = "PST" |
||||
mockTimezone.formattedAddress = "Los Angeles" |
||||
subject.setFilteredArrayValue([mockTimezone]) |
||||
|
||||
subject.searchTimezones("los") |
||||
XCTAssertTrue(subject.calculateChangesets()) |
||||
} |
||||
|
||||
override func tearDownWithError() throws { |
||||
subject = nil |
||||
try super.tearDownWithError() |
||||
} |
||||
|
||||
func testSearchTimezones() { |
||||
setupSubject(searchText: "") |
||||
// Test capitalized string |
||||
subject.searchTimezones("MUMBAI") |
||||
XCTAssert(subject.timezoneFilteredArray.isEmpty == false) |
||||
|
||||
// Test sentence-cased string |
||||
subject.searchTimezones("Delhi") |
||||
XCTAssert(subject.timezoneFilteredArray.isEmpty == false) |
||||
|
||||
// Test lower-cased string |
||||
subject.searchTimezones("california") |
||||
XCTAssert(subject.timezoneFilteredArray.isEmpty == false) |
||||
} |
||||
|
||||
func testCalculateChangesets() { |
||||
setupSubject(searchText: "los") |
||||
setupMockData() |
||||
|
||||
subject.cleanupFilterArray() |
||||
subject.searchTimezones("los") |
||||
XCTAssertTrue(subject.calculateChangesets()) |
||||
} |
||||
|
||||
func testRetrieveResult() throws { |
||||
setupSubject(searchText: "los") |
||||
setupMockData() |
||||
|
||||
// 0 will translate to a city search result |
||||
let result1 = subject.retrieveResult(0) |
||||
let unwrap = try XCTUnwrap(result1) |
||||
if let metadata = unwrap as? CoreModelKit.TimezoneData { |
||||
XCTAssert(metadata.timezoneID == "PST") |
||||
} |
||||
|
||||
// 1 will translate to a timezone search result |
||||
let result2 = subject.retrieveResult(1) |
||||
let unwrap2 = try XCTUnwrap(result2) |
||||
if let metadata = unwrap2 as? TimezoneMetadata { |
||||
XCTAssert(metadata.timezone.name == "America/Tijuana") |
||||
} |
||||
|
||||
// Test placeForRow |
||||
let rowType = subject.placeForRow(0) |
||||
XCTAssert(rowType == .city) |
||||
|
||||
let rowType1 = subject.placeForRow(1) |
||||
XCTAssert(rowType1 == .timezone) |
||||
|
||||
// Test count |
||||
XCTAssertEqual(subject.resultsCount(), 4) |
||||
|
||||
// Test retrieveFilteredResultFromGoogleAPI |
||||
let firstResult = try XCTUnwrap(subject.retrieveFilteredResultFromGoogleAPI(0)) |
||||
XCTAssert(firstResult.timezoneID == "PST") |
||||
// filteredArray should only have a count of 1 |
||||
XCTAssertNil(subject.retrieveFilteredResultFromGoogleAPI(1)) |
||||
} |
||||
|
||||
func testTableViewDataSourceMethods() { |
||||
let mockTableView = NSTableView(frame: CGRect.zero) |
||||
setupSubject(searchText: "los") |
||||
setupMockData() |
||||
|
||||
let resultsCount = subject.numberOfRows(in: mockTableView) |
||||
XCTAssert(resultsCount == 4) |
||||
XCTAssert(subject.tableView(mockTableView, heightOfRow: 0) == 30) |
||||
} |
||||
|
||||
func testRetrieveSelectedTimezone() { |
||||
setupSubject(searchText: "los") |
||||
setupMockData() |
||||
|
||||
let result = subject.retrieveSelectedTimezone(0) |
||||
XCTAssert(result.timezone.abbreviation == "PDT") |
||||
} |
||||
|
||||
func testRetrieveSelectedTimezoneWithEmptySearchField() { |
||||
// Setup subject with an empty search field |
||||
setupSubject(searchText: CLEmptyString) |
||||
subject.searchTimezones("los") |
||||
XCTAssertFalse(subject.calculateChangesets()) |
||||
|
||||
let mockTimezone = TimezoneData() |
||||
mockTimezone.timezoneID = "PST" |
||||
mockTimezone.formattedAddress = "Los Angeles" |
||||
subject.setFilteredArrayValue([mockTimezone]) |
||||
|
||||
subject.searchTimezones("los") |
||||
XCTAssertFalse(subject.calculateChangesets()) |
||||
|
||||
let result = subject.retrieveSelectedTimezone(1) |
||||
XCTAssert(result.timezone.abbreviation == "GMT") |
||||
} |
||||
|
||||
func testRetrieveSelectedTimezoneWithEmptySearchFieldWithoutSearchResults() { |
||||
// Setup subject with an empty search field |
||||
setupSubject(searchText: "los") |
||||
setupMockData() |
||||
subject.cleanupFilterArray() |
||||
|
||||
let result = subject.retrieveResult(0) |
||||
XCTAssertNil(result) |
||||
} |
||||
} |
Loading…
Reference in new issue