@geode/opengeodeweb-front 9.11.0-rc.1 → 9.11.0-rc.10

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 (91) hide show
  1. package/.github/workflows/deploy.yml +11 -0
  2. package/.github/workflows/merge_request.yml +9 -0
  3. package/.github/workflows/pr_update.yml +11 -0
  4. package/.github/workflows/prepare_deploy.yml +9 -0
  5. package/.github/workflows/test.yml +37 -0
  6. package/.github/workflows/test_pr.yml +12 -0
  7. package/.oxlintrc.json +11 -0
  8. package/.releaserc +1 -2
  9. package/commitlint.config.js +16 -0
  10. package/components/FeedBack/ErrorBanner.vue +1 -1
  11. package/components/FeedBack/Snackers.vue +1 -1
  12. package/components/HybridRenderingView.vue +38 -12
  13. package/components/Launcher.vue +1 -1
  14. package/components/ObjectSelector.vue +2 -2
  15. package/components/PackagesVersions.vue +1 -1
  16. package/components/Recaptcha.vue +1 -1
  17. package/components/RemoteRenderingView.vue +1 -1
  18. package/components/Viewer/BreadCrumb.vue +1 -1
  19. package/components/Viewer/Options/PolygonAttributeSelector.vue +1 -8
  20. package/components/Viewer/Options/PolyhedronAttributeSelector.vue +1 -7
  21. package/components/Viewer/Options/TextureItem.vue +1 -8
  22. package/components/Viewer/Options/VertexAttributeSelector.vue +1 -5
  23. package/components/Viewer/Tree/ObjectTree.vue +1 -1
  24. package/components/Viewer/TreeObject.vue +1 -1
  25. package/components/Wrapper.vue +1 -1
  26. package/composables/api_fetch.js +2 -2
  27. package/composables/run_function_when_microservices_connected.js +1 -1
  28. package/composables/upload_file.js +2 -2
  29. package/composables/viewer_call.js +38 -38
  30. package/geode-opengeodeweb-back-5.10.0-rc.8.tgz +0 -0
  31. package/geode-opengeodeweb-viewer-1.11.0-rc.4.tgz +0 -0
  32. package/internal_stores/mesh/edges.js +49 -52
  33. package/internal_stores/mesh/index.js +21 -13
  34. package/internal_stores/mesh/points.js +9 -7
  35. package/internal_stores/mesh/polygons.js +9 -7
  36. package/internal_stores/mesh/polyhedra.js +8 -6
  37. package/internal_stores/model/blocks.js +1 -1
  38. package/internal_stores/model/corners.js +1 -1
  39. package/internal_stores/model/edges.js +1 -8
  40. package/internal_stores/model/index.js +3 -1
  41. package/internal_stores/model/lines.js +2 -2
  42. package/internal_stores/model/points.js +2 -2
  43. package/internal_stores/model/surfaces.js +1 -1
  44. package/package.json +17 -9
  45. package/stores/data_base.js +10 -1
  46. package/stores/data_style.js +7 -6
  47. package/stores/feedback.js +1 -1
  48. package/stores/geode.js +5 -5
  49. package/stores/hybrid_viewer.js +7 -1
  50. package/stores/infra.js +10 -10
  51. package/stores/menu.js +3 -3
  52. package/stores/treeview.js +1 -1
  53. package/stores/viewer.js +5 -6
  54. package/tests/integration/data/fake_id/edged_curve.vtp +20 -0
  55. package/tests/integration/microservices/back/requirements.in +1 -0
  56. package/tests/integration/microservices/back/requirements.txt +75 -0
  57. package/tests/integration/microservices/viewer/requirements.in +1 -0
  58. package/tests/integration/microservices/viewer/requirements.txt +87 -0
  59. package/tests/integration/stores/DataStyle/mesh/Edges.nuxt.test.js +138 -0
  60. package/{test → tests/unit}/components/CrsSelector.nuxt.test.js +6 -3
  61. package/{test → tests/unit}/components/ExtensionSelector.nuxt.test.js +6 -3
  62. package/{test → tests/unit}/components/FeedBack/ErrorsBanner.nuxt.test.js +10 -3
  63. package/{test → tests/unit}/components/FeedBack/Snackers.nuxt.test.js +24 -21
  64. package/{test → tests/unit}/components/FileSelector.nuxt.test.js +5 -2
  65. package/{test → tests/unit}/components/FileUploader.nuxt.test.js +6 -3
  66. package/{test → tests/unit}/components/Inspector/InspectionButton.nuxt.test.js +6 -3
  67. package/{test → tests/unit}/components/Launcher.nuxt.test.js +9 -2
  68. package/{test → tests/unit}/components/MissingFilesSelector.nuxt.test.js +6 -3
  69. package/{test → tests/unit}/components/ObjectSelector.nuxt.test.js +6 -3
  70. package/{test → tests/unit}/components/PackagesVersions.nuxt.test.js +5 -3
  71. package/{test → tests/unit}/components/Wrapper.nuxt.test.js +1 -1
  72. package/{test → tests/unit}/composables/api_fetch.nuxt.test.js +3 -2
  73. package/{test/composables/run_function_when_microservices_connected.test.js → tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js} +18 -5
  74. package/{test → tests/unit}/composables/upload_file.nuxt.test.js +7 -8
  75. package/{test → tests/unit}/stores/Feedback.nuxt.test.js +12 -8
  76. package/{test → tests/unit}/stores/Geode.nuxt.test.js +33 -10
  77. package/{test → tests/unit}/stores/Infra.nuxt.test.js +58 -25
  78. package/{test → tests/unit}/stores/Viewer.nuxt.test.js +101 -20
  79. package/{test → tests/unit}/utils/validate_schema.nuxt.test.js +3 -0
  80. package/tests/vitest.config.js +33 -0
  81. package/utils/default_styles.js +246 -0
  82. package/utils/local.js +180 -0
  83. package/.github/workflows/Branch-protection.yml +0 -11
  84. package/.github/workflows/CICD.yml +0 -37
  85. package/.github/workflows/prepare_pr.yml +0 -11
  86. package/vitest.config.js +0 -13
  87. /package/components/{ContextMenu.vue → Viewer/ContextMenu.vue} +0 -0
  88. /package/components/{ContextMenuItem.vue → Viewer/ContextMenuItem.vue} +0 -0
  89. /package/{test → tests/unit}/components/Inspector/ResultPanel.nuxt.test.js +0 -0
  90. /package/{test → tests/unit}/components/Step.nuxt.test.js +0 -0
  91. /package/{test → tests/unit}/components/Stepper.nuxt.test.js +0 -0
@@ -8,7 +8,7 @@ import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schem
8
8
  import Status from "@ogw_f/utils/status.js"
9
9
 
10
10
  export const useHybridViewerStore = defineStore("hybridViewer", () => {
11
- const viewer_store = use_viewer_store()
11
+ const viewer_store = useViewerStore()
12
12
  const db = reactive({})
13
13
  const status = ref(Status.NOT_CREATED)
14
14
  const camera_options = reactive({})
@@ -66,6 +66,11 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
66
66
  db[id] = { actor, polydata, mapper }
67
67
  }
68
68
 
69
+ async function setVisibility(id, visibility) {
70
+ db[id].actor.setVisibility(visibility)
71
+ const renderWindow = genericRenderWindow.value.getRenderWindow()
72
+ renderWindow.render()
73
+ }
69
74
  async function setZScaling(z_scale) {
70
75
  zScale.value = z_scale
71
76
  const renderer = genericRenderWindow.value.getRenderer()
@@ -183,6 +188,7 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
183
188
  db,
184
189
  genericRenderWindow,
185
190
  addItem,
191
+ setVisibility,
186
192
  setZScaling,
187
193
  syncRemoteCamera,
188
194
  initHybridViewer,
package/stores/infra.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { useStorage } from "@vueuse/core"
2
2
  import Status from "@ogw_f/utils/status.js"
3
3
 
4
- export const use_infra_store = defineStore("infra", {
4
+ export const useInfraStore = defineStore("infra", {
5
5
  state: () => ({
6
6
  app_mode: getAppMode(),
7
7
  ID: useStorage("ID", ""),
@@ -16,7 +16,7 @@ export const use_infra_store = defineStore("infra", {
16
16
  return "localhost"
17
17
  },
18
18
  lambda_url() {
19
- const geode_store = use_geode_store()
19
+ const geode_store = useGeodeStore()
20
20
  const public_runtime_config = useRuntimeConfig().public
21
21
  const url =
22
22
  geode_store.protocol +
@@ -31,12 +31,12 @@ export const use_infra_store = defineStore("infra", {
31
31
  },
32
32
  microservices_connected() {
33
33
  return (
34
- use_geode_store().status == Status.CONNECTED &&
35
- use_viewer_store().status == Status.CONNECTED
34
+ useGeodeStore().status == Status.CONNECTED &&
35
+ useViewerStore().status == Status.CONNECTED
36
36
  )
37
37
  },
38
38
  microservices_busy() {
39
- return use_geode_store().is_busy || use_viewer_store().is_busy
39
+ return useGeodeStore().is_busy || useViewerStore().is_busy
40
40
  },
41
41
  },
42
42
  actions: {
@@ -48,8 +48,8 @@ export const use_infra_store = defineStore("infra", {
48
48
  if (this.status === Status.CREATED) return
49
49
  console.log("LOCK GRANTED !", lock)
50
50
  if (this.app_mode == appMode.appMode.DESKTOP) {
51
- const viewer_store = use_viewer_store()
52
- const geode_store = use_geode_store()
51
+ const viewer_store = useViewerStore()
52
+ const geode_store = useGeodeStore()
53
53
  const back_port = await window.electronAPI.run_back(
54
54
  geode_store.default_local_port,
55
55
  )
@@ -64,7 +64,7 @@ export const use_infra_store = defineStore("infra", {
64
64
  })
65
65
  if (error.value || !data.value) {
66
66
  this.status = Status.NOT_CREATED
67
- const feedback_store = use_feedback_store()
67
+ const feedback_store = useFeedbackStore()
68
68
  feedback_store.server_error = true
69
69
  return
70
70
  }
@@ -77,8 +77,8 @@ export const use_infra_store = defineStore("infra", {
77
77
  },
78
78
  async create_connection() {
79
79
  console.log("create_connection")
80
- await use_viewer_store().ws_connect()
81
- await use_geode_store().do_ping()
80
+ await useViewerStore().ws_connect()
81
+ await useGeodeStore().do_ping()
82
82
  return
83
83
  },
84
84
  },
package/stores/menu.js CHANGED
@@ -142,7 +142,7 @@ export const useMenuStore = defineStore("menu", () => {
142
142
  current_id.value = null
143
143
  }
144
144
 
145
- async function openMenu(id, x, y, containerWidth, containerHeight) {
145
+ async function openMenu(id, x, y, width, height) {
146
146
  await closeMenu()
147
147
  current_id.value = id
148
148
 
@@ -151,8 +151,8 @@ export const useMenuStore = defineStore("menu", () => {
151
151
  menuY.value = y
152
152
  }
153
153
 
154
- if (containerWidth) containerWidth.value = containerWidth
155
- if (containerHeight) containerHeight.value = containerHeight
154
+ if (containerWidth) containerWidth.value = width
155
+ if (containerHeight) containerHeight.value = height
156
156
 
157
157
  display_menu.value = true
158
158
  }
@@ -1,4 +1,4 @@
1
- export const use_treeview_store = defineStore("treeview", () => {
1
+ export const useTreeviewStore = defineStore("treeview", () => {
2
2
  const dataStyleStore = useDataStyleStore()
3
3
 
4
4
  /** State **/
package/stores/viewer.js CHANGED
@@ -4,7 +4,7 @@ import "@kitware/vtk.js/Rendering/OpenGL/Profiles/Geometry"
4
4
  import schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json"
5
5
  import Status from "@ogw_f/utils/status.js"
6
6
 
7
- export const use_viewer_store = defineStore("viewer", {
7
+ export const useViewerStore = defineStore("viewer", {
8
8
  state: () => ({
9
9
  default_local_port: "1234",
10
10
  client: {},
@@ -16,14 +16,14 @@ export const use_viewer_store = defineStore("viewer", {
16
16
  }),
17
17
  getters: {
18
18
  protocol() {
19
- if (use_infra_store().app_mode == appMode.appMode.CLOUD) {
19
+ if (useInfraStore().app_mode == appMode.appMode.CLOUD) {
20
20
  return "wss"
21
21
  } else {
22
22
  return "ws"
23
23
  }
24
24
  },
25
25
  port() {
26
- if (use_infra_store().app_mode == appMode.appMode.CLOUD) {
26
+ if (useInfraStore().app_mode == appMode.appMode.CLOUD) {
27
27
  return "443"
28
28
  }
29
29
  const VIEWER_PORT = useRuntimeConfig().public.VIEWER_PORT
@@ -33,7 +33,7 @@ export const use_viewer_store = defineStore("viewer", {
33
33
  return this.default_local_port
34
34
  },
35
35
  base_url() {
36
- const infra_store = use_infra_store()
36
+ const infra_store = useInfraStore()
37
37
  let viewer_url = `${this.protocol}://${infra_store.domain_name}:${this.port}`
38
38
  if (infra_store.app_mode == appMode.appMode.CLOUD) {
39
39
  if (infra_store.ID == "") {
@@ -60,7 +60,6 @@ export const use_viewer_store = defineStore("viewer", {
60
60
  this.picking_mode = false
61
61
  },
62
62
  async ws_connect() {
63
- if (process.env.NODE_ENV == "test") return
64
63
  if (this.status === Status.CONNECTED) return
65
64
  return navigator.locks.request("viewer.ws_connect", async (lock) => {
66
65
  if (this.status === Status.CONNECTED) return
@@ -125,7 +124,7 @@ export const use_viewer_store = defineStore("viewer", {
125
124
  resolve()
126
125
  })
127
126
  .catch((error) => {
128
- console.error(error)
127
+ console.error("error", error)
129
128
  viewer_store.status = Status.NOT_CONNECTED
130
129
  reject(error)
131
130
  })
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0"?>
2
+ <VTKFile type="PolyData" version="1.0" byte_order="LittleEndian" header_type="UInt32" compressor="vtkZLibDataCompressor">
3
+ <PolyData>
4
+ <Piece NumberOfPoints="4" NumberOfLines="4">
5
+ <PointData>
6
+ <DataArray type="Float64" Name="points" format="ascii" NumberOfComponents="3" RangeMin="0.100000001" RangeMax="9.39999962">0.1 0.2 0.3 2.1 9.4 6.7 7.5 5.2 6.3 8.7 1.4 4.7 </DataArray>
7
+ </PointData>
8
+ <Points>
9
+ <DataArray type="Float64" Name="Points" format="ascii" NumberOfComponents="3" RangeMin="0.10000000000000001" RangeMax="9.4000000000000004">0.1 0.2 0.3 2.1 9.4 6.7 7.5 5.2 6.3 8.7 1.4 4.7 </DataArray>
10
+ </Points>
11
+ <CellData>
12
+ <DataArray type="Float64" Name="edges" format="ascii" NumberOfComponents="2" RangeMin="0" RangeMax="3">0 1 0 2 3 2 1 2 </DataArray>
13
+ </CellData>
14
+ <Lines>
15
+ <DataArray type="Int64" Name="connectivity" format="ascii" RangeMin="0" RangeMax="3">0 1 0 2 3 2 1 2 </DataArray>
16
+ <DataArray type="Int64" Name="offsets" format="ascii" RangeMin="0" RangeMax="4">2 4 6 8 </DataArray>
17
+ </Lines>
18
+ </Piece>
19
+ </PolyData>
20
+ </VTKFile>
@@ -0,0 +1 @@
1
+ OpenGeodeWeb-Back
@@ -0,0 +1,75 @@
1
+ #
2
+ # This file is autogenerated by pip-compile with Python 3.12
3
+ # by the following command:
4
+ #
5
+ # pip-compile requirements.in
6
+ #
7
+ asgiref==3.9.1
8
+ # via
9
+ # flask
10
+ # opengeodeweb-back
11
+ blinker==1.9.0
12
+ # via
13
+ # flask
14
+ # opengeodeweb-back
15
+ click==8.2.1
16
+ # via
17
+ # flask
18
+ # opengeodeweb-back
19
+ fastjsonschema==2.16.2
20
+ # via opengeodeweb-back
21
+ flask[async]==3.0.3
22
+ # via
23
+ # flask-cors
24
+ # opengeodeweb-back
25
+ flask-cors==6.0.1
26
+ # via opengeodeweb-back
27
+ geode-common==33.9.0
28
+ # via
29
+ # geode-viewables
30
+ # opengeodeweb-back
31
+ geode-viewables==3.2.0
32
+ # via opengeodeweb-back
33
+ itsdangerous==2.2.0
34
+ # via
35
+ # flask
36
+ # opengeodeweb-back
37
+ jinja2==3.1.6
38
+ # via
39
+ # flask
40
+ # opengeodeweb-back
41
+ markupsafe==3.0.2
42
+ # via
43
+ # jinja2
44
+ # opengeodeweb-back
45
+ # werkzeug
46
+ opengeode-core==15.24.2
47
+ # via
48
+ # geode-common
49
+ # geode-viewables
50
+ # opengeode-geosciences
51
+ # opengeode-geosciencesio
52
+ # opengeode-inspector
53
+ # opengeode-io
54
+ # opengeodeweb-back
55
+ opengeode-geosciences==9.2.2
56
+ # via
57
+ # geode-viewables
58
+ # opengeode-geosciencesio
59
+ # opengeodeweb-back
60
+ opengeode-geosciencesio==5.7.2
61
+ # via opengeodeweb-back
62
+ opengeode-inspector==6.7.0
63
+ # via opengeodeweb-back
64
+ opengeode-io==7.3.2
65
+ # via
66
+ # geode-viewables
67
+ # opengeode-geosciencesio
68
+ # opengeodeweb-back
69
+ opengeodeweb-back==5.9.1
70
+ # via -r requirements.in
71
+ werkzeug==3.0.3
72
+ # via
73
+ # flask
74
+ # flask-cors
75
+ # opengeodeweb-back
@@ -0,0 +1 @@
1
+ OpenGeodeWeb-Viewer[cpu]
@@ -0,0 +1,87 @@
1
+ #
2
+ # This file is autogenerated by pip-compile with Python 3.12
3
+ # by the following command:
4
+ #
5
+ # pip-compile --extra-index-url=https://wheels.vtk.org --pre requirements.in
6
+ #
7
+ --extra-index-url https://wheels.vtk.org
8
+
9
+ aiohappyeyeballs==2.6.1
10
+ # via
11
+ # aiohttp
12
+ # opengeodeweb-viewer
13
+ aiohttp==3.12.15
14
+ # via
15
+ # opengeodeweb-viewer
16
+ # wslink
17
+ aiosignal==1.4.0
18
+ # via
19
+ # aiohttp
20
+ # opengeodeweb-viewer
21
+ attrs==25.3.0
22
+ # via
23
+ # aiohttp
24
+ # opengeodeweb-viewer
25
+ contourpy==1.3.3
26
+ # via matplotlib
27
+ cycler==0.12.1
28
+ # via matplotlib
29
+ fastjsonschema==2.21.1
30
+ # via opengeodeweb-viewer
31
+ fonttools==4.59.2
32
+ # via matplotlib
33
+ frozenlist==1.7.0
34
+ # via
35
+ # aiohttp
36
+ # aiosignal
37
+ # opengeodeweb-viewer
38
+ idna==3.10
39
+ # via
40
+ # opengeodeweb-viewer
41
+ # yarl
42
+ kiwisolver==1.4.10rc0
43
+ # via matplotlib
44
+ matplotlib==3.10.6
45
+ # via vtk-osmesa
46
+ multidict==6.6.3
47
+ # via
48
+ # aiohttp
49
+ # opengeodeweb-viewer
50
+ # yarl
51
+ numpy==2.3.2
52
+ # via
53
+ # contourpy
54
+ # matplotlib
55
+ opengeodeweb-viewer[cpu]==1.11.0rc3
56
+ # via
57
+ # -r requirements.in
58
+ # opengeodeweb-viewer
59
+ packaging==25.0
60
+ # via matplotlib
61
+ pillow==11.3.0
62
+ # via matplotlib
63
+ propcache==0.3.2
64
+ # via
65
+ # aiohttp
66
+ # opengeodeweb-viewer
67
+ # yarl
68
+ pyparsing==3.2.3
69
+ # via matplotlib
70
+ python-dateutil==2.9.0.post0
71
+ # via matplotlib
72
+ six==1.17.0
73
+ # via python-dateutil
74
+ typing-extensions==4.14.1
75
+ # via
76
+ # aiosignal
77
+ # opengeodeweb-viewer
78
+ vtk-osmesa==9.3.1
79
+ # via opengeodeweb-viewer
80
+ websocket-client==1.8.0
81
+ # via opengeodeweb-viewer
82
+ wslink==1.12.4
83
+ # via opengeodeweb-viewer
84
+ yarl==1.20.1
85
+ # via
86
+ # aiohttp
87
+ # opengeodeweb-viewer
@@ -0,0 +1,138 @@
1
+ import path from "path"
2
+
3
+ import { setActivePinia } from "pinia"
4
+ import { createTestingPinia } from "@pinia/testing"
5
+
6
+ import {
7
+ afterAll,
8
+ afterEach,
9
+ beforeAll,
10
+ beforeEach,
11
+ describe,
12
+ expect,
13
+ test,
14
+ vi,
15
+ } from "vitest"
16
+
17
+ import {
18
+ executable_name,
19
+ executable_path,
20
+ kill_processes,
21
+ run_viewer,
22
+ } from "@ogw_f/utils/local"
23
+
24
+ import Status from "@ogw_f/utils/status"
25
+
26
+ import * as composables from "@ogw_f/composables/viewer_call"
27
+ import { useDataStyleStore } from "@ogw_f/stores/data_style"
28
+ import { useDataBaseStore } from "@ogw_f/stores/data_base"
29
+ import { useViewerStore } from "@ogw_f/stores/viewer"
30
+ import { useInfraStore } from "@ogw_f/stores/infra"
31
+
32
+ import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json"
33
+ import { WebSocket } from "ws"
34
+
35
+ const mesh_edges_schemas = viewer_schemas.opengeodeweb_viewer.mesh.edges
36
+
37
+ const mockLockRequest = vi.fn().mockImplementation(async (name, callback) => {
38
+ return callback({ name })
39
+ })
40
+
41
+ vi.stubGlobal("navigator", {
42
+ ...navigator,
43
+ locks: {
44
+ request: mockLockRequest,
45
+ },
46
+ })
47
+
48
+ beforeAll(() => {
49
+ global.WebSocket = WebSocket
50
+ })
51
+
52
+ afterAll(() => {
53
+ delete global.WebSocket
54
+ })
55
+
56
+ const id = "fake_id"
57
+ const file_name = "edged_curve.vtp"
58
+ const geode_object = "EdgedCurve2D"
59
+ const object_type = "mesh"
60
+
61
+ beforeEach(async () => {
62
+ const pinia = createTestingPinia({
63
+ stubActions: false,
64
+ createSpy: vi.fn,
65
+ })
66
+ setActivePinia(pinia)
67
+ const dataStyleStore = useDataStyleStore()
68
+ const dataBaseStore = useDataBaseStore()
69
+ const viewerStore = useViewerStore()
70
+ const infraStore = useInfraStore()
71
+ infraStore.app_mode = appMode.appMode.BROWSER
72
+
73
+ const viewer_path = path.join(
74
+ executable_path(
75
+ path.join("tests", "integration", "microservices", "viewer"),
76
+ ),
77
+ executable_name("opengeodeweb_viewer"),
78
+ )
79
+ const viewer_port = await run_viewer(viewer_path, {
80
+ port: 1234,
81
+ data_folder_path: path.join(__dirname, "..", "..", "..", "data"),
82
+ })
83
+
84
+ viewerStore.default_local_port = viewer_port
85
+ await viewerStore.ws_connect()
86
+ await dataBaseStore.registerObject(id, file_name, object_type)
87
+ await dataStyleStore.addDataStyle(id, geode_object, object_type)
88
+ expect(viewerStore.status).toBe(Status.CONNECTED)
89
+ })
90
+
91
+ describe("Mesh edges", () => {
92
+ afterEach(async () => {
93
+ await kill_processes()
94
+ })
95
+
96
+ describe("Edges visibility", () => {
97
+ test("test visibility true", async () => {
98
+ const dataStyleStore = useDataStyleStore()
99
+ const viewerStore = useViewerStore()
100
+ await dataStyleStore.setEdgesVisibility(id, true)
101
+ expect(dataStyleStore.edgesVisibility(id)).toBe(true)
102
+ expect(viewerStore.status).toBe(Status.CONNECTED)
103
+ })
104
+ })
105
+
106
+ describe("Edges active coloring", () => {
107
+ test("test coloring", async () => {
108
+ const dataStyleStore = useDataStyleStore()
109
+ const viewerStore = useViewerStore()
110
+ const coloringTypes = ["color"]
111
+ for (let i = 0; i < coloringTypes.length; i++) {
112
+ dataStyleStore.setEdgesActiveColoring(id, coloringTypes[i])
113
+ expect(dataStyleStore.edgesActiveColoring(id)).toBe(coloringTypes[i])
114
+ expect(viewerStore.status).toBe(Status.CONNECTED)
115
+ }
116
+ })
117
+ })
118
+ describe("Edges color", () => {
119
+ test("test red", async () => {
120
+ const dataStyleStore = useDataStyleStore()
121
+ const viewerStore = useViewerStore()
122
+ const color = { r: 255, g: 0, b: 0 }
123
+ const spy = vi.spyOn(composables, "viewer_call")
124
+ await dataStyleStore.setEdgesColor(id, color)
125
+ expect(spy).toHaveBeenCalledWith(
126
+ {
127
+ schema: mesh_edges_schemas.color,
128
+ params: { id, color },
129
+ },
130
+ {
131
+ response_function: expect.any(Function),
132
+ },
133
+ )
134
+ expect(dataStyleStore.edgesColor(id)).toStrictEqual(color)
135
+ expect(viewerStore.status).toBe(Status.CONNECTED)
136
+ })
137
+ })
138
+ })
@@ -1,6 +1,6 @@
1
- import { describe, expect, test } from "vitest"
2
1
  import { registerEndpoint, mountSuspended } from "@nuxt/test-utils/runtime"
3
2
 
3
+ import { describe, expect, test, vi } from "vitest"
4
4
  import { setActivePinia } from "pinia"
5
5
  import { createTestingPinia } from "@pinia/testing"
6
6
  import { createVuetify } from "vuetify"
@@ -19,9 +19,12 @@ const vuetify = createVuetify({
19
19
  })
20
20
 
21
21
  describe("CrsSelector.vue", () => {
22
- const pinia = createTestingPinia()
22
+ const pinia = createTestingPinia({
23
+ stubActions: false,
24
+ createSpy: vi.fn,
25
+ })
23
26
  setActivePinia(pinia)
24
- const geode_store = use_geode_store()
27
+ const geode_store = useGeodeStore()
25
28
  geode_store.base_url = ""
26
29
 
27
30
  test(`Default behavior`, async () => {
@@ -1,4 +1,4 @@
1
- import { describe, expect, test } from "vitest"
1
+ import { describe, expect, test, vi } from "vitest"
2
2
  import { registerEndpoint, mountSuspended } from "@nuxt/test-utils/runtime"
3
3
 
4
4
  import { createVuetify } from "vuetify"
@@ -19,9 +19,12 @@ const vuetify = createVuetify({
19
19
  })
20
20
 
21
21
  describe("ExtensionSelector.vue", async () => {
22
- const pinia = createTestingPinia()
22
+ const pinia = createTestingPinia({
23
+ stubActions: false,
24
+ createSpy: vi.fn,
25
+ })
23
26
  setActivePinia(pinia)
24
- const geode_store = use_geode_store()
27
+ const geode_store = useGeodeStore()
25
28
  geode_store.base_url = ""
26
29
 
27
30
  test(`Select geode_object & extension`, async () => {
@@ -6,6 +6,7 @@ import * as directives from "vuetify/directives"
6
6
  import { createTestingPinia } from "@pinia/testing"
7
7
 
8
8
  import FeedBackErrorBanner from "@ogw_f/components/FeedBack/ErrorBanner.vue"
9
+ import { setActivePinia } from "pinia"
9
10
 
10
11
  const vuetify = createVuetify({
11
12
  components,
@@ -14,13 +15,18 @@ const vuetify = createVuetify({
14
15
 
15
16
  describe("FeedBackErrorBanner.vue", async () => {
16
17
  ;(test(`Test reload`, async () => {
18
+ const pinia = createTestingPinia({
19
+ stubActions: false,
20
+ createSpy: vi.fn,
21
+ })
22
+ setActivePinia(pinia)
17
23
  const wrapper = mount(FeedBackErrorBanner, {
18
24
  global: {
19
- plugins: [createTestingPinia(), vuetify],
25
+ plugins: [pinia, vuetify],
20
26
  },
21
27
  })
22
28
  const reload_spy = vi.spyOn(wrapper.vm, "reload")
23
- const feedback_store = use_feedback_store()
29
+ const feedback_store = useFeedbackStore()
24
30
  await feedback_store.$patch({ server_error: true })
25
31
  expect(feedback_store.server_error).toBe(true)
26
32
  const v_btn = wrapper.findAll(".v-btn")
@@ -38,13 +44,14 @@ describe("FeedBackErrorBanner.vue", async () => {
38
44
  },
39
45
  },
40
46
  stubActions: false,
47
+ createSpy: vi.fn,
41
48
  }),
42
49
  vuetify,
43
50
  ],
44
51
  },
45
52
  })
46
53
 
47
- const feedback_store = use_feedback_store()
54
+ const feedback_store = useFeedbackStore()
48
55
  const v_btn = wrapper.findAll(".v-btn")
49
56
  await v_btn[1].trigger("click")
50
57
  expect(feedback_store.server_error).toBe(false)
@@ -1,10 +1,12 @@
1
1
  // @vitest-environment nuxt
2
2
  vi.stubGlobal("visualViewport", new EventTarget())
3
- import { describe, expect, test } from "vitest"
3
+ import { describe, expect, test, vi } from "vitest"
4
4
  import { mount } from "@vue/test-utils"
5
5
  import { createVuetify } from "vuetify"
6
6
  import * as components from "vuetify/components"
7
7
  import * as directives from "vuetify/directives"
8
+
9
+ import { setActivePinia } from "pinia"
8
10
  import { createTestingPinia } from "@pinia/testing"
9
11
 
10
12
  import FeedBackSnackers from "@ogw_f/components/FeedBack/Snackers.vue"
@@ -16,6 +18,25 @@ const vuetify = createVuetify({
16
18
 
17
19
  describe("FeedBackSnackers.vue", async () => {
18
20
  test(`Test delete error`, async () => {
21
+ const pinia = createTestingPinia({
22
+ initialState: {
23
+ feedback: {
24
+ feedbacks: [
25
+ {
26
+ type: "error",
27
+ code: 500,
28
+ route: "/test",
29
+ name: "test message",
30
+ description: "test description",
31
+ },
32
+ ],
33
+ },
34
+ },
35
+ stubActions: false,
36
+ createSpy: vi.fn,
37
+ })
38
+ setActivePinia(pinia)
39
+ const feedback_store = useFeedbackStore()
19
40
  const wrapper = mount(
20
41
  {
21
42
  template: "<v-layout><FeedBackSnackers/></v-layout>",
@@ -26,29 +47,11 @@ describe("FeedBackSnackers.vue", async () => {
26
47
  components: {
27
48
  FeedBackSnackers,
28
49
  },
29
- plugins: [
30
- createTestingPinia({
31
- initialState: {
32
- feedback: {
33
- feedbacks: [
34
- {
35
- type: "error",
36
- code: 500,
37
- route: "/test",
38
- name: "test message",
39
- description: "test description",
40
- },
41
- ],
42
- },
43
- },
44
- stubActions: false,
45
- }),
46
- vuetify,
47
- ],
50
+ plugins: [pinia, vuetify],
48
51
  },
49
52
  },
50
53
  )
51
- const feedback_store = use_feedback_store()
54
+
52
55
  expect(feedback_store.feedbacks.length).toBe(1)
53
56
  const v_btn = await wrapper.findComponent(components.VBtn)
54
57
  await v_btn.trigger("click")
@@ -23,9 +23,12 @@ const vuetify = createVuetify({
23
23
  })
24
24
 
25
25
  describe("FileSelector.vue", async () => {
26
- const pinia = createTestingPinia()
26
+ const pinia = createTestingPinia({
27
+ stubActions: false,
28
+ createSpy: vi.fn,
29
+ })
27
30
  setActivePinia(pinia)
28
- const geode_store = use_geode_store()
31
+ const geode_store = useGeodeStore()
29
32
  geode_store.base_url = ""
30
33
 
31
34
  test(`Select file`, async () => {