@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.
- package/components/CrsSelector.vue +3 -1
- package/components/Errors/Banner.vue +7 -7
- package/components/Errors/Snackers.vue +3 -3
- package/components/ExtensionSelector.vue +2 -2
- package/components/FileSelector.vue +6 -6
- package/components/FileUploader.vue +8 -5
- package/components/Launcher.vue +4 -4
- package/components/MissingFilesSelector.vue +5 -4
- package/components/ObjectSelector.vue +6 -4
- package/components/Recaptcha.vue +2 -2
- package/components/RemoteRenderingView.vue +9 -7
- package/components/ViewToolbar.vue +6 -3
- package/composables/api_fetch.js +8 -8
- package/composables/viewer_call.js +71 -0
- package/package.json +25 -24
- package/scripts/generate_geode_objects.js +24 -0
- package/stores/cloud.js +2 -4
- package/stores/viewer.js +88 -142
- package/test/components/CrsSelector.nuxt.test.js +9 -7
- package/test/components/ExtensionSelector.nuxt.test.js +7 -6
- package/test/components/FileSelector.nuxt.test.js +10 -8
- package/test/components/FileUploader.nuxt.test.js +13 -5
- package/test/components/MissingFilesSelector.nuxt.test.js +8 -8
- package/test/components/ObjectSelector.nuxt.test.js +7 -8
- package/test/components/PackagesVersions.nuxt.test.js +2 -4
- package/test/composables/api_fetch.nuxt.test.js +23 -53
- package/test/composables/runFunctionIfCloudRunning.nuxt.test.js +4 -4
- package/test/composables/upload_file.nuxt.test.js +23 -35
- package/test/stores/Cloud.nuxt.test.js +4 -4
- package/test/stores/Viewer.nuxt.test.js +38 -0
- package/test/utils/validate_schema.nuxt.test.js +36 -0
- package/utils/schemas.json +164 -0
- package/utils/validate_schema.js +13 -0
- package/assets/schemas/CrsSelector.json +0 -12
- package/assets/schemas/ExtensionSelector.json +0 -15
- package/assets/schemas/FileSelector.json +0 -12
- package/assets/schemas/MissingFilesSelector.json +0 -15
- package/assets/schemas/ObjectSelector.json +0 -15
- package/stores/websocket.js +0 -110
- package/utils/index.js +0 -5
- 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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
.
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
141
|
-
|
|
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
|
-
|
|
153
|
-
|
|
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
|
|
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(
|
|
30
|
-
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
|
-
|
|
44
|
-
await
|
|
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
|
-
|
|
12
|
-
import
|
|
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(
|
|
27
|
-
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
|
-
|
|
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(
|
|
25
|
-
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,
|
|
36
|
+
props: { multiple: false, supported_feature: "test" },
|
|
35
37
|
})
|
|
36
38
|
|
|
37
39
|
const file_uploader = wrapper.findComponent(FileUploader)
|
|
38
40
|
|
|
39
|
-
registerEndpoint(
|
|
40
|
-
method:
|
|
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(
|
|
23
|
-
method:
|
|
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"
|
|
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
|
|
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(
|
|
26
|
-
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(
|
|
56
|
-
method:
|
|
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
|
-
|
|
13
|
-
import
|
|
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(
|
|
31
|
-
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"],
|
|
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
|
-
|
|
21
|
+
methods: ["GET"],
|
|
24
22
|
type: "object",
|
|
25
23
|
properties: {},
|
|
26
24
|
additionalProperties: false,
|
|
27
25
|
}
|
|
28
26
|
registerEndpoint(schema.$id, {
|
|
29
|
-
method: schema.
|
|
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
|
-
|
|
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.
|
|
27
|
+
method: schema.methods[0],
|
|
26
28
|
handler: () => ({ return: "toto" }),
|
|
27
29
|
})
|
|
28
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
90
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
27
|
+
await viewer_store.$patch({ is_running: true })
|
|
28
28
|
expect(spy).toHaveBeenCalled()
|
|
29
29
|
})
|
|
30
30
|
})
|