Skip to content

Commit

Permalink
Merge 6f0d541 into fa20801
Browse files Browse the repository at this point in the history
  • Loading branch information
ItamarShDev committed Mar 11, 2019
2 parents fa20801 + 6f0d541 commit 8e89661
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/create-view-model.ts
Expand Up @@ -19,6 +19,7 @@ export interface IViewModel<T> {
reset(): void
submit(): void
isDirty: boolean
changedValues: Map<any, any>
isPropertyDirty(key: string): boolean
resetProperty(key: string): void
}
Expand Down
66 changes: 66 additions & 0 deletions test/create-view-model.ts
@@ -0,0 +1,66 @@
import { createViewModel } from '../src/create-view-model';
import { extendObservable, autorun, runInAction } from "mobx";

test("create view model TS", () => {
function Todo(title: string, done: boolean, usersInterested: Array<string>) {
extendObservable(this, {
title: title,
done: done,
usersInterested: usersInterested,
get usersCount() {
return this.usersInterested.length
}
})
}

const model = new Todo("coffee", false, ["Vader", "Madonna"])
const viewModel = createViewModel(model)

let tr: string;
let vr: string;
// original rendering
const d1 = autorun(() => {
tr =
model.title +
":" +
model.done +
",interested:" +
model.usersInterested.slice().toString() +
",usersCount:" +
model.usersCount
})
// view model rendering
const d2 = autorun(() => {
vr =
viewModel.title +
":" +
viewModel.done +
",interested:" +
viewModel.usersInterested.slice().toString() +
",usersCount:" +
viewModel.usersCount
})

expect(tr).toBe("coffee:false,interested:Vader,Madonna,usersCount:2")
expect(vr).toBe("coffee:false,interested:Vader,Madonna,usersCount:2")

runInAction(() => (model.title = "tea"))
expect(tr).toBe("tea:false,interested:Vader,Madonna,usersCount:2")
expect(vr).toBe("tea:false,interested:Vader,Madonna,usersCount:2") // change reflected in view model
expect(viewModel.isDirty).toBe(false)

runInAction(() => model.usersInterested.push("Tarzan"))
expect(tr).toBe("tea:false,interested:Vader,Madonna,Tarzan,usersCount:3")
expect(vr).toBe("tea:false,interested:Vader,Madonna,Tarzan,usersCount:3") // change reflected in view model
expect(viewModel.isDirty).toBe(false)
expect(viewModel.changedValues.size).toBe(0)

runInAction(() => (viewModel.done = true))
expect(tr).toBe("tea:false,interested:Vader,Madonna,Tarzan,usersCount:3")
expect(vr).toBe("tea:true,interested:Vader,Madonna,Tarzan,usersCount:3")
expect(viewModel.isDirty).toBe(true)
expect(viewModel.isPropertyDirty("title")).toBe(false)
expect(viewModel.isPropertyDirty("done")).toBe(true)
expect(viewModel.isPropertyDirty("usersInterested")).toBe(false)
expect(viewModel.isPropertyDirty("usersCount")).toBe(false)
expect(viewModel.changedValues.has("done")).toBe(true))

0 comments on commit 8e89661

Please sign in to comment.