From 6f1f9b652f973fee9654f3aefc3089a688e242ff Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 2 Feb 2026 15:16:27 +0100 Subject: [PATCH 01/16] fix treeview behavior --- app/components/Viewer/TreeObject.vue | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/components/Viewer/TreeObject.vue b/app/components/Viewer/TreeObject.vue index 069d9c7e..151581a9 100644 --- a/app/components/Viewer/TreeObject.vue +++ b/app/components/Viewer/TreeObject.vue @@ -23,11 +23,9 @@ return } const { added, removed } = compareSelections(current, previous) - - added.forEach((item) => { - dataStyleStore.setVisibility(item.id, true) - }) - + for (const item of added) { + await dataStyleStore.setVisibility(item.id, true) + } for (const item of removed) { await dataStyleStore.setVisibility(item.id, false) } From b65385864798938cf3465d9b9f656609222d1221 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 2 Feb 2026 15:17:07 +0100 Subject: [PATCH 02/16] fix(IntegrationTests): better coverage --- app/utils/default_styles.js | 1 - .../stores/data_style/mesh/cells.nuxt.test.js | 9 + .../stores/data_style/mesh/edges.nuxt.test.js | 217 +++++++++--------- .../data_style/mesh/points.nuxt.test.js | 9 + .../data_style/mesh/polygons.nuxt.test.js | 9 + .../data_style/mesh/polyhedra.nuxt.test.js | 9 + 6 files changed, 146 insertions(+), 108 deletions(-) diff --git a/app/utils/default_styles.js b/app/utils/default_styles.js index 58a61bde..09942b26 100644 --- a/app/utils/default_styles.js +++ b/app/utils/default_styles.js @@ -1,5 +1,4 @@ // Global variables - const points_defaultVisibility = true const edges_defaultVisibility = true const cells_defaultVisibility = true diff --git a/tests/integration/stores/data_style/mesh/cells.nuxt.test.js b/tests/integration/stores/data_style/mesh/cells.nuxt.test.js index ab449825..c9dadb6b 100644 --- a/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +++ b/tests/integration/stores/data_style/mesh/cells.nuxt.test.js @@ -172,4 +172,13 @@ describe("Mesh cells", () => { } }) }) + + test("Cells apply default style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyMeshCellsStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) }) diff --git a/tests/integration/stores/data_style/mesh/edges.nuxt.test.js b/tests/integration/stores/data_style/mesh/edges.nuxt.test.js index 02004893..a24e042e 100644 --- a/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +++ b/tests/integration/stores/data_style/mesh/edges.nuxt.test.js @@ -39,120 +39,123 @@ afterEach(async () => { }) describe("Mesh edges", () => { - describe("Edges", () => { - test("Edges visibility", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() - const visibility = true - const spy = vi.spyOn(viewerStore, "request") - const result = dataStyleStore.setMeshEdgesVisibility(id, visibility) - expect(result).toBeInstanceOf(Promise) - await result - expect(spy).toHaveBeenCalledWith( - mesh_edges_schemas.visibility, - { id, visibility }, - { - response_function: expect.any(Function), - }, - ) - expect(dataStyleStore.meshEdgesVisibility(id)).toBe(visibility) - expect(viewerStore.status).toBe(Status.CONNECTED) - }) + test("Edges visibility", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const visibility = true + const spy = vi.spyOn(viewerStore, "request") + const result = dataStyleStore.setMeshEdgesVisibility(id, visibility) + expect(result).toBeInstanceOf(Promise) + await result + expect(spy).toHaveBeenCalledWith( + mesh_edges_schemas.visibility, + { id, visibility }, + { + response_function: expect.any(Function), + }, + ) + expect(dataStyleStore.meshEdgesVisibility(id)).toBe(visibility) + expect(viewerStore.status).toBe(Status.CONNECTED) + }) - test("Edges color red", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() - const color = { r: 255, g: 0, b: 0 } - const spy = vi.spyOn(viewerStore, "request") - const result = dataStyleStore.setMeshEdgesColor(id, color) - expect(result).toBeInstanceOf(Promise) - await result - expect(spy).toHaveBeenCalledWith( - mesh_edges_schemas.color, - { id, color }, - { - response_function: expect.any(Function), - }, - ) - expect(dataStyleStore.meshEdgesColor(id)).toStrictEqual(color) - expect(viewerStore.status).toBe(Status.CONNECTED) - }) + test("Edges color red", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const color = { r: 255, g: 0, b: 0 } + const spy = vi.spyOn(viewerStore, "request") + const result = dataStyleStore.setMeshEdgesColor(id, color) + expect(result).toBeInstanceOf(Promise) + await result + expect(spy).toHaveBeenCalledWith( + mesh_edges_schemas.color, + { id, color }, + { + response_function: expect.any(Function), + }, + ) + expect(dataStyleStore.meshEdgesColor(id)).toStrictEqual(color) + expect(viewerStore.status).toBe(Status.CONNECTED) + }) - test("Edges vertex attribute", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() + test("Edges vertex attribute", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() - const spy = vi.spyOn(viewerStore, "request") - await dataStyleStore.setMeshEdgesVertexAttribute(id, vertex_attribute) - expect(spy).toHaveBeenCalledWith( - mesh_edges_schemas.vertex_attribute, - { id, ...vertex_attribute }, - { - response_function: expect.any(Function), - }, - ) - expect(dataStyleStore.meshEdgesVertexAttribute(id)).toStrictEqual( - vertex_attribute, - ) - expect(viewerStore.status).toBe(Status.CONNECTED) - }) + const spy = vi.spyOn(viewerStore, "request") + await dataStyleStore.setMeshEdgesVertexAttribute(id, vertex_attribute) + expect(spy).toHaveBeenCalledWith( + mesh_edges_schemas.vertex_attribute, + { id, ...vertex_attribute }, + { + response_function: expect.any(Function), + }, + ) + expect(dataStyleStore.meshEdgesVertexAttribute(id)).toStrictEqual( + vertex_attribute, + ) + expect(viewerStore.status).toBe(Status.CONNECTED) + }) - test("Edges edge attribute", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() + test("Edges edge attribute", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() - const spy = vi.spyOn(viewerStore, "request") - await dataStyleStore.setMeshEdgesEdgeAttribute(id, edge_attribute) - expect(spy).toHaveBeenCalledWith( - mesh_edges_schemas.edge_attribute, - { id, ...edge_attribute }, - { - response_function: expect.any(Function), - }, + const spy = vi.spyOn(viewerStore, "request") + await dataStyleStore.setMeshEdgesEdgeAttribute(id, edge_attribute) + expect(spy).toHaveBeenCalledWith( + mesh_edges_schemas.edge_attribute, + { id, ...edge_attribute }, + { + response_function: expect.any(Function), + }, + ) + expect(dataStyleStore.meshEdgesEdgeAttribute(id)).toStrictEqual( + edge_attribute, + ) + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + + test("Edges active coloring", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const coloringTypes = [ + { name: "color" }, + { + name: "vertex", + function: () => + dataStyleStore.setMeshEdgesVertexAttribute(id, vertex_attribute), + }, + { + name: "edge", + function: () => + dataStyleStore.setMeshEdgesEdgeAttribute(id, edge_attribute), + }, + ] + for (let i = 0; i < coloringTypes.length; i++) { + if (coloringTypes[i].function) { + expect(() => + dataStyleStore.setMeshEdgesActiveColoring(id, coloringTypes[i].name), + ).toThrowError() + await coloringTypes[i].function() + } + const result = dataStyleStore.setMeshEdgesActiveColoring( + id, + coloringTypes[i].name, ) - expect(dataStyleStore.meshEdgesEdgeAttribute(id)).toStrictEqual( - edge_attribute, + expect(result).toBeInstanceOf(Promise) + await result + expect(dataStyleStore.meshEdgesActiveColoring(id)).toBe( + coloringTypes[i].name, ) expect(viewerStore.status).toBe(Status.CONNECTED) - }) - - test("Edges active coloring", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() - const coloringTypes = [ - { name: "color" }, - { - name: "vertex", - function: () => - dataStyleStore.setMeshEdgesVertexAttribute(id, vertex_attribute), - }, - { - name: "edge", - function: () => - dataStyleStore.setMeshEdgesEdgeAttribute(id, edge_attribute), - }, - ] - for (let i = 0; i < coloringTypes.length; i++) { - if (coloringTypes[i].function) { - expect(() => - dataStyleStore.setMeshEdgesActiveColoring( - id, - coloringTypes[i].name, - ), - ).toThrowError() - await coloringTypes[i].function() - } - const result = dataStyleStore.setMeshEdgesActiveColoring( - id, - coloringTypes[i].name, - ) - expect(result).toBeInstanceOf(Promise) - await result - expect(dataStyleStore.meshEdgesActiveColoring(id)).toBe( - coloringTypes[i].name, - ) - expect(viewerStore.status).toBe(Status.CONNECTED) - } - }) + } + }) + test("Edges apply style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyMeshEdgesStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) }) }) diff --git a/tests/integration/stores/data_style/mesh/points.nuxt.test.js b/tests/integration/stores/data_style/mesh/points.nuxt.test.js index dd0aff00..f48e857a 100644 --- a/tests/integration/stores/data_style/mesh/points.nuxt.test.js +++ b/tests/integration/stores/data_style/mesh/points.nuxt.test.js @@ -155,4 +155,13 @@ describe("Mesh points", () => { expect(viewerStore.status).toBe(Status.CONNECTED) }) }) + + test("Points apply default style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyMeshPointsStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) }) diff --git a/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js b/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js index 51ee6254..a7408b95 100644 --- a/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +++ b/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js @@ -176,4 +176,13 @@ describe("Mesh polygons", () => { } }) }) + + test("Polygons apply default style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyMeshPolygonsStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) }) diff --git a/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js b/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js index c83202f3..ed3ba99f 100644 --- a/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +++ b/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js @@ -164,4 +164,13 @@ describe("Mesh polyhedra", () => { ) expect(viewerStore.status).toBe(Status.CONNECTED) }) + + test("Polyhedra apply default style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyMeshPolyhedraStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) }) From 1fc6bf18d1bfd146f892f89f8ebf01e0e4132a86 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 3 Feb 2026 13:21:50 +0100 Subject: [PATCH 03/16] re trigger tests From a857ed70215cdc163ee794aac24cdc8ec9590073 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 3 Feb 2026 13:24:14 +0100 Subject: [PATCH 04/16] revert some changes --- .../stores/data_style/mesh/edges.nuxt.test.js | 221 +++++++++--------- 1 file changed, 113 insertions(+), 108 deletions(-) diff --git a/tests/integration/stores/data_style/mesh/edges.nuxt.test.js b/tests/integration/stores/data_style/mesh/edges.nuxt.test.js index a24e042e..64cea744 100644 --- a/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +++ b/tests/integration/stores/data_style/mesh/edges.nuxt.test.js @@ -39,123 +39,128 @@ afterEach(async () => { }) describe("Mesh edges", () => { - test("Edges visibility", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() - const visibility = true - const spy = vi.spyOn(viewerStore, "request") - const result = dataStyleStore.setMeshEdgesVisibility(id, visibility) - expect(result).toBeInstanceOf(Promise) - await result - expect(spy).toHaveBeenCalledWith( - mesh_edges_schemas.visibility, - { id, visibility }, - { - response_function: expect.any(Function), - }, - ) - expect(dataStyleStore.meshEdgesVisibility(id)).toBe(visibility) - expect(viewerStore.status).toBe(Status.CONNECTED) - }) + describe("Edges", () => { + test("Edges visibility", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const visibility = true + const spy = vi.spyOn(viewerStore, "request") + const result = dataStyleStore.setMeshEdgesVisibility(id, visibility) + expect(result).toBeInstanceOf(Promise) + await result + expect(spy).toHaveBeenCalledWith( + mesh_edges_schemas.visibility, + { id, visibility }, + { + response_function: expect.any(Function), + }, + ) + expect(dataStyleStore.meshEdgesVisibility(id)).toBe(visibility) + expect(viewerStore.status).toBe(Status.CONNECTED) + }) - test("Edges color red", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() - const color = { r: 255, g: 0, b: 0 } - const spy = vi.spyOn(viewerStore, "request") - const result = dataStyleStore.setMeshEdgesColor(id, color) - expect(result).toBeInstanceOf(Promise) - await result - expect(spy).toHaveBeenCalledWith( - mesh_edges_schemas.color, - { id, color }, - { - response_function: expect.any(Function), - }, - ) - expect(dataStyleStore.meshEdgesColor(id)).toStrictEqual(color) - expect(viewerStore.status).toBe(Status.CONNECTED) - }) + test("Edges color red", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const color = { r: 255, g: 0, b: 0 } + const spy = vi.spyOn(viewerStore, "request") + const result = dataStyleStore.setMeshEdgesColor(id, color) + expect(result).toBeInstanceOf(Promise) + await result + expect(spy).toHaveBeenCalledWith( + mesh_edges_schemas.color, + { id, color }, + { + response_function: expect.any(Function), + }, + ) + expect(dataStyleStore.meshEdgesColor(id)).toStrictEqual(color) + expect(viewerStore.status).toBe(Status.CONNECTED) + }) - test("Edges vertex attribute", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() + test("Edges vertex attribute", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() - const spy = vi.spyOn(viewerStore, "request") - await dataStyleStore.setMeshEdgesVertexAttribute(id, vertex_attribute) - expect(spy).toHaveBeenCalledWith( - mesh_edges_schemas.vertex_attribute, - { id, ...vertex_attribute }, - { - response_function: expect.any(Function), - }, - ) - expect(dataStyleStore.meshEdgesVertexAttribute(id)).toStrictEqual( - vertex_attribute, - ) - expect(viewerStore.status).toBe(Status.CONNECTED) - }) + const spy = vi.spyOn(viewerStore, "request") + await dataStyleStore.setMeshEdgesVertexAttribute(id, vertex_attribute) + expect(spy).toHaveBeenCalledWith( + mesh_edges_schemas.vertex_attribute, + { id, ...vertex_attribute }, + { + response_function: expect.any(Function), + }, + ) + expect(dataStyleStore.meshEdgesVertexAttribute(id)).toStrictEqual( + vertex_attribute, + ) + expect(viewerStore.status).toBe(Status.CONNECTED) + }) - test("Edges edge attribute", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() + test("Edges edge attribute", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() - const spy = vi.spyOn(viewerStore, "request") - await dataStyleStore.setMeshEdgesEdgeAttribute(id, edge_attribute) - expect(spy).toHaveBeenCalledWith( - mesh_edges_schemas.edge_attribute, - { id, ...edge_attribute }, - { - response_function: expect.any(Function), - }, - ) - expect(dataStyleStore.meshEdgesEdgeAttribute(id)).toStrictEqual( - edge_attribute, - ) - expect(viewerStore.status).toBe(Status.CONNECTED) - }) + const spy = vi.spyOn(viewerStore, "request") + await dataStyleStore.setMeshEdgesEdgeAttribute(id, edge_attribute) + expect(spy).toHaveBeenCalledWith( + mesh_edges_schemas.edge_attribute, + { id, ...edge_attribute }, + { + response_function: expect.any(Function), + }, + ) + expect(dataStyleStore.meshEdgesEdgeAttribute(id)).toStrictEqual( + edge_attribute, + ) + expect(viewerStore.status).toBe(Status.CONNECTED) + }) - test("Edges active coloring", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() - const coloringTypes = [ - { name: "color" }, - { - name: "vertex", - function: () => - dataStyleStore.setMeshEdgesVertexAttribute(id, vertex_attribute), - }, - { - name: "edge", - function: () => - dataStyleStore.setMeshEdgesEdgeAttribute(id, edge_attribute), - }, - ] - for (let i = 0; i < coloringTypes.length; i++) { - if (coloringTypes[i].function) { - expect(() => - dataStyleStore.setMeshEdgesActiveColoring(id, coloringTypes[i].name), - ).toThrowError() - await coloringTypes[i].function() + test("Edges active coloring", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const coloringTypes = [ + { name: "color" }, + { + name: "vertex", + function: () => + dataStyleStore.setMeshEdgesVertexAttribute(id, vertex_attribute), + }, + { + name: "edge", + function: () => + dataStyleStore.setMeshEdgesEdgeAttribute(id, edge_attribute), + }, + ] + for (let i = 0; i < coloringTypes.length; i++) { + if (coloringTypes[i].function) { + expect(() => + dataStyleStore.setMeshEdgesActiveColoring( + id, + coloringTypes[i].name, + ), + ).toThrowError() + await coloringTypes[i].function() + } + const result = dataStyleStore.setMeshEdgesActiveColoring( + id, + coloringTypes[i].name, + ) + expect(result).toBeInstanceOf(Promise) + await result + expect(dataStyleStore.meshEdgesActiveColoring(id)).toBe( + coloringTypes[i].name, + ) + expect(viewerStore.status).toBe(Status.CONNECTED) } - const result = dataStyleStore.setMeshEdgesActiveColoring( - id, - coloringTypes[i].name, - ) + }) + test("Edges apply style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyMeshEdgesStyle(id) expect(result).toBeInstanceOf(Promise) await result - expect(dataStyleStore.meshEdgesActiveColoring(id)).toBe( - coloringTypes[i].name, - ) expect(viewerStore.status).toBe(Status.CONNECTED) - } - }) - test("Edges apply style", async () => { - const dataStyleStore = useDataStyleStore() - const viewerStore = useViewerStore() - const result = dataStyleStore.applyMeshEdgesStyle(id) - expect(result).toBeInstanceOf(Promise) - await result - expect(viewerStore.status).toBe(Status.CONNECTED) + }) }) }) From 46957968146e687f3f0af65978fe05da8dde07d6 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Tue, 3 Feb 2026 12:25:24 +0000 Subject: [PATCH 05/16] Apply prepare changes --- tests/integration/microservices/back/requirements.txt | 1 - tests/integration/microservices/viewer/requirements.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/tests/integration/microservices/back/requirements.txt b/tests/integration/microservices/back/requirements.txt index 3cbc7045..bd3a3ef5 100644 --- a/tests/integration/microservices/back/requirements.txt +++ b/tests/integration/microservices/back/requirements.txt @@ -5,4 +5,3 @@ # pip-compile --output-file=tests/integration/microservices/back/requirements.txt tests/integration/microservices/back/requirements.in # -opengeodeweb-back==6.*,>=6.1.0rc2 diff --git a/tests/integration/microservices/viewer/requirements.txt b/tests/integration/microservices/viewer/requirements.txt index 39137326..4d097394 100644 --- a/tests/integration/microservices/viewer/requirements.txt +++ b/tests/integration/microservices/viewer/requirements.txt @@ -5,4 +5,3 @@ # pip-compile --output-file=tests/integration/microservices/viewer/requirements.txt tests/integration/microservices/viewer/requirements.in # -opengeodeweb-viewer==1.*,>=1.15.0 From 790f6f27d9258864c7e0164973619f0904582487 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 3 Feb 2026 14:26:32 +0100 Subject: [PATCH 06/16] Mesh components apply style --- .../data_style/model/blocks.nuxt.test.js | 63 +++++++++++-------- .../data_style/model/corners.nuxt.test.js | 11 ++++ .../data_style/model/edges.nuxt.test.js | 10 +++ .../data_style/model/lines.nuxt.test.js | 10 +++ .../data_style/model/points.nuxt.test.js | 10 +++ .../data_style/model/surfaces.nuxt.test.js | 10 +++ 6 files changed, 89 insertions(+), 25 deletions(-) diff --git a/tests/integration/stores/data_style/model/blocks.nuxt.test.js b/tests/integration/stores/data_style/model/blocks.nuxt.test.js index a402e4be..859a0249 100644 --- a/tests/integration/stores/data_style/model/blocks.nuxt.test.js +++ b/tests/integration/stores/data_style/model/blocks.nuxt.test.js @@ -74,29 +74,42 @@ describe("Model blocks", () => { }) }) - // describe("Blocks color", () => { - // test("Color red", async () => { - // const dataStyleStore = useDataStyleStore() - // const viewerStore = useViewerStore() - // const dataStore = useDataStore() - // const block_ids = await dataStore.getBlocksGeodeIds(id) - // const block_viewer_ids = dataStore.getMeshComponentsViewerIds(id, block_ids) - // const color = { r: 255, g: 0, b: 0 } - // const spy = vi.spyOn(viewerStore, "request") - // await dataStyleStore.setModelBlocksColor(id, block_ids, color) - // expect(spy).toHaveBeenCalledWith( - // model_blocks_schemas.color, - // { id, block_ids: block_viewer_ids, color }, - // { - // response_function: expect.any(Function), - // }, - // ) - // for (const block_id of block_ids) { - // expect(dataStyleStore.modelBlockColor(id, block_id)).toStrictEqual( - // color, - // ) - // } - // expect(viewerStore.status).toBe(Status.CONNECTED) - // }) - // }) + describe("Blocks color", () => { + test("Color red", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const dataStore = useDataStore() + const block_ids = await dataStore.getBlocksGeodeIds(id) + const block_viewer_ids = dataStore.getMeshComponentsViewerIds( + id, + block_ids, + ) + const color = { r: 255, g: 0, b: 0 } + const spy = vi.spyOn(viewerStore, "request") + await dataStyleStore.setModelBlocksColor(id, block_ids, color) + expect(spy).toHaveBeenCalledWith( + model_blocks_schemas.color, + { id, block_ids: block_viewer_ids, color }, + { + response_function: expect.any(Function), + }, + ) + for (const block_id of block_ids) { + expect(dataStyleStore.modelBlockColor(id, block_id)).toStrictEqual( + color, + ) + } + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + }) + describe("Blocks style", () => { + test("Blocks apply style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyModelBlocksStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + }) }) diff --git a/tests/integration/stores/data_style/model/corners.nuxt.test.js b/tests/integration/stores/data_style/model/corners.nuxt.test.js index 5804db71..da16637e 100644 --- a/tests/integration/stores/data_style/model/corners.nuxt.test.js +++ b/tests/integration/stores/data_style/model/corners.nuxt.test.js @@ -105,4 +105,15 @@ describe("Model corners", () => { expect(viewerStore.status).toBe(Status.CONNECTED) }) }) + + describe("Corner style", () => { + test("Corners apply style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyModelCornersStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + }) }) diff --git a/tests/integration/stores/data_style/model/edges.nuxt.test.js b/tests/integration/stores/data_style/model/edges.nuxt.test.js index 49d7f447..08d020d4 100644 --- a/tests/integration/stores/data_style/model/edges.nuxt.test.js +++ b/tests/integration/stores/data_style/model/edges.nuxt.test.js @@ -58,4 +58,14 @@ describe("Model edges", () => { expect(viewerStore.status).toBe(Status.CONNECTED) }) }) + describe("Edges style", () => { + test("Edges apply style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyModelEdgesStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + }) }) diff --git a/tests/integration/stores/data_style/model/lines.nuxt.test.js b/tests/integration/stores/data_style/model/lines.nuxt.test.js index 4b8b03d0..a3f5cc64 100644 --- a/tests/integration/stores/data_style/model/lines.nuxt.test.js +++ b/tests/integration/stores/data_style/model/lines.nuxt.test.js @@ -97,4 +97,14 @@ describe("Model lines", () => { expect(viewerStore.status).toBe(Status.CONNECTED) }) }) + describe("Lines style", () => { + test("Lines apply style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyModelLinesStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + }) }) diff --git a/tests/integration/stores/data_style/model/points.nuxt.test.js b/tests/integration/stores/data_style/model/points.nuxt.test.js index a9c1f832..022b1240 100644 --- a/tests/integration/stores/data_style/model/points.nuxt.test.js +++ b/tests/integration/stores/data_style/model/points.nuxt.test.js @@ -75,4 +75,14 @@ describe("Model points", () => { expect(viewerStore.status).toBe(Status.CONNECTED) }) }) + describe("Points style", () => { + test("Points apply style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyModelPointsStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + }) }) diff --git a/tests/integration/stores/data_style/model/surfaces.nuxt.test.js b/tests/integration/stores/data_style/model/surfaces.nuxt.test.js index 7ae88ffb..a32f5604 100644 --- a/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +++ b/tests/integration/stores/data_style/model/surfaces.nuxt.test.js @@ -109,4 +109,14 @@ describe("Model surfaces", () => { expect(viewerStore.status).toBe(Status.CONNECTED) }) }) + describe("Surfaces style", () => { + test("Surfaces apply style", async () => { + const dataStyleStore = useDataStyleStore() + const viewerStore = useViewerStore() + const result = dataStyleStore.applyModelSurfacesStyle(id) + expect(result).toBeInstanceOf(Promise) + await result + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + }) }) From 2b77b45944ed30cc52b30f0b28c50b51f17a597c Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 3 Feb 2026 15:38:27 +0100 Subject: [PATCH 07/16] tests okay --- tests/integration/stores/data_style/model/blocks.nuxt.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/stores/data_style/model/blocks.nuxt.test.js b/tests/integration/stores/data_style/model/blocks.nuxt.test.js index 859a0249..79613c00 100644 --- a/tests/integration/stores/data_style/model/blocks.nuxt.test.js +++ b/tests/integration/stores/data_style/model/blocks.nuxt.test.js @@ -80,7 +80,7 @@ describe("Model blocks", () => { const viewerStore = useViewerStore() const dataStore = useDataStore() const block_ids = await dataStore.getBlocksGeodeIds(id) - const block_viewer_ids = dataStore.getMeshComponentsViewerIds( + const block_viewer_ids = await dataStore.getMeshComponentsViewerIds( id, block_ids, ) From a3b6c28a1901c4ba364f299ce4a21970ed0ddb04 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 3 Feb 2026 16:40:32 +0100 Subject: [PATCH 08/16] test timeout --- app/stores/viewer.js | 10 +++++++--- internal/utils/viewer_call.js | 4 ++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/stores/viewer.js b/app/stores/viewer.js index 97fe83ae..6b87e580 100644 --- a/app/stores/viewer.js +++ b/app/stores/viewer.js @@ -7,6 +7,8 @@ import { appMode } from "@ogw_front/utils/app_mode" import { viewer_call } from "../../internal/utils/viewer_call" import { useInfraStore } from "@ogw_front/stores/infra" +const request_timeout = 10 * 1000 + export const useViewerStore = defineStore("viewer", { state: () => ({ default_local_port: "1234", @@ -107,8 +109,9 @@ export const useViewerStore = defineStore("viewer", { }) // Connect - const { connectImageStream } = - await import("@kitware/vtk.js/Rendering/Misc/RemoteView") + const { connectImageStream } = await import( + "@kitware/vtk.js/Rendering/Misc/RemoteView" + ) const viewerStore = this return new Promise((resolve, reject) => { clientToConnect @@ -148,7 +151,7 @@ export const useViewerStore = defineStore("viewer", { await this.ws_connect() console.log("[VIEWER] Viewer connected successfully") }, - request(schema, params = {}, callbacks = {}) { + request(schema, params = {}, callbacks = {}, timeout = request_timeout) { console.log("[VIEWER] Request:", schema.$id) return viewer_call( @@ -163,6 +166,7 @@ export const useViewerStore = defineStore("viewer", { } }, }, + timeout, ) }, }, diff --git a/internal/utils/viewer_call.js b/internal/utils/viewer_call.js index 72c23978..bf8ea01d 100644 --- a/internal/utils/viewer_call.js +++ b/internal/utils/viewer_call.js @@ -5,6 +5,7 @@ export function viewer_call( microservice, { schema, params = {} }, { request_error_function, response_function, response_error_function } = {}, + timeout, ) { const feedbackStore = useFeedbackStore() @@ -26,6 +27,9 @@ export function viewer_call( return } microservice.start_request() + setTimeout(() => { + reject(`${schema.$id}: Timed out after ${timeout}ms, ${schema} ${params}`) + }, timeout) client .getConnection() .getSession() From 7ed3dc2e53a55698f4e1b5a413aa642eeeda56d3 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Tue, 3 Feb 2026 15:41:23 +0000 Subject: [PATCH 09/16] Apply prepare changes --- app/stores/viewer.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/stores/viewer.js b/app/stores/viewer.js index 6b87e580..34934369 100644 --- a/app/stores/viewer.js +++ b/app/stores/viewer.js @@ -109,9 +109,8 @@ export const useViewerStore = defineStore("viewer", { }) // Connect - const { connectImageStream } = await import( - "@kitware/vtk.js/Rendering/Misc/RemoteView" - ) + const { connectImageStream } = + await import("@kitware/vtk.js/Rendering/Misc/RemoteView") const viewerStore = this return new Promise((resolve, reject) => { clientToConnect From eebefd86d3da235e4a907f87c6e4019f202a8de8 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 3 Feb 2026 16:50:01 +0100 Subject: [PATCH 10/16] timeout undefined --- app/composables/project_manager.js | 1 + app/stores/viewer.js | 12 +++++++++--- internal/utils/viewer_call.js | 11 ++++++++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/composables/project_manager.js b/app/composables/project_manager.js index fbafeb21..7590090f 100644 --- a/app/composables/project_manager.js +++ b/app/composables/project_manager.js @@ -51,6 +51,7 @@ export function useProjectManager() { await viewerStore.request( viewer_schemas.opengeodeweb_viewer.viewer.reset_visualization, {}, + undefined, ) treeviewStore.clear() diff --git a/app/stores/viewer.js b/app/stores/viewer.js index 6b87e580..5e86f902 100644 --- a/app/stores/viewer.js +++ b/app/stores/viewer.js @@ -120,9 +120,15 @@ export const useViewerStore = defineStore("viewer", { connectImageStream(validClient.getConnection().getSession()) viewerStore.client = validClient clientToConnect.endBusy() - viewer_call(viewerStore, { - schema: schemas.opengeodeweb_viewer.viewer.reset_visualization, - }) + viewer_call( + viewerStore, + { + schema: + schemas.opengeodeweb_viewer.viewer.reset_visualization, + }, + {}, + undefined, + ) viewerStore.status = Status.CONNECTED resolve() }) diff --git a/internal/utils/viewer_call.js b/internal/utils/viewer_call.js index bf8ea01d..32fff4c5 100644 --- a/internal/utils/viewer_call.js +++ b/internal/utils/viewer_call.js @@ -27,9 +27,14 @@ export function viewer_call( return } microservice.start_request() - setTimeout(() => { - reject(`${schema.$id}: Timed out after ${timeout}ms, ${schema} ${params}`) - }, timeout) + + if (timeout !== undefined) { + setTimeout(() => { + reject( + `${schema.$id}: Timed out after ${timeout}ms, ${schema} ${params}`, + ) + }, timeout) + } client .getConnection() .getSession() From d260e6c37d564c5ebb8b7ebb62185cfb3ddcd1fe Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 3 Feb 2026 19:50:08 +0100 Subject: [PATCH 11/16] test timeout reject --- app/stores/viewer.js | 8 ++-- internal/utils/viewer_call.js | 25 ++++++----- tests/integration/setup.js | 26 +++++++----- tests/unit/stores/Viewer.nuxt.test.js | 61 ++++++++++++++++++--------- 4 files changed, 75 insertions(+), 45 deletions(-) diff --git a/app/stores/viewer.js b/app/stores/viewer.js index 8e0aec7c..f495d13d 100644 --- a/app/stores/viewer.js +++ b/app/stores/viewer.js @@ -109,8 +109,9 @@ export const useViewerStore = defineStore("viewer", { }) // Connect - const { connectImageStream } = - await import("@kitware/vtk.js/Rendering/Misc/RemoteView") + const { connectImageStream } = await import( + "@kitware/vtk.js/Rendering/Misc/RemoteView" + ) const viewerStore = this return new Promise((resolve, reject) => { clientToConnect @@ -125,8 +126,7 @@ export const useViewerStore = defineStore("viewer", { schema: schemas.opengeodeweb_viewer.viewer.reset_visualization, }, - {}, - undefined, + { timeout: undefined }, ) viewerStore.status = Status.CONNECTED resolve() diff --git a/internal/utils/viewer_call.js b/internal/utils/viewer_call.js index 32fff4c5..241c0bef 100644 --- a/internal/utils/viewer_call.js +++ b/internal/utils/viewer_call.js @@ -4,8 +4,12 @@ import { useFeedbackStore } from "@ogw_front/stores/feedback" export function viewer_call( microservice, { schema, params = {} }, - { request_error_function, response_function, response_error_function } = {}, - timeout, + { + request_error_function, + response_function, + response_error_function, + timeout, + } = {}, ) { const feedbackStore = useFeedbackStore() @@ -21,20 +25,13 @@ export function viewer_call( const client = microservice.client - return new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { if (!client.getConnection) { resolve() return } microservice.start_request() - if (timeout !== undefined) { - setTimeout(() => { - reject( - `${schema.$id}: Timed out after ${timeout}ms, ${schema} ${params}`, - ) - }, timeout) - } client .getConnection() .getSession() @@ -69,6 +66,14 @@ export function viewer_call( microservice.stop_request() }) }) + if (timeout !== undefined && timeout > 0) { + const timeoutPromise = setTimeout(() => { + reject(`${schema.$id}: Timed out after ${timeout}ms, ${schema} ${params}`) + }, timeout) + return Promise.race([promise, timeoutPromise]) + } else { + return promise + } } export default viewer_call diff --git a/tests/integration/setup.js b/tests/integration/setup.js index 480d9784..ef879aa9 100644 --- a/tests/integration/setup.js +++ b/tests/integration/setup.js @@ -25,12 +25,7 @@ import { // Local constants const data_folder = path.join("tests", "integration", "data") -async function setupIntegrationTests(file_name, geode_object) { - const pinia = createTestingPinia({ - stubActions: false, - createSpy: vi.fn, - }) - setActivePinia(pinia) +async function runMicroservices() { const geodeStore = useGeodeStore() // const hybridViewerStore = useHybridViewerStore() const infraStore = useInfraStore() @@ -61,11 +56,22 @@ async function setupIntegrationTests(file_name, geode_object) { geodeStore.default_local_port = back_port viewerStore.default_local_port = viewer_port console.log("after ports") + + return { back_port, viewer_port, project_folder_path } +} + +async function setupIntegrationTests(file_name, geode_object) { + const pinia = createTestingPinia({ + stubActions: false, + createSpy: vi.fn, + }) + setActivePinia(pinia) + const viewerStore = useViewerStore() + + const { back_port, viewer_port, project_folder_path } = + await runMicroservices() await viewerStore.ws_connect() - // await hybridViewerStore.initHybridViewer() - console.log("after hybridViewerStore.initHybridViewer") - // await viewerStore.ws_connect() const id = await importFile(file_name, geode_object) expect(viewerStore.status).toBe(Status.CONNECTED) console.log("end of setupIntegrationTests") @@ -91,4 +97,4 @@ afterAll(() => { delete global.WebSocket }) -export { setupIntegrationTests } +export { runMicroservices, setupIntegrationTests } diff --git a/tests/unit/stores/Viewer.nuxt.test.js b/tests/unit/stores/Viewer.nuxt.test.js index 0e609af1..9434a48f 100644 --- a/tests/unit/stores/Viewer.nuxt.test.js +++ b/tests/unit/stores/Viewer.nuxt.test.js @@ -1,5 +1,4 @@ // Global imports -import path from "path" // Third party imports import { setActivePinia } from "pinia" @@ -16,14 +15,17 @@ import { } from "vitest" import { WebSocket } from "ws" +import opengeodeweb_viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json" // Local imports import { useViewerStore } from "@ogw_front/stores/viewer" import { useInfraStore } from "@ogw_front/stores/infra" - import { appMode } from "@ogw_front/utils/app_mode" import Status from "@ogw_front/utils/status" +import { runMicroservices } from "../../integration/setup" +import { time } from "console" + // Mock navigator.locks API const mockLockRequest = vi.fn().mockImplementation(async (name, callback) => { return callback({ name }) @@ -121,9 +123,10 @@ describe("Viewer Store", () => { describe("base_url", () => { test("test app_mode DESKTOP", () => { const infraStore = useInfraStore() + const viewerStore = useViewerStore() infraStore.app_mode = appMode.DESKTOP infraStore.domain_name = "localhost" - // expect(viewerStore.base_url).toBe("ws://localhost:1234/ws") + expect(viewerStore.base_url).toBe("ws://localhost:1234/ws") }) test("test app_mode CLOUD", () => { @@ -162,24 +165,40 @@ describe("Viewer Store", () => { }) }) describe("actions", () => { - // test("ws_connect", async () => { - // const infraStore = useInfraStore() - // const viewerStore = useViewerStore() - // infraStore.app_mode = appMode.BROWSER - // const viewer_path = path.join( - // executable_path( - // path.join("tests", "integration", "microservices", "viewer"), - // ), - // executable_name("opengeodeweb_viewer"), - // ) - // const viewer_port = await run_viewer(viewer_path, { - // port: 1234, - // data_folder_path: "./data", - // }) - // viewerStore.default_local_port = viewer_port - // await viewerStore.ws_connect() - // expect(viewerStore.status).toBe(Status.CONNECTED) - // }, 10000) + describe("ws_connect", () => { + test("ws_connect", async () => { + await runMicroservices() + const viewerStore = useViewerStore() + await viewerStore.ws_connect() + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + }) + describe("connect", () => { + test("connect", async () => { + await runMicroservices() + const viewerStore = useViewerStore() + await viewerStore.connect() + expect(viewerStore.status).toBe(Status.CONNECTED) + }) + }) + + describe("request", () => { + test("request", async () => { + const schema = + opengeodeweb_viewer_schemas.opengeodeweb_viewer.viewer.render + await runMicroservices() + const viewerStore = useViewerStore() + const timeout = 1 + const params = {} + expect(() => + viewerStore + .request(schema, params, {}, timeout) + .rejects.toThrow( + `${schema.$id}: Timed out after ${timeout}ms, ${schema} ${params}`, + ), + ) + }) + }) describe("toggle_picking_mode", () => { test("test true", async () => { const viewerStore = useViewerStore() From db3bc9da03a7b1adeb5b81aea197c9a62451dfd3 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Tue, 3 Feb 2026 18:50:56 +0000 Subject: [PATCH 12/16] Apply prepare changes --- app/stores/viewer.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/stores/viewer.js b/app/stores/viewer.js index f495d13d..b424bc22 100644 --- a/app/stores/viewer.js +++ b/app/stores/viewer.js @@ -109,9 +109,8 @@ export const useViewerStore = defineStore("viewer", { }) // Connect - const { connectImageStream } = await import( - "@kitware/vtk.js/Rendering/Misc/RemoteView" - ) + const { connectImageStream } = + await import("@kitware/vtk.js/Rendering/Misc/RemoteView") const viewerStore = this return new Promise((resolve, reject) => { clientToConnect From 6c0e7705ebcbedd8c8d15aa4d8237d5229722fbf Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 3 Feb 2026 21:05:20 +0100 Subject: [PATCH 13/16] timeout tests 25000 --- tests/integration/setup.js | 1 - tests/unit/stores/Viewer.nuxt.test.js | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/integration/setup.js b/tests/integration/setup.js index ef879aa9..5703d0ea 100644 --- a/tests/integration/setup.js +++ b/tests/integration/setup.js @@ -27,7 +27,6 @@ const data_folder = path.join("tests", "integration", "data") async function runMicroservices() { const geodeStore = useGeodeStore() - // const hybridViewerStore = useHybridViewerStore() const infraStore = useInfraStore() const viewerStore = useViewerStore() infraStore.app_mode = appMode.BROWSER diff --git a/tests/unit/stores/Viewer.nuxt.test.js b/tests/unit/stores/Viewer.nuxt.test.js index 9434a48f..4b8e3a6f 100644 --- a/tests/unit/stores/Viewer.nuxt.test.js +++ b/tests/unit/stores/Viewer.nuxt.test.js @@ -171,7 +171,7 @@ describe("Viewer Store", () => { const viewerStore = useViewerStore() await viewerStore.ws_connect() expect(viewerStore.status).toBe(Status.CONNECTED) - }) + }, 25000) }) describe("connect", () => { test("connect", async () => { @@ -179,7 +179,7 @@ describe("Viewer Store", () => { const viewerStore = useViewerStore() await viewerStore.connect() expect(viewerStore.status).toBe(Status.CONNECTED) - }) + }, 25000) }) describe("request", () => { @@ -197,7 +197,7 @@ describe("Viewer Store", () => { `${schema.$id}: Timed out after ${timeout}ms, ${schema} ${params}`, ), ) - }) + }, 25000) }) describe("toggle_picking_mode", () => { test("test true", async () => { From 5e76e3a36f41a8d6e97d224736e35efaa3218433 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 4 Feb 2026 09:27:34 +0100 Subject: [PATCH 14/16] test requirements --- tests/integration/microservices/back/requirements.txt | 1 + tests/integration/microservices/viewer/requirements.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/integration/microservices/back/requirements.txt b/tests/integration/microservices/back/requirements.txt index bd3a3ef5..3cbc7045 100644 --- a/tests/integration/microservices/back/requirements.txt +++ b/tests/integration/microservices/back/requirements.txt @@ -5,3 +5,4 @@ # pip-compile --output-file=tests/integration/microservices/back/requirements.txt tests/integration/microservices/back/requirements.in # +opengeodeweb-back==6.*,>=6.1.0rc2 diff --git a/tests/integration/microservices/viewer/requirements.txt b/tests/integration/microservices/viewer/requirements.txt index 4d097394..af23c161 100644 --- a/tests/integration/microservices/viewer/requirements.txt +++ b/tests/integration/microservices/viewer/requirements.txt @@ -5,3 +5,4 @@ # pip-compile --output-file=tests/integration/microservices/viewer/requirements.txt tests/integration/microservices/viewer/requirements.in # +opengeodeweb-viewer==1.*,>=1.15.0 \ No newline at end of file From 1e54239ac3c6b91884a78c5919a895fe3d1ba124 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Wed, 4 Feb 2026 08:28:12 +0000 Subject: [PATCH 15/16] Apply prepare changes --- tests/integration/microservices/back/requirements.txt | 1 - tests/integration/microservices/viewer/requirements.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/tests/integration/microservices/back/requirements.txt b/tests/integration/microservices/back/requirements.txt index 3cbc7045..bd3a3ef5 100644 --- a/tests/integration/microservices/back/requirements.txt +++ b/tests/integration/microservices/back/requirements.txt @@ -5,4 +5,3 @@ # pip-compile --output-file=tests/integration/microservices/back/requirements.txt tests/integration/microservices/back/requirements.in # -opengeodeweb-back==6.*,>=6.1.0rc2 diff --git a/tests/integration/microservices/viewer/requirements.txt b/tests/integration/microservices/viewer/requirements.txt index af23c161..4d097394 100644 --- a/tests/integration/microservices/viewer/requirements.txt +++ b/tests/integration/microservices/viewer/requirements.txt @@ -5,4 +5,3 @@ # pip-compile --output-file=tests/integration/microservices/viewer/requirements.txt tests/integration/microservices/viewer/requirements.in # -opengeodeweb-viewer==1.*,>=1.15.0 \ No newline at end of file From 4ffaaf6544027d48dccc064622e3af330f1691fc Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 4 Feb 2026 09:45:57 +0100 Subject: [PATCH 16/16] viewer integration tests --- tests/integration/stores/viewer.nuxt.test.js | 61 ++++++++++++++++++++ tests/unit/stores/Viewer.nuxt.test.js | 40 ------------- 2 files changed, 61 insertions(+), 40 deletions(-) create mode 100644 tests/integration/stores/viewer.nuxt.test.js diff --git a/tests/integration/stores/viewer.nuxt.test.js b/tests/integration/stores/viewer.nuxt.test.js new file mode 100644 index 00000000..60b21236 --- /dev/null +++ b/tests/integration/stores/viewer.nuxt.test.js @@ -0,0 +1,61 @@ +// Global imports + +// Third party imports +import { setActivePinia } from "pinia" +import { createTestingPinia } from "@pinia/testing" +import { describe, test, expect, beforeEach, vi } from "vitest" + +import opengeodeweb_viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json" + +// Local imports +import { useViewerStore } from "@ogw_front/stores/viewer" +import Status from "@ogw_front/utils/status" + +import { runMicroservices } from "../../integration/setup" + +beforeEach(() => { + const pinia = createTestingPinia({ + stubActions: false, + createSpy: vi.fn, + }) + setActivePinia(pinia) +}) + +describe("Viewer Store", () => { + describe("actions", () => { + describe("ws_connect", () => { + test("ws_connect", async () => { + await runMicroservices() + const viewerStore = useViewerStore() + await viewerStore.ws_connect() + expect(viewerStore.status).toBe(Status.CONNECTED) + }, 25000) + }) + describe("connect", () => { + test("connect", async () => { + await runMicroservices() + const viewerStore = useViewerStore() + await viewerStore.connect() + expect(viewerStore.status).toBe(Status.CONNECTED) + }, 25000) + }) + + describe("request", () => { + test("request", async () => { + const schema = + opengeodeweb_viewer_schemas.opengeodeweb_viewer.viewer.render + await runMicroservices() + const viewerStore = useViewerStore() + const timeout = 1 + const params = {} + expect(() => + viewerStore + .request(schema, params, {}, timeout) + .rejects.toThrow( + `${schema.$id}: Timed out after ${timeout}ms, ${schema} ${params}`, + ), + ) + }, 25000) + }) + }) +}) diff --git a/tests/unit/stores/Viewer.nuxt.test.js b/tests/unit/stores/Viewer.nuxt.test.js index 4b8e3a6f..247af109 100644 --- a/tests/unit/stores/Viewer.nuxt.test.js +++ b/tests/unit/stores/Viewer.nuxt.test.js @@ -15,16 +15,10 @@ import { } from "vitest" import { WebSocket } from "ws" -import opengeodeweb_viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json" - // Local imports import { useViewerStore } from "@ogw_front/stores/viewer" import { useInfraStore } from "@ogw_front/stores/infra" import { appMode } from "@ogw_front/utils/app_mode" -import Status from "@ogw_front/utils/status" - -import { runMicroservices } from "../../integration/setup" -import { time } from "console" // Mock navigator.locks API const mockLockRequest = vi.fn().mockImplementation(async (name, callback) => { @@ -165,40 +159,6 @@ describe("Viewer Store", () => { }) }) describe("actions", () => { - describe("ws_connect", () => { - test("ws_connect", async () => { - await runMicroservices() - const viewerStore = useViewerStore() - await viewerStore.ws_connect() - expect(viewerStore.status).toBe(Status.CONNECTED) - }, 25000) - }) - describe("connect", () => { - test("connect", async () => { - await runMicroservices() - const viewerStore = useViewerStore() - await viewerStore.connect() - expect(viewerStore.status).toBe(Status.CONNECTED) - }, 25000) - }) - - describe("request", () => { - test("request", async () => { - const schema = - opengeodeweb_viewer_schemas.opengeodeweb_viewer.viewer.render - await runMicroservices() - const viewerStore = useViewerStore() - const timeout = 1 - const params = {} - expect(() => - viewerStore - .request(schema, params, {}, timeout) - .rejects.toThrow( - `${schema.$id}: Timed out after ${timeout}ms, ${schema} ${params}`, - ), - ) - }, 25000) - }) describe("toggle_picking_mode", () => { test("test true", async () => { const viewerStore = useViewerStore()