@vived/host 4.0.3 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/cjs/StateMachine/Adapters/hostStateAdapter.js +24 -0
  2. package/dist/cjs/StateMachine/Adapters/hostStateAdapter.js.map +1 -0
  3. package/dist/cjs/StateMachine/Adapters/hostStateAdapter.test.js +49 -0
  4. package/dist/cjs/StateMachine/Adapters/hostStateAdapter.test.js.map +1 -0
  5. package/dist/cjs/StateMachine/Adapters/index.js +1 -0
  6. package/dist/cjs/StateMachine/Adapters/index.js.map +1 -1
  7. package/dist/cjs/StateMachine/Controllers/editStateName.js +13 -0
  8. package/dist/cjs/StateMachine/Controllers/editStateName.js.map +1 -0
  9. package/dist/cjs/StateMachine/Controllers/editStateName.test.js +49 -0
  10. package/dist/cjs/StateMachine/Controllers/editStateName.test.js.map +1 -0
  11. package/dist/cjs/StateMachine/Controllers/index.js +1 -0
  12. package/dist/cjs/StateMachine/Controllers/index.js.map +1 -1
  13. package/dist/cjs/StateMachine/Entities/HostStateMachine.js +67 -24
  14. package/dist/cjs/StateMachine/Entities/HostStateMachine.js.map +1 -1
  15. package/dist/cjs/StateMachine/Entities/HostStateMachine.test.js +174 -0
  16. package/dist/cjs/StateMachine/Entities/HostStateMachine.test.js.map +1 -1
  17. package/dist/cjs/StateMachine/Mocks/MockEditStateNameUC.js +12 -0
  18. package/dist/cjs/StateMachine/Mocks/MockEditStateNameUC.js.map +1 -0
  19. package/dist/cjs/StateMachine/Mocks/MockHostStatePM.js +23 -0
  20. package/dist/cjs/StateMachine/Mocks/MockHostStatePM.js.map +1 -0
  21. package/dist/cjs/StateMachine/PMs/HostStateMachinePM.js +21 -15
  22. package/dist/cjs/StateMachine/PMs/HostStateMachinePM.js.map +1 -1
  23. package/dist/cjs/StateMachine/PMs/HostStateMachinePM.test.js +65 -56
  24. package/dist/cjs/StateMachine/PMs/HostStateMachinePM.test.js.map +1 -1
  25. package/dist/cjs/StateMachine/PMs/HostStatePM.js +136 -0
  26. package/dist/cjs/StateMachine/PMs/HostStatePM.js.map +1 -0
  27. package/dist/cjs/StateMachine/PMs/HostStatePM.test.js +405 -0
  28. package/dist/cjs/StateMachine/PMs/HostStatePM.test.js.map +1 -0
  29. package/dist/cjs/StateMachine/PMs/index.js +1 -0
  30. package/dist/cjs/StateMachine/PMs/index.js.map +1 -1
  31. package/dist/cjs/StateMachine/UCs/EditStateNameUC.js +35 -0
  32. package/dist/cjs/StateMachine/UCs/EditStateNameUC.js.map +1 -0
  33. package/dist/cjs/StateMachine/UCs/EditStateNameUC.test.js +58 -0
  34. package/dist/cjs/StateMachine/UCs/EditStateNameUC.test.js.map +1 -0
  35. package/dist/cjs/StateMachine/UCs/index.js +1 -0
  36. package/dist/cjs/StateMachine/UCs/index.js.map +1 -1
  37. package/dist/esm/StateMachine/Adapters/hostStateAdapter.js +21 -0
  38. package/dist/esm/StateMachine/Adapters/hostStateAdapter.js.map +1 -0
  39. package/dist/esm/StateMachine/Adapters/hostStateAdapter.test.js +47 -0
  40. package/dist/esm/StateMachine/Adapters/hostStateAdapter.test.js.map +1 -0
  41. package/dist/esm/StateMachine/Adapters/index.js +1 -0
  42. package/dist/esm/StateMachine/Adapters/index.js.map +1 -1
  43. package/dist/esm/StateMachine/Controllers/editStateName.js +10 -0
  44. package/dist/esm/StateMachine/Controllers/editStateName.js.map +1 -0
  45. package/dist/esm/StateMachine/Controllers/editStateName.test.js +47 -0
  46. package/dist/esm/StateMachine/Controllers/editStateName.test.js.map +1 -0
  47. package/dist/esm/StateMachine/Controllers/index.js +1 -0
  48. package/dist/esm/StateMachine/Controllers/index.js.map +1 -1
  49. package/dist/esm/StateMachine/Entities/HostStateMachine.js +67 -24
  50. package/dist/esm/StateMachine/Entities/HostStateMachine.js.map +1 -1
  51. package/dist/esm/StateMachine/Entities/HostStateMachine.test.js +174 -0
  52. package/dist/esm/StateMachine/Entities/HostStateMachine.test.js.map +1 -1
  53. package/dist/esm/StateMachine/Mocks/MockEditStateNameUC.js +8 -0
  54. package/dist/esm/StateMachine/Mocks/MockEditStateNameUC.js.map +1 -0
  55. package/dist/esm/StateMachine/Mocks/MockHostStatePM.js +18 -0
  56. package/dist/esm/StateMachine/Mocks/MockHostStatePM.js.map +1 -0
  57. package/dist/esm/StateMachine/PMs/HostStateMachinePM.js +21 -15
  58. package/dist/esm/StateMachine/PMs/HostStateMachinePM.js.map +1 -1
  59. package/dist/esm/StateMachine/PMs/HostStateMachinePM.test.js +65 -56
  60. package/dist/esm/StateMachine/PMs/HostStateMachinePM.test.js.map +1 -1
  61. package/dist/esm/StateMachine/PMs/HostStatePM.js +131 -0
  62. package/dist/esm/StateMachine/PMs/HostStatePM.js.map +1 -0
  63. package/dist/esm/StateMachine/PMs/HostStatePM.test.js +403 -0
  64. package/dist/esm/StateMachine/PMs/HostStatePM.test.js.map +1 -0
  65. package/dist/esm/StateMachine/PMs/index.js +1 -0
  66. package/dist/esm/StateMachine/PMs/index.js.map +1 -1
  67. package/dist/esm/StateMachine/UCs/EditStateNameUC.js +30 -0
  68. package/dist/esm/StateMachine/UCs/EditStateNameUC.js.map +1 -0
  69. package/dist/esm/StateMachine/UCs/EditStateNameUC.test.js +56 -0
  70. package/dist/esm/StateMachine/UCs/EditStateNameUC.test.js.map +1 -0
  71. package/dist/esm/StateMachine/UCs/index.js +1 -0
  72. package/dist/esm/StateMachine/UCs/index.js.map +1 -1
  73. package/dist/types/StateMachine/Adapters/hostStateAdapter.d.ts +4 -0
  74. package/dist/types/StateMachine/Adapters/hostStateAdapter.d.ts.map +1 -0
  75. package/dist/types/StateMachine/Adapters/hostStateAdapter.test.d.ts +2 -0
  76. package/dist/types/StateMachine/Adapters/hostStateAdapter.test.d.ts.map +1 -0
  77. package/dist/types/StateMachine/Adapters/index.d.ts +1 -0
  78. package/dist/types/StateMachine/Adapters/index.d.ts.map +1 -1
  79. package/dist/types/StateMachine/Controllers/editStateName.d.ts +3 -0
  80. package/dist/types/StateMachine/Controllers/editStateName.d.ts.map +1 -0
  81. package/dist/types/StateMachine/Controllers/editStateName.test.d.ts +2 -0
  82. package/dist/types/StateMachine/Controllers/editStateName.test.d.ts.map +1 -0
  83. package/dist/types/StateMachine/Controllers/index.d.ts +1 -0
  84. package/dist/types/StateMachine/Controllers/index.d.ts.map +1 -1
  85. package/dist/types/StateMachine/Entities/HostStateMachine.d.ts +6 -0
  86. package/dist/types/StateMachine/Entities/HostStateMachine.d.ts.map +1 -1
  87. package/dist/types/StateMachine/Mocks/MockEditStateNameUC.d.ts +7 -0
  88. package/dist/types/StateMachine/Mocks/MockEditStateNameUC.d.ts.map +1 -0
  89. package/dist/types/StateMachine/Mocks/MockHostStatePM.d.ts +9 -0
  90. package/dist/types/StateMachine/Mocks/MockHostStatePM.d.ts.map +1 -0
  91. package/dist/types/StateMachine/PMs/HostStateMachinePM.d.ts +3 -4
  92. package/dist/types/StateMachine/PMs/HostStateMachinePM.d.ts.map +1 -1
  93. package/dist/types/StateMachine/PMs/HostStatePM.d.ts +18 -0
  94. package/dist/types/StateMachine/PMs/HostStatePM.d.ts.map +1 -0
  95. package/dist/types/StateMachine/PMs/HostStatePM.test.d.ts +2 -0
  96. package/dist/types/StateMachine/PMs/HostStatePM.test.d.ts.map +1 -0
  97. package/dist/types/StateMachine/PMs/index.d.ts +1 -0
  98. package/dist/types/StateMachine/PMs/index.d.ts.map +1 -1
  99. package/dist/types/StateMachine/UCs/EditStateNameUC.d.ts +9 -0
  100. package/dist/types/StateMachine/UCs/EditStateNameUC.d.ts.map +1 -0
  101. package/dist/types/StateMachine/UCs/EditStateNameUC.test.d.ts +2 -0
  102. package/dist/types/StateMachine/UCs/EditStateNameUC.test.d.ts.map +1 -0
  103. package/dist/types/StateMachine/UCs/index.d.ts +1 -0
  104. package/dist/types/StateMachine/UCs/index.d.ts.map +1 -1
  105. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"HostStateMachinePM.test.js","sourceRoot":"","sources":["../../../../src/StateMachine/PMs/HostStateMachinePM.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { makeHostStateEntity } from \"../Entities\";\r\nimport { makeHostStateMachine } from \"../Entities/HostStateMachine\";\r\nimport {\r\n HostStateMachinePM,\r\n HostStateMachineVM,\r\n makeHostStateMachinePM\r\n} from \"./HostStateMachinePM\";\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\r\n\r\n const ao = appObjects.getOrCreate(\"AO\");\r\n const stateMachine = makeHostStateMachine(ao);\r\n\r\n const state1 = makeHostStateEntity(appObjects.getOrCreate(\"state1\"));\r\n state1.name = \"State 1\";\r\n\r\n const state2 = makeHostStateEntity(appObjects.getOrCreate(\"state2\"));\r\n state2.name = \"State 2\";\r\n\r\n const state3 = makeHostStateEntity(appObjects.getOrCreate(\"state3\"));\r\n state3.name = \"State 3\";\r\n\r\n stateMachine.setStates([state1, state2, state3]);\r\n stateMachine.setActiveStateByID(\"state2\");\r\n\r\n const pm = makeHostStateMachinePM(ao);\r\n\r\n return { stateMachine, pm, registerSingletonSpy, appObjects };\r\n}\r\n\r\ndescribe(\"Host State Machine Presentation Manager\", () => {\r\n it(\"Initializes the last vm\", () => {\r\n const { pm } = makeTestRig();\r\n expect(pm.lastVM).not.toBeUndefined();\r\n });\r\n\r\n it(\"Registers as the singleton\", () => {\r\n const { registerSingletonSpy, pm } = makeTestRig();\r\n expect(registerSingletonSpy).toBeCalledWith(pm);\r\n });\r\n\r\n it(\"Initializes the VM\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n expect(pm).not.toBeUndefined();\r\n });\r\n\r\n it(\"Updates if the entity changes\", () => {\r\n const { pm, stateMachine } = makeTestRig();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n const vm = pm.lastVM as HostStateMachineVM;\r\n expect(vm.activeSlideID).toEqual(\"state1\");\r\n expect(vm.previousSlideID).toBeUndefined();\r\n expect(vm.nextSlideID).toEqual(\"state2\");\r\n expect(vm.states).toHaveLength(3);\r\n });\r\n\r\n it(\"Checks for equal vms\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"State 2\" }\r\n ]\r\n };\r\n\r\n const vm2 = { ...vm1 };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(true);\r\n });\r\n\r\n it(\"Checks for a change in the active slide\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"State 2\" }\r\n ]\r\n };\r\n\r\n const vm2 = { ...vm1, activeSlideID: \"CHANGED\" };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for a change in the next slide\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"State 2\" }\r\n ]\r\n };\r\n\r\n const vm2 = { ...vm1, nextSlideID: \"CHANGED\" };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for a change in the previous slide\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"State 2\" }\r\n ]\r\n };\r\n\r\n const vm2 = { ...vm1, previousSlideID: \"CHANGED\" };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for state to be added\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"State 2\" }\r\n ]\r\n };\r\n\r\n const vm2 = {\r\n ...vm1,\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"State 2\" },\r\n { id: \"state3\", name: \"State 3\" }\r\n ]\r\n };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for state to be removed\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"State 2\" }\r\n ]\r\n };\r\n\r\n const vm2 = { ...vm1, states: [{ id: \"state1\", name: \"State 1\" }] };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for state to be renamed\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"State 2\" }\r\n ]\r\n };\r\n\r\n const vm2 = {\r\n ...vm1,\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"RENAMED\" }\r\n ]\r\n };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for state to have a different it\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"state2\", name: \"State 2\" }\r\n ]\r\n };\r\n\r\n const vm2 = {\r\n ...vm1,\r\n states: [\r\n { id: \"state1\", name: \"State 1\" },\r\n { id: \"CHANGED\", name: \"State 2\" }\r\n ]\r\n };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"HostStateMachinePM.test.js","sourceRoot":"","sources":["../../../../src/StateMachine/PMs/HostStateMachinePM.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { makeHostStateEntity } from \"../Entities\";\r\nimport { makeHostStateMachine } from \"../Entities/HostStateMachine\";\r\nimport {\r\n HostStateMachinePM,\r\n HostStateMachineVM,\r\n makeHostStateMachinePM\r\n} from \"./HostStateMachinePM\";\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\r\n\r\n const ao = appObjects.getOrCreate(\"AO\");\r\n const stateMachine = makeHostStateMachine(ao);\r\n\r\n const state1 = makeHostStateEntity(appObjects.getOrCreate(\"state1\"));\r\n state1.name = \"State 1\";\r\n\r\n const state2 = makeHostStateEntity(appObjects.getOrCreate(\"state2\"));\r\n state2.name = \"State 2\";\r\n\r\n const state3 = makeHostStateEntity(appObjects.getOrCreate(\"state3\"));\r\n state3.name = \"State 3\";\r\n\r\n stateMachine.setStates([state1, state2, state3]);\r\n stateMachine.setActiveStateByID(\"state2\");\r\n\r\n const pm = makeHostStateMachinePM(ao);\r\n\r\n return { stateMachine, pm, registerSingletonSpy, appObjects };\r\n}\r\n\r\ndescribe(\"Host State Machine Presentation Manager\", () => {\r\n it(\"Initializes the last vm\", () => {\r\n const { pm } = makeTestRig();\r\n expect(pm.lastVM).not.toBeUndefined();\r\n });\r\n\r\n it(\"Registers as the singleton\", () => {\r\n const { registerSingletonSpy, pm } = makeTestRig();\r\n expect(registerSingletonSpy).toBeCalledWith(pm);\r\n });\r\n\r\n it(\"Initializes the VM\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n expect(pm).not.toBeUndefined();\r\n });\r\n\r\n it(\"Updates if the entity changes\", () => {\r\n const { pm, stateMachine } = makeTestRig();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n const vm = pm.lastVM as HostStateMachineVM;\r\n expect(vm.activeSlideID).toEqual(\"state1\");\r\n expect(vm.activeSlideName).toEqual(\"State 1\");\r\n expect(vm.previousSlideID).toBeUndefined();\r\n expect(vm.nextSlideID).toEqual(\"state2\");\r\n expect(vm.states).toHaveLength(3);\r\n expect(vm.states).toEqual([\"state1\", \"state2\", \"state3\"]);\r\n expect(vm.isSingleSlide).toEqual(false);\r\n });\r\n\r\n it(\"Checks for equal vms\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n activeSlideName: \"Active Slide\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\"state1\", \"state2\"],\r\n isSingleSlide: false\r\n };\r\n\r\n const vm2 = { ...vm1 };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(true);\r\n });\r\n\r\n it(\"Sets isSingleSlide to true when there is only one state\", () => {\r\n const { pm, stateMachine } = makeTestRig();\r\n\r\n stateMachine.setStates([stateMachine.getStateByID(\"state1\")!]);\r\n\r\n const vm = pm.lastVM as HostStateMachineVM;\r\n expect(vm.states).toHaveLength(1);\r\n expect(vm.states).toEqual([\"state1\"]);\r\n expect(vm.isSingleSlide).toEqual(true);\r\n });\r\n\r\n it(\"Checks for a change in isSingleSlide\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n activeSlideName: \"Active Slide\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\"state1\"],\r\n isSingleSlide: true\r\n };\r\n\r\n const vm2 = { ...vm1, isSingleSlide: false };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for a change in the active slide\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n activeSlideName: \"Active Slide\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\"state1\", \"state2\"],\r\n isSingleSlide: false\r\n };\r\n\r\n const vm2 = { ...vm1, activeSlideID: \"CHANGED\" };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for a change in the active slide name\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n activeSlideName: \"Active Slide\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\"state1\", \"state2\"],\r\n isSingleSlide: false\r\n };\r\n\r\n const vm2 = { ...vm1, activeSlideName: \"CHANGED\" };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for a change in the next slide\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n activeSlideName: \"Active Slide\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\"state1\", \"state2\"],\r\n isSingleSlide: false\r\n };\r\n\r\n const vm2 = { ...vm1, nextSlideID: \"CHANGED\" };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for a change in the previous slide\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n activeSlideName: \"Active Slide\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\"state1\", \"state2\"],\r\n isSingleSlide: false\r\n };\r\n\r\n const vm2 = { ...vm1, previousSlideID: \"CHANGED\" };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for state to be added\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n activeSlideName: \"Active Slide\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\"state1\", \"state2\"],\r\n isSingleSlide: false\r\n };\r\n\r\n const vm2 = {\r\n ...vm1,\r\n states: [\"state1\", \"state2\", \"state3\"],\r\n isSingleSlide: false\r\n };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for state to be removed\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n activeSlideName: \"Active Slide\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\"state1\", \"state2\"],\r\n isSingleSlide: false\r\n };\r\n\r\n const vm2 = {\r\n ...vm1,\r\n states: [\"state1\"],\r\n isSingleSlide: true\r\n };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n\r\n it(\"Checks for state order to change\", () => {\r\n const { pm } = makeTestRig();\r\n\r\n const vm1: HostStateMachineVM = {\r\n activeSlideID: \"activeSlideID\",\r\n activeSlideName: \"Active Slide\",\r\n nextSlideID: \"newSlideID\",\r\n previousSlideID: \"previousSlideID\",\r\n states: [\"state1\", \"state2\"],\r\n isSingleSlide: false\r\n };\r\n\r\n const vm2 = {\r\n ...vm1,\r\n states: [\"state2\", \"state1\"],\r\n isSingleSlide: false\r\n };\r\n\r\n expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);\r\n });\r\n});\r\n"]}
@@ -0,0 +1,131 @@
1
+ import { AppObjectPM } from "@vived/core";
2
+ import { AppRepoEntity } from "../../Apps/Entities/AppRepo";
3
+ import { HostStateEntity } from "../Entities/HostStateEntity";
4
+ import { HostStateMachine } from "../Entities/HostStateMachine";
5
+ export class HostStatePM extends AppObjectPM {
6
+ // Non-singleton getter pattern
7
+ static getById(id, appObjects) {
8
+ return appObjects.get(id)?.getComponent(HostStatePM.type);
9
+ }
10
+ }
11
+ HostStatePM.type = "HostStatePM";
12
+ // Default view model
13
+ HostStatePM.defaultVM = {
14
+ id: "",
15
+ name: "",
16
+ data: {},
17
+ isActive: false,
18
+ appName: "",
19
+ canBumpBackwards: false,
20
+ canBumpForward: false,
21
+ index: -1
22
+ };
23
+ export function makeHostStatePM(appObject) {
24
+ return new HostStatePMImp(appObject);
25
+ }
26
+ class HostStatePMImp extends HostStatePM {
27
+ // Get the entity from the same AppObject
28
+ get hostStateEntity() {
29
+ return this.getCachedLocalComponent(HostStateEntity.type);
30
+ }
31
+ // Get the state machine which is a singleton
32
+ get hostStateMachine() {
33
+ return this.getCachedSingleton(HostStateMachine.type);
34
+ }
35
+ // Get the app repo which is a singleton
36
+ get appRepo() {
37
+ return this.getCachedSingleton(AppRepoEntity.type);
38
+ }
39
+ // Required equality check method for view models
40
+ vmsAreEqual(a, b) {
41
+ if (a.id !== b.id)
42
+ return false;
43
+ if (a.name !== b.name)
44
+ return false;
45
+ if (a.isActive !== b.isActive)
46
+ return false;
47
+ if (a.appName !== b.appName)
48
+ return false;
49
+ if (a.canBumpBackwards !== b.canBumpBackwards)
50
+ return false;
51
+ if (a.canBumpForward !== b.canBumpForward)
52
+ return false;
53
+ if (a.index !== b.index)
54
+ return false;
55
+ // Deep comparison for the data object
56
+ const aData = JSON.stringify(a.data);
57
+ const bData = JSON.stringify(b.data);
58
+ if (aData !== bData)
59
+ return false;
60
+ return true;
61
+ }
62
+ updateViewModel() {
63
+ const entity = this.hostStateEntity;
64
+ const stateMachine = this.hostStateMachine;
65
+ const appRepo = this.appRepo;
66
+ if (!entity) {
67
+ this.doUpdateView(HostStatePM.defaultVM);
68
+ return;
69
+ }
70
+ // Check if this state is the active one in the state machine
71
+ const isActive = stateMachine?.activeState === entity.id;
72
+ // Look up the app name using the appID from the state entity
73
+ let appName = "";
74
+ if (appRepo && entity.appID) {
75
+ const app = appRepo.getApp(entity.appID);
76
+ if (app) {
77
+ appName = app.name;
78
+ }
79
+ }
80
+ // Determine if the state can be bumped backwards or forwards
81
+ let canBumpBackwards = false;
82
+ let canBumpForward = false;
83
+ let index = -1;
84
+ if (stateMachine) {
85
+ const stateIndex = stateMachine.getStateIndex(entity.id);
86
+ if (stateIndex !== undefined) {
87
+ index = stateIndex;
88
+ // Can bump backwards if index > 0
89
+ canBumpBackwards = stateIndex > 0;
90
+ // Can bump forward if index < length-1
91
+ canBumpForward = stateIndex < stateMachine.stateCount - 1;
92
+ }
93
+ }
94
+ // Create a new immutable view model based on entity state
95
+ const newVM = {
96
+ id: entity.id,
97
+ name: entity.name,
98
+ data: entity.stateData,
99
+ isActive: isActive || false,
100
+ appName,
101
+ canBumpBackwards,
102
+ canBumpForward,
103
+ index
104
+ };
105
+ // Update the view with the new view model
106
+ this.doUpdateView(newVM);
107
+ }
108
+ constructor(appObject) {
109
+ super(appObject, HostStatePM.type);
110
+ // Handler for entity changes
111
+ this.onEntityChange = () => {
112
+ this.updateViewModel();
113
+ };
114
+ // Handler for state machine changes
115
+ this.onStateMachineChange = () => {
116
+ this.updateViewModel();
117
+ };
118
+ this.dispose = () => {
119
+ this.hostStateEntity?.removeChangeObserver(this.onEntityChange);
120
+ this.hostStateMachine?.removeChangeObserver(this.onStateMachineChange);
121
+ super.dispose();
122
+ };
123
+ // Subscribe to entity changes
124
+ this.hostStateEntity?.addChangeObserver(this.onEntityChange);
125
+ // Subscribe to state machine changes
126
+ this.hostStateMachine?.addChangeObserver(this.onStateMachineChange);
127
+ // Initialize the view model
128
+ this.updateViewModel();
129
+ }
130
+ }
131
+ //# sourceMappingURL=HostStatePM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HostStatePM.js","sourceRoot":"","sources":["../../../../src/StateMachine/PMs/HostStatePM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAiB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAahE,MAAM,OAAgB,WAAY,SAAQ,WAAwB;IAehE,+BAA+B;IAC/B,MAAM,CAAC,OAAO,CACZ,EAAU,EACV,UAAyB;QAEzB,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,CAAc,WAAW,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;;AApBe,gBAAI,GAAG,aAAa,CAAC;AAErC,qBAAqB;AACL,qBAAS,GAAgB;IACvC,EAAE,EAAE,EAAE;IACN,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,EAAE;IACX,gBAAgB,EAAE,KAAK;IACvB,cAAc,EAAE,KAAK;IACrB,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAWJ,MAAM,UAAU,eAAe,CAAC,SAAoB;IAClD,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,cAAe,SAAQ,WAAW;IACtC,yCAAyC;IACzC,IAAY,eAAe;QACzB,OAAO,IAAI,CAAC,uBAAuB,CAAkB,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,6CAA6C;IAC7C,IAAY,gBAAgB;QAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,wCAAwC;IACxC,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAgB,aAAa,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,iDAAiD;IACjD,WAAW,CAAC,CAAc,EAAE,CAAc;QACxC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,gBAAgB;YAAE,OAAO,KAAK,CAAC;QAC5D,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QACxD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEtC,sCAAsC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAElC,OAAO,IAAI,CAAC;IACd,CAAC;IAYO,eAAe;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,YAAY,EAAE,WAAW,KAAK,MAAM,CAAC,EAAE,CAAC;QAEzD,6DAA6D;QAC7D,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QAEf,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,KAAK,GAAG,UAAU,CAAC;gBACnB,kCAAkC;gBAClC,gBAAgB,GAAG,UAAU,GAAG,CAAC,CAAC;gBAClC,uCAAuC;gBACvC,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,MAAM,KAAK,GAAgB;YACzB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,SAAS;YACtB,QAAQ,EAAE,QAAQ,IAAI,KAAK;YAC3B,OAAO;YACP,gBAAgB;YAChB,cAAc;YACd,KAAK;SACN,CAAC;QAEF,0CAA0C;QAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAQD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAvErC,6BAA6B;QACrB,mBAAc,GAAG,GAAS,EAAE;YAClC,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC;QAEF,oCAAoC;QAC5B,yBAAoB,GAAG,GAAS,EAAE;YACxC,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC;QAwDF,YAAO,GAAG,GAAS,EAAE;YACnB,IAAI,CAAC,eAAe,EAAE,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAChE,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACvE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC,CAAC;QAKA,8BAA8B;QAC9B,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE7D,qCAAqC;QACrC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEpE,4BAA4B;QAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { AppRepoEntity } from \"../../Apps/Entities/AppRepo\";\r\nimport { HostStateEntity } from \"../Entities/HostStateEntity\";\r\nimport { HostStateMachine } from \"../Entities/HostStateMachine\";\r\n\r\nexport interface HostStateVM {\r\n readonly id: string;\r\n readonly name: string;\r\n readonly data: object;\r\n readonly isActive: boolean;\r\n readonly appName: string;\r\n readonly canBumpBackwards: boolean;\r\n readonly canBumpForward: boolean;\r\n readonly index: number;\r\n}\r\n\r\nexport abstract class HostStatePM extends AppObjectPM<HostStateVM> {\r\n static readonly type = \"HostStatePM\";\r\n\r\n // Default view model\r\n static readonly defaultVM: HostStateVM = {\r\n id: \"\",\r\n name: \"\",\r\n data: {},\r\n isActive: false,\r\n appName: \"\",\r\n canBumpBackwards: false,\r\n canBumpForward: false,\r\n index: -1\r\n };\r\n\r\n // Non-singleton getter pattern\r\n static getById(\r\n id: string,\r\n appObjects: AppObjectRepo\r\n ): HostStatePM | undefined {\r\n return appObjects.get(id)?.getComponent<HostStatePM>(HostStatePM.type);\r\n }\r\n}\r\n\r\nexport function makeHostStatePM(appObject: AppObject): HostStatePM {\r\n return new HostStatePMImp(appObject);\r\n}\r\n\r\nclass HostStatePMImp extends HostStatePM {\r\n // Get the entity from the same AppObject\r\n private get hostStateEntity() {\r\n return this.getCachedLocalComponent<HostStateEntity>(HostStateEntity.type);\r\n }\r\n\r\n // Get the state machine which is a singleton\r\n private get hostStateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n // Get the app repo which is a singleton\r\n private get appRepo() {\r\n return this.getCachedSingleton<AppRepoEntity>(AppRepoEntity.type);\r\n }\r\n\r\n // Required equality check method for view models\r\n vmsAreEqual(a: HostStateVM, b: HostStateVM): boolean {\r\n if (a.id !== b.id) return false;\r\n if (a.name !== b.name) return false;\r\n if (a.isActive !== b.isActive) return false;\r\n if (a.appName !== b.appName) return false;\r\n if (a.canBumpBackwards !== b.canBumpBackwards) return false;\r\n if (a.canBumpForward !== b.canBumpForward) return false;\r\n if (a.index !== b.index) return false;\r\n\r\n // Deep comparison for the data object\r\n const aData = JSON.stringify(a.data);\r\n const bData = JSON.stringify(b.data);\r\n if (aData !== bData) return false;\r\n\r\n return true;\r\n }\r\n\r\n // Handler for entity changes\r\n private onEntityChange = (): void => {\r\n this.updateViewModel();\r\n };\r\n\r\n // Handler for state machine changes\r\n private onStateMachineChange = (): void => {\r\n this.updateViewModel();\r\n };\r\n\r\n private updateViewModel(): void {\r\n const entity = this.hostStateEntity;\r\n const stateMachine = this.hostStateMachine;\r\n const appRepo = this.appRepo;\r\n\r\n if (!entity) {\r\n this.doUpdateView(HostStatePM.defaultVM);\r\n return;\r\n }\r\n\r\n // Check if this state is the active one in the state machine\r\n const isActive = stateMachine?.activeState === entity.id;\r\n\r\n // Look up the app name using the appID from the state entity\r\n let appName = \"\";\r\n if (appRepo && entity.appID) {\r\n const app = appRepo.getApp(entity.appID);\r\n if (app) {\r\n appName = app.name;\r\n }\r\n }\r\n\r\n // Determine if the state can be bumped backwards or forwards\r\n let canBumpBackwards = false;\r\n let canBumpForward = false;\r\n let index = -1;\r\n\r\n if (stateMachine) {\r\n const stateIndex = stateMachine.getStateIndex(entity.id);\r\n if (stateIndex !== undefined) {\r\n index = stateIndex;\r\n // Can bump backwards if index > 0\r\n canBumpBackwards = stateIndex > 0;\r\n // Can bump forward if index < length-1\r\n canBumpForward = stateIndex < stateMachine.stateCount - 1;\r\n }\r\n }\r\n\r\n // Create a new immutable view model based on entity state\r\n const newVM: HostStateVM = {\r\n id: entity.id,\r\n name: entity.name,\r\n data: entity.stateData,\r\n isActive: isActive || false,\r\n appName,\r\n canBumpBackwards,\r\n canBumpForward,\r\n index\r\n };\r\n\r\n // Update the view with the new view model\r\n this.doUpdateView(newVM);\r\n }\r\n\r\n dispose = (): void => {\r\n this.hostStateEntity?.removeChangeObserver(this.onEntityChange);\r\n this.hostStateMachine?.removeChangeObserver(this.onStateMachineChange);\r\n super.dispose();\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostStatePM.type);\r\n\r\n // Subscribe to entity changes\r\n this.hostStateEntity?.addChangeObserver(this.onEntityChange);\r\n\r\n // Subscribe to state machine changes\r\n this.hostStateMachine?.addChangeObserver(this.onStateMachineChange);\r\n\r\n // Initialize the view model\r\n this.updateViewModel();\r\n }\r\n}\r\n"]}
@@ -0,0 +1,403 @@
1
+ import { makeAppObjectRepo } from "@vived/core";
2
+ import { makeAppRepo } from "../../Apps/Entities/AppRepo";
3
+ import { makeHostStateEntity } from "../Entities/HostStateEntity";
4
+ import { makeHostStateMachine } from "../Entities/HostStateMachine";
5
+ import { HostStatePM, makeHostStatePM } from "./HostStatePM";
6
+ describe("HostStatePM", () => {
7
+ let appObjects;
8
+ let appObject;
9
+ let entity;
10
+ let stateMachine;
11
+ let appRepo;
12
+ let app;
13
+ let pm;
14
+ const testId = "test-state-id";
15
+ const testAppId = "test-app-id";
16
+ const testAppName = "Test App Name";
17
+ beforeEach(() => {
18
+ // Set up the test environment
19
+ appObjects = makeAppObjectRepo();
20
+ // Create the state machine first (it's a singleton)
21
+ const stateMachineAppObject = appObjects.getOrCreate("state-machine-id");
22
+ stateMachine = makeHostStateMachine(stateMachineAppObject);
23
+ // Create app repo (it's a singleton)
24
+ const appRepoObject = appObjects.getOrCreate("app-repo-id");
25
+ appRepo = makeAppRepo(appRepoObject);
26
+ // Create a test app
27
+ app = appRepo.createApp(testAppId);
28
+ app.name = testAppName;
29
+ // Create the state entity
30
+ appObject = appObjects.getOrCreate(testId);
31
+ entity = makeHostStateEntity(appObject);
32
+ entity.appID = testAppId;
33
+ // Create the PM on the same AppObject as the entity
34
+ pm = makeHostStatePM(appObject);
35
+ });
36
+ it("should initialize with a view model", () => {
37
+ expect(pm.lastVM).not.toBeUndefined();
38
+ expect(pm.lastVM?.id).toBe(testId);
39
+ expect(pm.lastVM?.isActive).toBe(false);
40
+ expect(pm.lastVM?.appName).toBe(testAppName);
41
+ expect(pm.lastVM?.canBumpBackwards).toBe(false);
42
+ expect(pm.lastVM?.canBumpForward).toBe(false);
43
+ expect(pm.lastVM?.index).toBe(-1);
44
+ });
45
+ it("should update view when entity changes", () => {
46
+ const spy = jest.spyOn(pm, "doUpdateView");
47
+ entity.notifyOnChange();
48
+ expect(spy).toHaveBeenCalled();
49
+ });
50
+ it("should reflect entity properties in view model", () => {
51
+ const testName = "test state";
52
+ const testData = { key: "value" };
53
+ entity.name = testName;
54
+ entity.setStateData(testData);
55
+ expect(pm.lastVM?.id).toBe(testId);
56
+ expect(pm.lastVM?.name).toBe(testName);
57
+ expect(pm.lastVM?.data).toEqual(testData);
58
+ expect(pm.lastVM?.isActive).toBe(false);
59
+ expect(pm.lastVM?.appName).toBe(testAppName);
60
+ expect(pm.lastVM?.canBumpBackwards).toBe(false);
61
+ expect(pm.lastVM?.canBumpForward).toBe(false);
62
+ expect(pm.lastVM?.index).toBe(-1);
63
+ });
64
+ it("should set isActive to true when state is active in state machine", () => {
65
+ // Add the state to the state machine
66
+ stateMachine.setStates([entity]);
67
+ // Set the state as active
68
+ stateMachine.setActiveStateByID(testId);
69
+ // Check that isActive is true in the view model
70
+ expect(pm.lastVM?.isActive).toBe(true);
71
+ });
72
+ it("should update isActive when state machine active state changes", () => {
73
+ // Add the state to the state machine
74
+ stateMachine.setStates([entity]);
75
+ // Initially not active
76
+ expect(pm.lastVM?.isActive).toBe(false);
77
+ // Make it active
78
+ stateMachine.setActiveStateByID(testId);
79
+ expect(pm.lastVM?.isActive).toBe(true);
80
+ // Clear active state
81
+ stateMachine.clearActiveState();
82
+ expect(pm.lastVM?.isActive).toBe(false);
83
+ });
84
+ it("should handle missing app ID", () => {
85
+ // Create a new entity with no app ID
86
+ const newEntity = makeHostStateEntity(appObjects.getOrCreate("new-entity-id"));
87
+ const newPm = makeHostStatePM(newEntity.appObject);
88
+ // App name should be empty string
89
+ expect(newPm.lastVM?.appName).toBe("");
90
+ });
91
+ it("should handle non-existent app ID", () => {
92
+ // Set app ID to something that doesn't exist
93
+ entity.appID = "non-existent-app";
94
+ // App name should be empty string
95
+ expect(pm.lastVM?.appName).toBe("");
96
+ });
97
+ it("should return true when comparing identical view models in vmsAreEqual", () => {
98
+ const vm1 = {
99
+ id: "same",
100
+ name: "same",
101
+ data: { test: 123 },
102
+ isActive: false,
103
+ appName: "same app",
104
+ canBumpBackwards: true,
105
+ canBumpForward: true,
106
+ index: 0
107
+ };
108
+ const vm2 = {
109
+ id: "same",
110
+ name: "same",
111
+ data: { test: 123 },
112
+ isActive: false,
113
+ appName: "same app",
114
+ canBumpBackwards: true,
115
+ canBumpForward: true,
116
+ index: 0
117
+ };
118
+ expect(pm.vmsAreEqual(vm1, vm2)).toBe(true);
119
+ });
120
+ // Different tests for each property change in vmsAreEqual
121
+ it("should return false when comparing view models with different ids", () => {
122
+ const vm1 = {
123
+ id: "id1",
124
+ name: "same",
125
+ data: { test: 123 },
126
+ isActive: false,
127
+ appName: "same app",
128
+ canBumpBackwards: true,
129
+ canBumpForward: true,
130
+ index: 0
131
+ };
132
+ const vm2 = {
133
+ id: "id2",
134
+ name: "same",
135
+ data: { test: 123 },
136
+ isActive: false,
137
+ appName: "same app",
138
+ canBumpBackwards: true,
139
+ canBumpForward: true,
140
+ index: 0
141
+ };
142
+ expect(pm.vmsAreEqual(vm1, vm2)).toBe(false);
143
+ });
144
+ it("should return false when comparing view models with different names", () => {
145
+ const vm1 = {
146
+ id: "same",
147
+ name: "name1",
148
+ data: { test: 123 },
149
+ isActive: false,
150
+ appName: "same app",
151
+ canBumpBackwards: true,
152
+ canBumpForward: true,
153
+ index: 0
154
+ };
155
+ const vm2 = {
156
+ id: "same",
157
+ name: "name2",
158
+ data: { test: 123 },
159
+ isActive: false,
160
+ appName: "same app",
161
+ canBumpBackwards: true,
162
+ canBumpForward: true,
163
+ index: 0
164
+ };
165
+ expect(pm.vmsAreEqual(vm1, vm2)).toBe(false);
166
+ });
167
+ it("should return false when comparing view models with different data", () => {
168
+ const vm1 = {
169
+ id: "same",
170
+ name: "same",
171
+ data: { test: 123 },
172
+ isActive: false,
173
+ appName: "same app",
174
+ canBumpBackwards: true,
175
+ canBumpForward: true,
176
+ index: 0
177
+ };
178
+ const vm2 = {
179
+ id: "same",
180
+ name: "same",
181
+ data: { test: 456 },
182
+ isActive: false,
183
+ appName: "same app",
184
+ canBumpBackwards: true,
185
+ canBumpForward: true,
186
+ index: 0
187
+ };
188
+ expect(pm.vmsAreEqual(vm1, vm2)).toBe(false);
189
+ });
190
+ it("should return false when comparing view models with different isActive", () => {
191
+ const vm1 = {
192
+ id: "same",
193
+ name: "same",
194
+ data: { test: 123 },
195
+ isActive: false,
196
+ appName: "same app",
197
+ canBumpBackwards: true,
198
+ canBumpForward: true,
199
+ index: 0
200
+ };
201
+ const vm2 = {
202
+ id: "same",
203
+ name: "same",
204
+ data: { test: 123 },
205
+ isActive: true,
206
+ appName: "same app",
207
+ canBumpBackwards: true,
208
+ canBumpForward: true,
209
+ index: 0
210
+ };
211
+ expect(pm.vmsAreEqual(vm1, vm2)).toBe(false);
212
+ });
213
+ it("should return false when comparing view models with different appNames", () => {
214
+ const vm1 = {
215
+ id: "same",
216
+ name: "same",
217
+ data: { test: 123 },
218
+ isActive: false,
219
+ appName: "app1",
220
+ canBumpBackwards: true,
221
+ canBumpForward: true,
222
+ index: 0
223
+ };
224
+ const vm2 = {
225
+ id: "same",
226
+ name: "same",
227
+ data: { test: 123 },
228
+ isActive: false,
229
+ appName: "app2",
230
+ canBumpBackwards: true,
231
+ canBumpForward: true,
232
+ index: 0
233
+ };
234
+ expect(pm.vmsAreEqual(vm1, vm2)).toBe(false);
235
+ });
236
+ it("should return false when comparing view models with different canBumpBackwards", () => {
237
+ const vm1 = {
238
+ id: "same",
239
+ name: "same",
240
+ data: { test: 123 },
241
+ isActive: false,
242
+ appName: "same app",
243
+ canBumpBackwards: true,
244
+ canBumpForward: true,
245
+ index: 0
246
+ };
247
+ const vm2 = {
248
+ id: "same",
249
+ name: "same",
250
+ data: { test: 123 },
251
+ isActive: false,
252
+ appName: "same app",
253
+ canBumpBackwards: false,
254
+ canBumpForward: true,
255
+ index: 0
256
+ };
257
+ expect(pm.vmsAreEqual(vm1, vm2)).toBe(false);
258
+ });
259
+ it("should return false when comparing view models with different canBumpForward", () => {
260
+ const vm1 = {
261
+ id: "same",
262
+ name: "same",
263
+ data: { test: 123 },
264
+ isActive: false,
265
+ appName: "same app",
266
+ canBumpBackwards: true,
267
+ canBumpForward: true,
268
+ index: 0
269
+ };
270
+ const vm2 = {
271
+ id: "same",
272
+ name: "same",
273
+ data: { test: 123 },
274
+ isActive: false,
275
+ appName: "same app",
276
+ canBumpBackwards: true,
277
+ canBumpForward: false,
278
+ index: 0
279
+ };
280
+ expect(pm.vmsAreEqual(vm1, vm2)).toBe(false);
281
+ });
282
+ it("should return false when comparing view models with different indexes", () => {
283
+ const vm1 = {
284
+ id: "same",
285
+ name: "same",
286
+ data: { test: 123 },
287
+ isActive: false,
288
+ appName: "same app",
289
+ canBumpBackwards: true,
290
+ canBumpForward: true,
291
+ index: 0
292
+ };
293
+ const vm2 = {
294
+ id: "same",
295
+ name: "same",
296
+ data: { test: 123 },
297
+ isActive: false,
298
+ appName: "same app",
299
+ canBumpBackwards: true,
300
+ canBumpForward: true,
301
+ index: 1
302
+ };
303
+ expect(pm.vmsAreEqual(vm1, vm2)).toBe(false);
304
+ });
305
+ it("should be available via static getById", () => {
306
+ const retrievedPM = HostStatePM.getById(testId, appObjects);
307
+ expect(retrievedPM).toBe(pm);
308
+ });
309
+ it("should clean up observers on dispose", () => {
310
+ // Spy on removeChangeObserver for entity
311
+ const entitySpy = jest.spyOn(entity, "removeChangeObserver");
312
+ // Spy on removeChangeObserver for state machine
313
+ const stateMachineSpy = jest.spyOn(stateMachine, "removeChangeObserver");
314
+ // Spy on removeChangeObserver for app repo
315
+ const appRepoSpy = jest.spyOn(appRepo, "removeChangeObserver");
316
+ // Dispose the PM
317
+ pm.dispose();
318
+ // Should have called removeChangeObserver on all three
319
+ expect(entitySpy).toHaveBeenCalledWith(expect.any(Function));
320
+ expect(stateMachineSpy).toHaveBeenCalledWith(expect.any(Function));
321
+ // PM should no longer be attached to the AppObject
322
+ expect(appObject.getComponent(HostStatePM.type)).toBeUndefined();
323
+ });
324
+ it("should set canBumpBackwards and canBumpForward correctly based on state position", () => {
325
+ // Create three states
326
+ const state1 = entity; // already created in beforeEach
327
+ const state2 = makeHostStateEntity(appObjects.getOrCreate("state-2"));
328
+ const state3 = makeHostStateEntity(appObjects.getOrCreate("state-3"));
329
+ // Create PMs for each state
330
+ const pm1 = pm; // already created in beforeEach
331
+ const pm2 = makeHostStatePM(state2.appObject);
332
+ const pm3 = makeHostStatePM(state3.appObject);
333
+ // Add states to the state machine
334
+ stateMachine.setStates([state1, state2, state3]);
335
+ // First state should have canBumpBackwards=false, canBumpForward=true
336
+ expect(pm1.lastVM?.canBumpBackwards).toBe(false);
337
+ expect(pm1.lastVM?.canBumpForward).toBe(true);
338
+ // Middle state should have canBumpBackwards=true, canBumpForward=true
339
+ expect(pm2.lastVM?.canBumpBackwards).toBe(true);
340
+ expect(pm2.lastVM?.canBumpForward).toBe(true);
341
+ // Last state should have canBumpBackwards=true, canBumpForward=false
342
+ expect(pm3.lastVM?.canBumpBackwards).toBe(true);
343
+ expect(pm3.lastVM?.canBumpForward).toBe(false);
344
+ });
345
+ it("should update canBumpBackwards and canBumpForward when state position changes", () => {
346
+ // Create two states
347
+ const state1 = entity; // already created in beforeEach
348
+ const state2 = makeHostStateEntity(appObjects.getOrCreate("state-2"));
349
+ // Create PMs for each state
350
+ const pm1 = pm; // already created in beforeEach
351
+ const pm2 = makeHostStatePM(state2.appObject);
352
+ // Initially add just the first state
353
+ stateMachine.setStates([state1]);
354
+ // First and only state should have both properties false
355
+ expect(pm1.lastVM?.canBumpBackwards).toBe(false);
356
+ expect(pm1.lastVM?.canBumpForward).toBe(false);
357
+ // Add the second state
358
+ stateMachine.setStates([state1, state2]);
359
+ // First state should now be able to bump forward
360
+ expect(pm1.lastVM?.canBumpBackwards).toBe(false);
361
+ expect(pm1.lastVM?.canBumpForward).toBe(true);
362
+ // Second state should be able to bump backwards but not forwards
363
+ expect(pm2.lastVM?.canBumpBackwards).toBe(true);
364
+ expect(pm2.lastVM?.canBumpForward).toBe(false);
365
+ // Change order of states
366
+ stateMachine.setStates([state2, state1]);
367
+ // Values should be flipped now
368
+ expect(pm1.lastVM?.canBumpBackwards).toBe(true);
369
+ expect(pm1.lastVM?.canBumpForward).toBe(false);
370
+ expect(pm2.lastVM?.canBumpBackwards).toBe(false);
371
+ expect(pm2.lastVM?.canBumpForward).toBe(true);
372
+ });
373
+ it("should set correct index when state is in state machine", () => {
374
+ // Add the state to the state machine
375
+ stateMachine.setStates([entity]);
376
+ // The index should be 0 (first position)
377
+ expect(pm.lastVM?.index).toBe(0);
378
+ // Add more states before our state
379
+ const state0 = makeHostStateEntity(appObjects.getOrCreate("state-0"));
380
+ stateMachine.setStates([state0, entity]);
381
+ // The index should be 1 (second position)
382
+ expect(pm.lastVM?.index).toBe(1);
383
+ });
384
+ it("should update index when state position changes in state machine", () => {
385
+ // Create two states
386
+ const state1 = entity; // already created in beforeEach
387
+ const state2 = makeHostStateEntity(appObjects.getOrCreate("state-2"));
388
+ // Create PMs for each state
389
+ const pm1 = pm; // already created in beforeEach
390
+ const pm2 = makeHostStatePM(state2.appObject);
391
+ // Add states to the state machine
392
+ stateMachine.setStates([state1, state2]);
393
+ // Check indexes
394
+ expect(pm1.lastVM?.index).toBe(0);
395
+ expect(pm2.lastVM?.index).toBe(1);
396
+ // Change order
397
+ stateMachine.setStates([state2, state1]);
398
+ // Check indexes again
399
+ expect(pm1.lastVM?.index).toBe(1);
400
+ expect(pm2.lastVM?.index).toBe(0);
401
+ });
402
+ });
403
+ //# sourceMappingURL=HostStatePM.test.js.map