This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@testable import PokemonApp | |
import XCTest | |
class PokemonLegacyListViewControllerTest: XCTestCase { | |
func test_whenSuccessFetchPokemons_shouldRenderCollectionCard() { | |
// Given | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func test_whenContentTypeIsTodayTask_shouldFetchTodayTask() { | |
let dataStore = TaskViewDataStoreSpy() | |
let sut = TaskViewDefaultPresenter(dataStore: dataStore) | |
let contentType = TaskContentType.today | |
var presentableTask: PresentableTask? | |
sut.updateContentType(with: contentType) | |
sut.fetchTask(for: contentType) { tasks in | |
XCTAssertEqual(tasks.count, 1) | |
presentableTask = tasks.first! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class TaskViewDataStoreSpy: TaskViewDataStore { | |
var fetchTodayTaskCalled = false | |
var fetchFailedTaskCalled = false | |
var fetchUpcomingTaskCalled = false | |
var fetchFinishedTaskCalled = false | |
var finishTaskCalled = false | |
var todayTaskCompletion: (([TaskModel]) -> Void)? | |
var failedTaskCompletion: (([TaskModel]) -> Void)? |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol UIFactory { | |
func createTaskViewController(navigationDelegate: TaskViewControllerNavigationDelegate) -> UIViewController | |
func createAddTaskViewController(didAddNewTask: @escaping () -> Void) -> UIViewController | |
} | |
final class ViewControllerFactory: UIFactory { | |
private let coreDataStack: CoreDataStack | |
init(coreDataStack: CoreDataStack) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import CoreData | |
extension CoreDataStack: TaskViewDataStore { | |
func fetchTodayTask(completion: @escaping ([TaskModel]) -> Void) { | |
let request = Task.fetchRequest() | |
let sortDescriptor = NSSortDescriptor(key: #keyPath(Task.deadline), ascending: true) | |
let startDate = Date() | |
let endDate = Calendar.current.date( |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol TaskViewPresenter { | |
var contentType: TaskContentType { get } | |
func fetchTask(for contentType: TaskContentType, completion: @escaping ([PresentableTask]) -> Void) | |
func updateContentType(with contentType: TaskContentType) | |
} | |
final class TaskViewDefaultPresenter: TaskViewPresenter { | |
private let dataStore: TaskViewDataStore |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol TaskViewDataStore { | |
func fetchTodayTask(completion: @escaping ([TaskModel]) -> Void) | |
func fetchFailedTask(completion: @escaping ([TaskModel]) -> Void) | |
func fetchUpcomingTask(completion: @escaping ([TaskModel]) -> Void) | |
func fetchFinishedTask(completion: @escaping ([TaskModel]) -> Void) | |
func finishTask(_ task: TaskModel) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension Task: TaskModelConvertible { | |
func asTaskModel() -> TaskModel { | |
TaskModel( | |
title: title ?? "", | |
type: type ?? "", | |
deadline: deadline ?? Date(), | |
color: color, | |
isCompleted: isCompleted | |
) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol TaskModelConvertible { | |
func asTaskModel() -> TaskModel | |
} | |
struct TaskModel { | |
let title: String | |
let type: String | |
let deadline: Date | |
let color: NSObject? | |
let isCompleted: Bool |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import CoreData | |
@objc(Task) | |
public class Task: NSManagedObject {} | |
extension Task { | |
@nonobjc public class func fetchRequest() -> NSFetchRequest<Task> { | |
return NSFetchRequest<Task>(entityName: "Task") | |
} |