Skip to content

Commit

Permalink
mst middlewares uses jest, moved some packages to the root
Browse files Browse the repository at this point in the history
  • Loading branch information
xaviergonz committed Sep 8, 2018
1 parent 102e2bd commit dad7ba1
Show file tree
Hide file tree
Showing 16 changed files with 392 additions and 1,339 deletions.
4 changes: 3 additions & 1 deletion package.json
Expand Up @@ -25,6 +25,8 @@
"husky": "^0.14.0",
"lerna": "^3.3.0",
"lint-staged": "^7.0.0",
"prettier": "^1.13.6"
"prettier": "^1.13.6",
"tslint": "^5.0.0",
"tslint-config-prettier": "^1.14.0"
}
}
4 changes: 0 additions & 4 deletions packages/mobx-state-tree/package.json
Expand Up @@ -36,7 +36,6 @@
"devDependencies": {
"@types/jest": "^23.0.0",
"@types/node": "^10.0.0",
"@types/sinon": "^5.0.1",
"concat": "^1.0.3",
"concurrently": "^3.6.0",
"coveralls": "^3.0.0",
Expand All @@ -52,12 +51,9 @@
"rollup-plugin-replace": "^2.0.0",
"rollup-plugin-uglify": "^4.0.0",
"shx": "^0.3.2",
"sinon": "^6.0.0",
"ts-jest": "^23.0.1",
"ts-node": "^7.0.0",
"tslib": "^1.7.1",
"tslint": "^5.0.0",
"tslint-config-prettier": "^1.14.0",
"typescript": "^2.9.2"
},
"peerDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/mst-middlewares/.gitignore
Expand Up @@ -2,7 +2,7 @@ node_modules
*.log
lib
dist
test-lib/**/*.js
/test-lib/
coverage
.nyc_output
.idea
Expand Down
102 changes: 102 additions & 0 deletions packages/mst-middlewares/__tests__/TimeTraveller.test.ts
@@ -0,0 +1,102 @@
import { TimeTraveller } from "../src"
import { types, clone } from "mobx-state-tree"

const TestModel = types
.model({
x: 1
})
.actions(self => ({
inc() {
self.x += 1
}
}))

test("it can time travel", () => {
const m = TestModel.create()
const tt = TimeTraveller.create({}, { targetStore: m })

expect(tt.canUndo).toBe(false)
expect(tt.canRedo).toBe(false)
expect(m.x).toBe(1)

m.inc()
expect(tt.canUndo).toBe(true)
expect(tt.canRedo).toBe(false)
expect(m.x).toBe(2)

m.inc()
expect(tt.canUndo).toBe(true)
expect(tt.canRedo).toBe(false)
expect(m.x).toBe(3)

tt.undo()
expect(m.x).toBe(2)
expect(tt.canUndo).toBe(true)
expect(tt.canRedo).toBe(true)

tt.undo()
expect(m.x).toBe(1)
expect(tt.canUndo).toBe(false)
expect(tt.canRedo).toBe(true)

tt.redo()
expect(m.x).toBe(2)
expect(tt.canUndo).toBe(true)
expect(tt.canRedo).toBe(true)

// resets 'future'
m.inc()
expect(m.x).toBe(3)
expect(tt.canUndo).toBe(true)
expect(tt.canRedo).toBe(false)
})

test("it can time travel same store and persist state", () => {
const W = types.model({
model: types.optional(TestModel, {}),
traveler: types.optional(TimeTraveller, { targetPath: "../model" })
})
const w = W.create()
const m = w.model
const tt = w.traveler

expect(tt.canUndo).toBe(false)
expect(tt.canRedo).toBe(false)
expect(m.x).toBe(1)

m.inc()
expect(tt.canUndo).toBe(true)
expect(tt.canRedo).toBe(false)
expect(m.x).toBe(2)

m.inc()
expect(tt.canUndo).toBe(true)
expect(tt.canRedo).toBe(false)
expect(m.x).toBe(3)

tt.undo()
expect(m.x).toBe(2)
expect(tt.canUndo).toBe(true)
expect(tt.canRedo).toBe(true)

// Clone of the store should inherit the same state!
const w2 = clone(w)
const m2 = w2.model
const tt2 = w2.traveler

tt2.undo()
expect(m2.x).toBe(1)
expect(tt2.canUndo).toBe(false)
expect(tt2.canRedo).toBe(true)

tt2.redo()
expect(m2.x).toBe(2)
expect(tt2.canUndo).toBe(true)
expect(tt2.canRedo).toBe(true)

// resets 'future'
m2.inc()
expect(m2.x).toBe(3)
expect(tt2.canUndo).toBe(true)
expect(tt2.canRedo).toBe(false)
})

0 comments on commit dad7ba1

Please sign in to comment.