UNPKG

arbor-timetravel

Version:

Provides time traveling functionality to Arbor stores

237 lines (179 loc) 4.71 kB
import sinon from "sinon" import { expect } from "chai" import Arbor from "arbor-store" import timetravel from "../src" describe("timeline", () => { describe("#move", () => { it("moves back in time", () => { const store = timetravel(new Arbor({ user: { name: "Jon", age: 32, } })) store.timeline.on() store.state.user.name = "Bianca" store.state.user.age = 24 expect(store.state.user).to.deep.eq({ name: "Bianca", age: 24, }) store.timeline.travel.step(-1) expect(store.state.user).to.deep.eq({ name: "Bianca", age: 32, }) store.timeline.travel.step(-1) expect(store.state.user).to.deep.eq({ name: "Jon", age: 32, }) store.timeline.travel.step(-1) expect(store.state.user).to.deep.eq({ name: "Jon", age: 32, }) }) it("moves forward in time", () => { const store = timetravel(new Arbor({ user: { name: "Jon", age: 32, } })) store.timeline.on() store.state.user.name = "Bianca" store.state.user.age = 24 store.timeline.travel.step(-2) store.timeline.travel.step(1) expect(store.state.user).to.deep.eq({ name: "Bianca", age: 32, }) store.timeline.travel.step(1) expect(store.state.user).to.deep.eq({ name: "Bianca", age: 24, }) store.timeline.travel.step(1) expect(store.state.user).to.deep.eq({ name: "Bianca", age: 24, }) }) }) describe("#travelTo", () => { it("moves to an especific point in time", () => { const store = timetravel(new Arbor({ user: { name: "Jon", age: 32, } })) store.timeline.on() store.state.user.name = "Bianca" store.state.user.age = 24 store.timeline.travel.to(1) expect(store.state.user).to.deep.eq({ name: "Bianca", age: 32, }) }) it("does not move time out of its boundaries", () => { const store = timetravel(new Arbor({ user: { name: "Jon", age: 32, } })) store.timeline.on() store.state.user.name = "Bianca" store.state.user.age = 24 store.timeline.travel.to(3) expect(store.timeline.cursor).to.eq(2) store.timeline.travel.to(-1) expect(store.timeline.cursor).to.eq(0) }) }) describe("#origin", () => { it("moves to the beginning of time", () => { const store = timetravel(new Arbor({ user: { name: "Jon", age: 32, } })) store.timeline.on() store.state.user.name = "Bianca" store.state.user.age = 24 store.timeline.travel.origin() expect(store.state.user).to.deep.eq({ name: "Jon", age: 32, }) }) }) describe("#present", () => { it("moves time to the present state", () => { const store = timetravel(new Arbor({ user: { name: "Jon", age: 32, } })) store.timeline.on() store.state.user.name = "Bianca" store.state.user.age = 24 store.timeline.travel.step(-2) store.timeline.travel.present() expect(store.state.user).to.deep.eq({ name: "Bianca", age: 24, }) }) }) describe("#on", () => { it("turns timetravel on", () => { const store = timetravel(new Arbor({ user: { name: "Jon", age: 32, } })) expect(store.timeline.isOn).to.eq(false) expect(store.timeline.isOff).to.eq(true) store.timeline.on() expect(store.timeline.isOn).to.eq(true) expect(store.timeline.isOff).to.eq(false) }) }) describe("#off", () => { it("turns timetravel off", () => { const store = timetravel(new Arbor({ user: { name: "Jon", age: 32, } })) store.timeline.on() expect(store.timeline.isOn).to.eq(true) expect(store.timeline.isOff).to.eq(false) store.timeline.off() expect(store.timeline.isOn).to.eq(false) expect(store.timeline.isOff).to.eq(true) }) it("one can still travel through time when timetravel is off", () => { const store = timetravel(new Arbor({ user: { name: "Jon", age: 32, } })) store.timeline.on() store.state.user.name = "Bianca" store.timeline.off() store.timeline.travel.origin() expect(store.state.user.name).to.eq("Jon") }) }) })