Skip to content

Instantly share code, notes, and snippets.

View jimmy0251's full-sized avatar

Jimmy Sanghani jimmy0251

View GitHub Profile
func testPopRoute_OnSaveClick() {
XCTAssertEqual(AppRoute.Add, uipilot.stack.last)
viewModel.onSave()
XCTAssertEqual(AppRoute.List, uipilot.stack.last)
}
func testAddTask_OnSaveClick() {
viewModel.title = "I'm new task"
viewModel.onSave()
let task = taskRepository.getTasks().last!
XCTAssertEqual("I'm new task", task.title)
XCTAssertFalse(task.isCompleted)
}
import XCTest
import UIPilot
@testable import TodoApp
class AddTaskVMTest: XCTestCase {
var viewModel: AddTaskVM!
var taskRepository: TaskRepository!
var uipilot: UIPilot<AppRoute>!
class AddTaskVM: ObservableObject {
private let taskRepository: TaskRepository
private let pilot: UIPilot<AppRoute>
@Published var title: String = ""
init() {
taskRepository = Injector.assembler.resolver.resolve(TaskRepository.self)!
pilot = Injector.assembler.resolver.resolve(UIPilot<AppRoute>.self)!
struct AddTaskView: View {
@StateObject var viewModel = AddTaskVM()
var body: some View {
VStack {
TextField("What's on your mind?", text: $viewModel.title)
.padding()
HStack {
Button("Save", action: {
struct ContentView: View {
...
var body: some View {
UIPilotHost(pilot) { route in
switch route {
case .List: return AnyView(TaskListView())
case .Add: return AnyView(AddTaskView())
}
}
}
class TaskListVM: ObservableObject {
private let taskRepository: TaskRepository
private let pilot: UIPilot<AppRoute>
...
init() {
taskRepository = Injector.assembler.resolver.resolve(TaskRepository.self)!
pilot = Injector.assembler.resolver.resolve(UIPilot<AppRoute>.self)!
}
struct TaskListView: View {
@StateObject var viewModel = TaskListVM()
var body: some View {
...
.navigationTitle("Tasks")
.navigationBarItems(trailing: Button("Add", action: {
self.viewModel.onAdd()
}))
struct ContentView: View {
private let pilot: UIPilot<AppRoute>
init() {
pilot = Injector.assembler.resolver.resolve(UIPilot<AppRoute>.self)!
}
...
}
@main
struct TodoAppApp: App {
init() {
Injector.initGraph([DataAssembly(), UIAssembly()])
}
...
}