@geode/opengeodeweb-front 6.3.0-rc.1 → 7.0.0-rc.1

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 (41) hide show
  1. package/components/CrsSelector.vue +3 -1
  2. package/components/Errors/Banner.vue +7 -7
  3. package/components/Errors/Snackers.vue +3 -3
  4. package/components/ExtensionSelector.vue +2 -2
  5. package/components/FileSelector.vue +6 -6
  6. package/components/FileUploader.vue +8 -5
  7. package/components/Launcher.vue +4 -4
  8. package/components/MissingFilesSelector.vue +5 -4
  9. package/components/ObjectSelector.vue +6 -4
  10. package/components/Recaptcha.vue +2 -2
  11. package/components/RemoteRenderingView.vue +9 -7
  12. package/components/ViewToolbar.vue +6 -3
  13. package/composables/api_fetch.js +8 -8
  14. package/composables/viewer_call.js +71 -0
  15. package/package.json +25 -24
  16. package/scripts/generate_geode_objects.js +24 -0
  17. package/stores/cloud.js +2 -4
  18. package/stores/viewer.js +88 -142
  19. package/test/components/CrsSelector.nuxt.test.js +9 -7
  20. package/test/components/ExtensionSelector.nuxt.test.js +7 -6
  21. package/test/components/FileSelector.nuxt.test.js +10 -8
  22. package/test/components/FileUploader.nuxt.test.js +13 -5
  23. package/test/components/MissingFilesSelector.nuxt.test.js +8 -8
  24. package/test/components/ObjectSelector.nuxt.test.js +7 -8
  25. package/test/components/PackagesVersions.nuxt.test.js +2 -4
  26. package/test/composables/api_fetch.nuxt.test.js +23 -53
  27. package/test/composables/runFunctionIfCloudRunning.nuxt.test.js +4 -4
  28. package/test/composables/upload_file.nuxt.test.js +23 -35
  29. package/test/stores/Cloud.nuxt.test.js +4 -4
  30. package/test/stores/Viewer.nuxt.test.js +38 -0
  31. package/test/utils/validate_schema.nuxt.test.js +36 -0
  32. package/utils/schemas.json +164 -0
  33. package/utils/validate_schema.js +13 -0
  34. package/assets/schemas/CrsSelector.json +0 -12
  35. package/assets/schemas/ExtensionSelector.json +0 -15
  36. package/assets/schemas/FileSelector.json +0 -12
  37. package/assets/schemas/MissingFilesSelector.json +0 -15
  38. package/assets/schemas/ObjectSelector.json +0 -15
  39. package/stores/websocket.js +0 -110
  40. package/utils/index.js +0 -5
  41. package/utils/vtk.js +0 -26
package/stores/viewer.js CHANGED
@@ -1,8 +1,36 @@
1
+ import _ from "lodash"
2
+ import vtkWSLinkClient from "@kitware/vtk.js/IO/Core/WSLinkClient"
3
+ import SmartConnect from "wslink/src/SmartConnect"
4
+ import "@kitware/vtk.js/Rendering/OpenGL/Profiles/Geometry"
5
+ import { connectImageStream } from "@kitware/vtk.js/Rendering/Misc/RemoteView"
6
+ import schemas from "@/utils/schemas.json"
7
+
8
+ vtkWSLinkClient.setSmartConnectClass(SmartConnect)
9
+
1
10
  export const use_viewer_store = defineStore("viewer", {
2
11
  state: () => ({
12
+ client: {},
13
+ config: null,
14
+ is_running: false,
3
15
  picking_mode: false,
4
16
  picked_point: { x: null, y: null },
17
+ request_counter: 0,
5
18
  }),
19
+ getters: {
20
+ base_url: () => {
21
+ const cloud_store = use_cloud_store()
22
+ const public_runtime_config = useRuntimeConfig().public
23
+ var viewer_url = `${public_runtime_config.VIEWER_PROTOCOL}://${public_runtime_config.API_URL}:${public_runtime_config.VIEWER_PORT}`
24
+ if (process.env.NODE_ENV == "production") {
25
+ viewer_url += `/${cloud_store.ID}/viewer`
26
+ }
27
+ viewer_url += "/ws"
28
+ return viewer_url
29
+ },
30
+ is_busy: (state) => {
31
+ return state.request_counter > 0
32
+ },
33
+ },
6
34
  actions: {
7
35
  toggle_picking_mode(value) {
8
36
  this.picking_mode = value
@@ -14,152 +42,70 @@ export const use_viewer_store = defineStore("viewer", {
14
42
  this.picked_point.y = world_y
15
43
  this.picking_mode = false
16
44
  },
45
+ ws_connect() {
46
+ if (process.env.NODE_ENV != "test") {
47
+ const config = { application: "Viewer" }
48
+ config.sessionURL = this.base_url
17
49
 
18
- async create_object_pipeline(params) {
19
- const websocket_store = use_websocket_store()
20
- if (websocket_store.client) {
21
- websocket_store.start_request()
22
- websocket_store.client
23
- .getRemote()
24
- .vtk.create_object_pipeline(params)
25
- .catch(console.error)
26
- websocket_store.stop_request()
27
- }
28
- },
29
- async delete_object_pipeline(params) {
30
- const websocket_store = use_websocket_store()
31
- if (websocket_store.client) {
32
- websocket_store.start_request()
33
- websocket_store.client
34
- .getRemote()
35
- .vtk.delete_object_pipeline(params)
36
- .catch(console.error)
37
- websocket_store.stop_request()
38
- }
39
- },
40
- async reset_camera() {
41
- const websocket_store = use_websocket_store()
42
- if (websocket_store.client) {
43
- websocket_store.start_request()
44
- websocket_store.client
45
- .getRemote()
46
- .vtk.reset_camera()
47
- .catch(console.error)
48
- websocket_store.stop_request()
49
- }
50
- },
51
- async toggle_object_visibility(params) {
52
- const websocket_store = use_websocket_store()
53
- if (websocket_store.client) {
54
- websocket_store.start_request()
55
- websocket_store.client
56
- .getRemote()
57
- .vtk.toggle_object_visibility(params)
58
- .catch(console.error)
59
- websocket_store.stop_request()
60
- }
61
- },
62
- async toggle_edge_visibility(params) {
63
- const websocket_store = use_websocket_store()
64
- if (websocket_store.client) {
65
- websocket_store.start_request()
66
- websocket_store.client
67
- .getRemote()
68
- .vtk.toggle_edge_visibility(params)
69
- .catch(console.error)
70
- websocket_store.stop_request()
71
- }
72
- },
73
- async toggle_point_visibility(params) {
74
- const websocket_store = use_websocket_store()
75
- if (websocket_store.client) {
76
- websocket_store.start_request()
77
- websocket_store.client
78
- .getRemote()
79
- .vtk.toggle_point_visibility(params)
80
- .catch(console.error)
81
- websocket_store.stop_request()
82
- }
83
- },
84
- async point_size(params) {
85
- const websocket_store = use_websocket_store()
86
- if (websocket_store.client) {
87
- websocket_store.start_request()
88
- websocket_store.client
89
- .getRemote()
90
- .vtk.point_size(params)
91
- .catch(console.error)
92
- websocket_store.stop_request()
93
- }
94
- },
95
- async set_color(params) {
96
- const websocket_store = use_websocket_store()
97
- if (websocket_store.client) {
98
- websocket_store.start_request()
99
- websocket_store.client
100
- .getRemote()
101
- .vtk.set_color(params)
102
- .catch(console.error)
103
- websocket_store.stop_request()
104
- }
105
- },
106
- async set_vertex_attribute(params) {
107
- const websocket_store = use_websocket_store()
108
- if (websocket_store.client) {
109
- websocket_store.start_request()
110
- websocket_store.client
111
- .getRemote()
112
- .vtk.set_vertex_attribute(params)
113
- .catch(console.error)
114
- websocket_store.stop_request()
115
- }
116
- },
117
- async apply_textures(params) {
118
- const websocket_store = use_websocket_store()
119
- if (websocket_store.client) {
120
- websocket_store.start_request()
121
- websocket_store.client
122
- .getRemote()
123
- .vtk.apply_textures(params)
124
- .catch(console.error)
125
- websocket_store.stop_request()
126
- }
127
- },
128
- async get_point_position(params) {
129
- const websocket_store = use_websocket_store()
130
- if (websocket_store.client) {
131
- websocket_store.start_request()
132
- const response = await websocket_store.client
133
- .getRemote()
134
- .vtk.get_point_position(params)
135
- .catch(console.error)
136
- websocket_store.stop_request()
137
- return response
50
+ const { client } = this
51
+ if (this.is_running && client.isConnected()) {
52
+ client.disconnect(-1)
53
+ this.is_running = false
54
+ }
55
+ let clientToConnect = client
56
+ if (_.isEmpty(clientToConnect)) {
57
+ clientToConnect = vtkWSLinkClient.newInstance()
58
+ }
59
+
60
+ // Connect to busy store
61
+ clientToConnect.onBusyChange((count) => {
62
+ this.buzy = count
63
+ })
64
+ clientToConnect.beginBusy()
65
+
66
+ // Error
67
+ clientToConnect.onConnectionError((httpReq) => {
68
+ const message =
69
+ (httpReq && httpReq.response && httpReq.response.error) ||
70
+ `Connection error`
71
+ console.error(message)
72
+ })
73
+
74
+ // Close
75
+ clientToConnect.onConnectionClose((httpReq) => {
76
+ const message =
77
+ (httpReq && httpReq.response && httpReq.response.error) ||
78
+ `Connection close`
79
+ console.error(message)
80
+ })
81
+
82
+ // Connect
83
+ clientToConnect
84
+ .connect(config)
85
+ .then((validClient) => {
86
+ connectImageStream(validClient.getConnection().getSession())
87
+ this.client = validClient
88
+ clientToConnect.endBusy()
89
+
90
+ // Now that the client is ready let's setup the server for us
91
+ viewer_call({
92
+ schema: schemas.opengeodeweb_viewer.create_visualization,
93
+ })
94
+ viewer_call({
95
+ schema: schemas.opengeodeweb_viewer.reset,
96
+ })
97
+ this.is_running = true
98
+ })
99
+ .catch((error) => {
100
+ console.error(error)
101
+ })
138
102
  }
139
103
  },
140
- async update_data(params) {
141
- const websocket_store = use_websocket_store()
142
- if (websocket_store.client) {
143
- websocket_store.start_request()
144
- const response = await websocket_store.client
145
- .getRemote()
146
- .vtk.update_data(params)
147
- .catch(console.error)
148
- websocket_store.stop_request()
149
- return response
150
- }
104
+ start_request() {
105
+ this.request_counter++
151
106
  },
152
- async reset() {
153
- const websocket_store = use_websocket_store()
154
- if (websocket_store.client) {
155
- websocket_store.start_request()
156
- const response = await websocket_store.client
157
- .getRemote()
158
- .vtk.reset()
159
- .catch(console.error)
160
- websocket_store.stop_request()
161
- return response
162
- }
107
+ stop_request() {
108
+ this.request_counter--
163
109
  },
164
110
  },
165
111
  })
@@ -8,15 +8,16 @@ import * as components from "vuetify/components"
8
8
  import * as directives from "vuetify/directives"
9
9
 
10
10
  import CrsSelector from "@/components/CrsSelector.vue"
11
- import schema from "@/assets/schemas/CrsSelector.json"
11
+ import schemas from "@geode/opengeodeweb-back/schemas.json"
12
+
13
+ const crs_selector_schema =
14
+ schemas.opengeodeweb_back.geographic_coordinate_systems
12
15
 
13
16
  const vuetify = createVuetify({
14
17
  components,
15
18
  directives,
16
19
  })
17
20
 
18
- global.ResizeObserver = require("resize-observer-polyfill")
19
-
20
21
  describe("CrsSelector.vue", async () => {
21
22
  test(`BRep`, async () => {
22
23
  const crs_list = [
@@ -26,8 +27,8 @@ describe("CrsSelector.vue", async () => {
26
27
  name: "Anguilla 1957 / British West Indies Grid",
27
28
  },
28
29
  ]
29
- registerEndpoint(schema.$id, {
30
- method: schema.method,
30
+ registerEndpoint(crs_selector_schema.$id, {
31
+ method: crs_selector_schema.methods.filter((m) => m !== "OPTIONS")[0],
31
32
  handler: () => ({
32
33
  crs_list,
33
34
  }),
@@ -40,8 +41,9 @@ describe("CrsSelector.vue", async () => {
40
41
  props: { input_geode_object: "BRep", key_to_update },
41
42
  })
42
43
  const td = await wrapper.find("td")
43
- const imput = await td.find("input")
44
- await imput.trigger("click")
44
+ await wrapper.vm.$nextTick()
45
+ const input = await td.find("input")
46
+ await input.trigger("click")
45
47
  expect(wrapper.emitted()).toHaveProperty("update_values")
46
48
  expect(wrapper.emitted().update_values).toHaveLength(1)
47
49
  expect(wrapper.emitted().update_values[0][0]).toEqual({
@@ -8,23 +8,24 @@ import * as components from "vuetify/components"
8
8
  import * as directives from "vuetify/directives"
9
9
 
10
10
  import ExtensionSelector from "@/components/ExtensionSelector.vue"
11
- import schema from "@/assets/schemas/ExtensionSelector.json"
12
- import { flushPromises } from "@vue/test-utils"
11
+
12
+ import schemas from "@geode/opengeodeweb-back/schemas.json"
13
+
14
+ const geode_objects_and_output_extensions =
15
+ schemas.opengeodeweb_back.geode_objects_and_output_extensions
13
16
 
14
17
  const vuetify = createVuetify({
15
18
  components,
16
19
  directives,
17
20
  })
18
21
 
19
- global.ResizeObserver = require("resize-observer-polyfill")
20
-
21
22
  describe("ExtensionSelector.vue", async () => {
22
23
  test(`Select geode_object & extension`, async () => {
23
24
  const output_geode_object = "BRep"
24
25
  const output_extension = "msh"
25
26
 
26
- registerEndpoint(schema.$id, {
27
- method: schema.method,
27
+ registerEndpoint(geode_objects_and_output_extensions.$id, {
28
+ method: geode_objects_and_output_extensions.methods[0],
28
29
  handler: () => ({
29
30
  geode_objects_and_output_extensions: {
30
31
  BRep: { msh: { is_saveable: true } },
@@ -10,19 +10,21 @@ import * as directives from "vuetify/directives"
10
10
 
11
11
  import FileSelector from "@/components/FileSelector.vue"
12
12
  import FileUploader from "@/components/FileUploader.vue"
13
- import schema from "@/assets/schemas/FileSelector.json"
13
+
14
+ import schemas from "@geode/opengeodeweb-back/schemas.json"
15
+
16
+ const allowed_files_schema = schemas.opengeodeweb_back.allowed_files
17
+ const upload_file_schema = schemas.opengeodeweb_back.upload_file
14
18
 
15
19
  const vuetify = createVuetify({
16
20
  components,
17
21
  directives,
18
22
  })
19
23
 
20
- global.ResizeObserver = require("resize-observer-polyfill")
21
-
22
24
  describe("FileSelector.vue", async () => {
23
25
  test(`Select file`, async () => {
24
- registerEndpoint(schema.$id, {
25
- method: schema.method,
26
+ registerEndpoint(allowed_files_schema.$id, {
27
+ method: allowed_files_schema.methods[0],
26
28
  handler: () => ({
27
29
  extensions: ["1", "2", "3"],
28
30
  }),
@@ -31,13 +33,13 @@ describe("FileSelector.vue", async () => {
31
33
  global: {
32
34
  plugins: [vuetify],
33
35
  },
34
- props: { multiple: false, key: "test", route: "/upload" },
36
+ props: { multiple: false, supported_feature: "test" },
35
37
  })
36
38
 
37
39
  const file_uploader = wrapper.findComponent(FileUploader)
38
40
 
39
- registerEndpoint("/upload", {
40
- method: "PUT",
41
+ registerEndpoint(upload_file_schema.$id, {
42
+ method: upload_file_schema.methods[1],
41
43
  handler: () => ({}),
42
44
  })
43
45
 
@@ -10,24 +10,26 @@ import * as directives from "vuetify/directives"
10
10
 
11
11
  import FileUploader from "@/components/FileUploader.vue"
12
12
 
13
+ import schemas from "@geode/opengeodeweb-back/schemas.json"
14
+
15
+ const upload_file_schema = schemas.opengeodeweb_back.upload_file
16
+
13
17
  const vuetify = createVuetify({
14
18
  components,
15
19
  directives,
16
20
  })
17
21
 
18
- global.ResizeObserver = require("resize-observer-polyfill")
19
-
20
22
  describe("FileUploader.vue", async () => {
21
23
  test(`Upload file`, async () => {
22
- registerEndpoint("/upload", {
23
- method: "PUT",
24
+ registerEndpoint(upload_file_schema.$id, {
25
+ method: upload_file_schema.methods[0],
24
26
  handler: () => ({}),
25
27
  })
26
28
  const wrapper = await mountSuspended(FileUploader, {
27
29
  global: {
28
30
  plugins: [vuetify],
29
31
  },
30
- props: { multiple: false, accept: "*.txt", route: "/upload" },
32
+ props: { multiple: false, accept: "*.txt" },
31
33
  })
32
34
  const v_file_input = wrapper.findComponent(components.VFileInput)
33
35
  await v_file_input.trigger("click")
@@ -35,6 +37,12 @@ describe("FileUploader.vue", async () => {
35
37
  await v_file_input.setValue(files)
36
38
  await v_file_input.trigger("change")
37
39
  const v_btn = wrapper.findComponent(components.VBtn)
40
+
41
+ registerEndpoint(upload_file_schema.$id, {
42
+ method: upload_file_schema.methods[1],
43
+ handler: () => ({}),
44
+ })
45
+
38
46
  await v_btn.trigger("click")
39
47
  await flushPromises()
40
48
  expect(wrapper.emitted().files_uploaded[0][0]).toEqual(files)
@@ -11,19 +11,20 @@ import * as directives from "vuetify/directives"
11
11
  import MissingFilesSelector from "@/components/MissingFilesSelector.vue"
12
12
  import FileUploader from "@/components/FileUploader.vue"
13
13
 
14
- import schema from "@/assets/schemas/MissingFilesSelector.json"
14
+ import schemas from "@geode/opengeodeweb-back/schemas.json"
15
+
16
+ const missing_files_schema = schemas.opengeodeweb_back.missing_files
17
+ const upload_file_schema = schemas.opengeodeweb_back.upload_file
15
18
 
16
19
  const vuetify = createVuetify({
17
20
  components,
18
21
  directives,
19
22
  })
20
23
 
21
- global.ResizeObserver = require("resize-observer-polyfill")
22
-
23
24
  describe("MissingFilesSelector.vue", async () => {
24
25
  test(`Select file`, async () => {
25
- registerEndpoint(schema.$id, {
26
- method: schema.method,
26
+ registerEndpoint(missing_files_schema.$id, {
27
+ method: missing_files_schema.methods[0],
27
28
  handler: () => ({
28
29
  has_missing_files: true,
29
30
  mandatory_files: ["fake_file.txt"],
@@ -38,7 +39,6 @@ describe("MissingFilesSelector.vue", async () => {
38
39
  multiple: false,
39
40
  input_geode_object: "BRep",
40
41
  filenames: ["fake_file.txt"],
41
- route: "/upload_file",
42
42
  },
43
43
  })
44
44
 
@@ -52,8 +52,8 @@ describe("MissingFilesSelector.vue", async () => {
52
52
  await v_file_input.trigger("change")
53
53
  const v_btn = file_uploader.findComponent(components.VBtn)
54
54
 
55
- registerEndpoint("/upload_file", {
56
- method: "PUT",
55
+ registerEndpoint(upload_file_schema.$id, {
56
+ method: upload_file_schema.methods[1],
57
57
  handler: () => ({}),
58
58
  })
59
59
  await v_btn.trigger("click")
@@ -9,17 +9,16 @@ import * as components from "vuetify/components"
9
9
  import * as directives from "vuetify/directives"
10
10
 
11
11
  import ObjectSelector from "@/components/ObjectSelector.vue"
12
- import schema from "@/assets/schemas/ObjectSelector.json"
13
- import geode_objects from "@/assets/geode_objects"
12
+
13
+ import schemas from "@geode/opengeodeweb-back/schemas.json"
14
+
15
+ const allowed_objects = schemas.opengeodeweb_back.allowed_objects
14
16
 
15
17
  const vuetify = createVuetify({
16
18
  components,
17
19
  directives,
18
20
  })
19
21
 
20
- global.ResizeObserver = require("resize-observer-polyfill")
21
-
22
- // for (const [geode_object] of Object.entries(geode_objects)) {
23
22
  const geode_object = "BRep"
24
23
  describe("ObjectSelector.vue", async () => {
25
24
  test(`BRep`, async () => {
@@ -27,15 +26,15 @@ describe("ObjectSelector.vue", async () => {
27
26
  allowed_objects: {},
28
27
  }
29
28
  response["allowed_objects"][geode_object] = { is_loadable: true }
30
- registerEndpoint(schema.$id, {
31
- method: schema.method,
29
+ registerEndpoint(allowed_objects.$id, {
30
+ method: allowed_objects.methods[0],
32
31
  handler: () => response,
33
32
  })
34
33
  const wrapper = await mountSuspended(ObjectSelector, {
35
34
  global: {
36
35
  plugins: [vuetify],
37
36
  },
38
- props: { filenames: ["test.toto"], key: "test" },
37
+ props: { filenames: ["test.toto"], supported_feature: "test" },
39
38
  })
40
39
  const v_card = wrapper.findComponent(components.VCard)
41
40
  const v_img = v_card.findComponent(components.VImg)
@@ -14,19 +14,17 @@ const vuetify = createVuetify({
14
14
  directives,
15
15
  })
16
16
 
17
- global.ResizeObserver = require("resize-observer-polyfill")
18
-
19
17
  describe("PackagesVersions.vue", async () => {
20
18
  test(`Mount`, async () => {
21
19
  const schema = {
22
20
  $id: "/versions",
23
- method: "GET",
21
+ methods: ["GET"],
24
22
  type: "object",
25
23
  properties: {},
26
24
  additionalProperties: false,
27
25
  }
28
26
  registerEndpoint(schema.$id, {
29
- method: schema.method,
27
+ method: schema.methods[0],
30
28
  handler: () => ({
31
29
  versions: [
32
30
  {
@@ -7,7 +7,7 @@ describe("api_fetch.js", () => {
7
7
  const schema = {
8
8
  $id: "/test",
9
9
  type: "object",
10
- method: "POST",
10
+ methods: ["POST"],
11
11
  properties: {
12
12
  test: {
13
13
  type: "string",
@@ -16,16 +16,18 @@ describe("api_fetch.js", () => {
16
16
  required: ["test"],
17
17
  additionalProperties: false,
18
18
  }
19
+ var params
20
+
19
21
  beforeEach(async () => {
20
22
  await errors_store.$patch({ errors: [] })
21
23
  })
22
24
 
23
25
  test("Ajv wrong params", async () => {
24
26
  registerEndpoint(schema.$id, {
25
- method: schema.method,
27
+ method: schema.methods[0],
26
28
  handler: () => ({ return: "toto" }),
27
29
  })
28
- const params = {}
30
+ params = {}
29
31
  try {
30
32
  await api_fetch({ schema, params })
31
33
  } catch (error) {
@@ -37,64 +39,32 @@ describe("api_fetch.js", () => {
37
39
  expect(errors_store.errors[0].code).toBe(400)
38
40
  })
39
41
 
40
- // test("onRequestError", async () => {
41
- // const schema = {
42
- // $id: "/test",
43
- // type: "object",
44
- // method: "POST",
45
- // properties: {
46
- // test: {
47
- // type: "string",
48
- // },
49
- // },
50
- // required: ["test"],
51
- // additionalProperties: false,
52
- // }
53
- // registerEndpoint(schema.$id, {
54
- // method: schema.method,
55
- // handler: async () => {
56
- // setTimeout(() => {}, 100 * 1000)
57
- // },
58
- // })
59
- // const params = { test: "test" }
60
- // var request_error_value
61
- // await api_fetch(
62
- // { schema, params },
63
- // {
64
- // request_error_function: () => {
65
- // request_error_value = "error"
66
- // },
67
- // },
68
- // )
69
- // expect(errors_store.errors.length).toBe(1)
70
- // expect(errors_store.errors[0].code).toBe(404)
71
- // expect(request_error_value).toBe("error")
72
- // })
73
-
74
42
  test("onResponse", async () => {
75
- registerEndpoint(schema.$id, {
76
- method: schema.method,
77
- handler: () => ({ return: "toto" }),
78
- })
79
- const params = { test: "test" }
80
43
  var response_value
81
- await api_fetch(
82
- { schema, params },
83
- {
84
- response_function: (response) => {
85
- response_value = response._data.return
44
+ for (var i = 0; i < 3; i++) {
45
+ registerEndpoint(schema.$id, {
46
+ method: schema.methods[0],
47
+ handler: () => ({ return: "toto" }),
48
+ })
49
+ params = { test: "test" }
50
+ await api_fetch(
51
+ { schema, params },
52
+ {
53
+ response_function: (response) => {
54
+ response_value = response._data.return
55
+ },
86
56
  },
87
- },
88
- )
89
- expect(errors_store.errors.length).toBe(0)
90
- expect(response_value).toBe("toto")
57
+ )
58
+ expect(errors_store.errors.length).toBe(0)
59
+ expect(response_value).toBe("toto")
60
+ }
91
61
  })
92
62
 
93
63
  test("onResponseError", async () => {
94
64
  const schema = {
95
65
  $id: "/toto",
96
66
  type: "object",
97
- method: "POST",
67
+ methods: ["POST"],
98
68
  properties: {
99
69
  test: {
100
70
  type: "string",
@@ -103,7 +73,7 @@ describe("api_fetch.js", () => {
103
73
  required: ["test"],
104
74
  additionalProperties: false,
105
75
  }
106
- const params = { test: "test" }
76
+ params = { test: "test" }
107
77
  var response_error_value
108
78
  await api_fetch(
109
79
  { schema, params },
@@ -2,19 +2,19 @@ import { describe, expect, test, beforeEach, vi } from "vitest"
2
2
 
3
3
  describe("api_fetch.js", () => {
4
4
  const geode_store = use_geode_store()
5
- const websocket_store = use_websocket_store()
5
+ const viewer_store = use_viewer_store()
6
6
 
7
7
  const dumb_obj = { dumb_method: () => true }
8
8
 
9
9
  beforeEach(async () => {
10
10
  await geode_store.$patch({ is_running: false })
11
- await websocket_store.$patch({ is_running: false })
11
+ await viewer_store.$patch({ is_running: false })
12
12
  })
13
13
 
14
14
  test("is_running true", async () => {
15
15
  const spy = vi.spyOn(dumb_obj, "dumb_method")
16
16
  await geode_store.$patch({ is_running: true })
17
- await websocket_store.$patch({ is_running: true })
17
+ await viewer_store.$patch({ is_running: true })
18
18
 
19
19
  await runFunctionIfCloudRunning(dumb_obj.dumb_method)
20
20
  expect(spy).toHaveBeenCalled()
@@ -24,7 +24,7 @@ describe("api_fetch.js", () => {
24
24
  const spy = vi.spyOn(dumb_obj, "dumb_method")
25
25
  runFunctionIfCloudRunning(dumb_obj.dumb_method)
26
26
  await geode_store.$patch({ is_running: true })
27
- await websocket_store.$patch({ is_running: true })
27
+ await viewer_store.$patch({ is_running: true })
28
28
  expect(spy).toHaveBeenCalled()
29
29
  })
30
30
  })