Skip to content

Commit 86929bf

Browse files
wip(tests): fix
1 parent d037f9f commit 86929bf

21 files changed

+543
-294
lines changed

components/FeedBack/ErrorBanner.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
22
<v-banner
3-
v-if="feedback_store.server_error"
3+
v-if="server_error"
44
elevation="2"
55
style="background-color: grey; z-index: 9999"
66
position="fixed"
@@ -44,6 +44,7 @@
4444

4545
<script setup>
4646
const feedback_store = use_feedback_store()
47+
const { server_error } = storeToRefs(feedback_store)
4748
4849
function reload() {
4950
window.location.reload()

composables/api_fetch.js

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -29,41 +29,47 @@ export function api_fetch(
2929
if (schema.max_retry) {
3030
request_options.max_retry = schema.max_retry
3131
}
32-
return useFetch(schema.$id, {
33-
baseURL: geode_store.base_url,
34-
...request_options,
35-
onRequestError({ error }) {
36-
geode_store.stop_request()
37-
feedback_store.add_error(
38-
error.code,
39-
schema.$id,
40-
error.message,
41-
error.stack,
42-
)
43-
if (request_error_function) {
44-
request_error_function(error)
45-
}
46-
},
47-
onResponse({ response }) {
48-
if (response.ok) {
49-
geode_store.stop_request()
50-
if (response_function) {
51-
response_function(response)
32+
33+
return new Promise((resolve, reject) => {
34+
return useFetch(schema.$id, {
35+
baseURL: geode_store.base_url,
36+
...request_options,
37+
async onRequestError({ error }) {
38+
await geode_store.stop_request()
39+
await feedback_store.add_error(
40+
error.code,
41+
schema.$id,
42+
error.message,
43+
error.stack,
44+
)
45+
if (request_error_function) {
46+
await request_error_function(error)
47+
}
48+
reject(error)
49+
},
50+
async onResponse({ response }) {
51+
if (response.ok) {
52+
await geode_store.stop_request()
53+
if (response_function) {
54+
await response_function(response)
55+
}
56+
resolve(response)
57+
}
58+
},
59+
async onResponseError({ response }) {
60+
await geode_store.stop_request()
61+
await feedback_store.add_error(
62+
response.status,
63+
schema.$id,
64+
response._data.name,
65+
response._data.description,
66+
)
67+
if (response_error_function) {
68+
await response_error_function(response)
5269
}
53-
}
54-
},
55-
onResponseError({ response }) {
56-
geode_store.stop_request()
57-
feedback_store.add_error(
58-
response.status,
59-
schema.$id,
60-
response._data.name,
61-
response._data.description,
62-
)
63-
if (response_error_function) {
64-
response_error_function(response)
65-
}
66-
},
70+
reject(response)
71+
},
72+
})
6773
})
6874
}
6975

package.json

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
"geode_objects": "node scripts/generate_geode_objects.js && prettier ./assets/geode_objects.js --write"
88
},
99
"devDependencies": {
10-
"@nuxt/test-utils": "^3.13.1",
10+
"@nuxt/test-utils": "^3.14.1",
1111
"@pinia/testing": "^0.1.5",
12-
"@vitejs/plugin-vue": "^5.0.5",
12+
"@vitejs/plugin-vue": "^5.1.2",
1313
"@vitest/coverage-v8": "^1.6.0",
1414
"@vue/test-utils": "^2.4.6",
1515
"eslint": "^8.57.0",
@@ -44,15 +44,14 @@
4444
"@geode/opengeodeweb-viewer": "0.2.0",
4545
"@kitware/vtk.js": "30.3.1",
4646
"@mdi/font": "^7.4.47",
47-
"@pinia/nuxt": "^0.5.1",
48-
"@types/node": "^20.14.2",
49-
"@vueuse/components": "^10.11.0",
50-
"@vueuse/nuxt": "^10.11.0",
51-
"ajv": "^8.16.0",
47+
"@pinia/nuxt": "^0.5.4",
48+
"@vueuse/components": "^11.0.3",
49+
"@vueuse/nuxt": "^11.0.3",
50+
"ajv": "^8.17.1",
5251
"is-electron": "^2.2.2",
53-
"pinia": "^2.1.7",
54-
"sass": "^1.77.5",
55-
"semver": "^7.6.2",
52+
"pinia": "^2.2.2",
53+
"sass": "^1.77.8",
54+
"semver": "^7.6.3",
5655
"vue-recaptcha": "^2.0.3",
5756
"vue3-carousel": "^0.3.3"
5857
},
@@ -73,4 +72,4 @@
7372
"publishConfig": {
7473
"access": "public"
7574
}
76-
}
75+
}

stores/feedback.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,28 @@ export const use_feedback_store = defineStore("feedback", {
44
server_error: false,
55
}),
66
actions: {
7-
add_error(code, route, name, description) {
8-
this.feedbacks.push({
7+
async add_error(code, route, name, description) {
8+
await this.feedbacks.push({
99
type: "error",
1010
code,
1111
route,
1212
name,
1313
description,
1414
})
1515
},
16-
add_success(description) {
17-
this.feedbacks.push({
16+
async add_success(description) {
17+
await this.feedbacks.push({
1818
type: "success",
1919
description,
2020
})
2121
},
22-
delete_feedback(feedback_index) {
23-
this.feedbacks.splice(feedback_index, 1)
22+
async delete_feedback(feedback_index) {
23+
await this.feedbacks.splice(feedback_index, 1)
2424
},
25-
delete_server_error() {
26-
this.server_error = false
25+
async delete_server_error() {
26+
console.group("delete_server_error")
27+
this.$patch({ server_error: false })
28+
// this.server_error = false
2729
},
2830
},
2931
})

stores/geode.js

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,34 @@
1+
import back_schemas from "@geode/opengeodeweb-back/schemas.json"
2+
13
export const use_geode_store = defineStore("geode", {
24
state: () => ({
3-
PROTOCOL: use_infra_store().is_cloud ? "https" : "http",
4-
PORT: use_infra_store().is_cloud ? "443" : "5000",
5+
default_local_port: "5000",
56
request_counter: 0,
67
is_running: false,
78
}),
89
getters: {
10+
protocol() {
11+
if (use_infra_store().is_cloud) {
12+
return "https"
13+
} else {
14+
return "http"
15+
}
16+
},
17+
port() {
18+
if (use_infra_store().is_cloud) {
19+
return "443"
20+
} else {
21+
return this.default_local_port
22+
}
23+
},
924
base_url() {
1025
const infra_store = use_infra_store()
11-
const api_url = infra_store.api_url
12-
var geode_url = `${api_url}`
26+
var geode_url = `${this.protocol}://${infra_store.domain_name}:${this.port}`
1327
if (infra_store.is_cloud) {
14-
geode_url += `/geode`
28+
if (infra_store.ID == "") {
29+
throw new Error("ID must not be empty in cloud mode")
30+
}
31+
geode_url += `/${infra_store.ID}/geode`
1532
}
1633
return geode_url
1734
},
@@ -25,31 +42,40 @@ export const use_geode_store = defineStore("geode", {
2542
},
2643
async do_ping() {
2744
const feedback_store = use_feedback_store()
28-
const infra_store = use_infra_store()
29-
return new Promise((resolve, reject) => {
30-
useFetch("/ping", {
31-
baseURL: infra_store.api_url,
32-
method: "POST",
33-
onRequestError({ error }) {
34-
console.log("onRequestError", error)
35-
errors_store.$patch({ server_error: true })
36-
reject(error)
45+
await api_fetch(
46+
{ schema: back_schemas.opengeodeweb_back.ping, params: {} },
47+
{
48+
request_error_function: () => {
49+
feedback_store.$patch({ server_error: true })
3750
},
38-
onResponse({ response }) {
39-
if (response.ok) {
40-
console.log("PATCH onResponse", response)
41-
this.is_running = true
42-
resolve(response)
43-
}
51+
response_function: () => {
52+
this.is_running = true
4453
},
45-
onResponseError({ response }) {
46-
console.log("onResponseError", response)
47-
54+
response_error_function: () => {
4855
feedback_store.$patch({ server_error: true })
49-
reject(response)
5056
},
51-
})
52-
})
57+
},
58+
)
59+
// return new Promise((resolve, reject) => {
60+
// useFetch(schemas.opengeodeweb_back.ping, {
61+
// baseURL: this.base_url,
62+
// method: "POST",
63+
// onRequestError({ error }) {
64+
// feedback_store.$patch({ server_error: true })
65+
// reject(error)
66+
// },
67+
// onResponse({ response }) {
68+
// if (response.ok) {
69+
// this.is_running = true
70+
// resolve(response)
71+
// }
72+
// },
73+
// onResponseError({ response }) {
74+
// feedback_store.$patch({ server_error: true })
75+
// reject(response)
76+
// },
77+
// })
78+
// })
5379
},
5480
start_request() {
5581
this.request_counter++

stores/infra.js

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,6 @@ export const use_infra_store = defineStore("infra", {
1818
return "localhost"
1919
}
2020
},
21-
22-
api_url() {
23-
const geode_store = use_geode_store()
24-
var api_url = `${geode_store.PROTOCOL}://${this.domain_name}:${geode_store.PORT}`
25-
if (this.is_cloud) {
26-
if (this.ID == "") {
27-
throw new Error("ID must not be empty in cloud mode")
28-
}
29-
api_url += `/${this.ID}`
30-
}
31-
return api_url
32-
},
3321
is_running() {
3422
return use_geode_store().is_running && use_viewer_store().is_running
3523
},

test/components/CrsSelector.nuxt.test.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import { describe, expect, test } from "vitest"
44
import { registerEndpoint, mountSuspended } from "@nuxt/test-utils/runtime"
55

6+
import { setActivePinia } from "pinia"
7+
import { createTestingPinia } from "@pinia/testing"
68
import { createVuetify } from "vuetify"
79
import * as components from "vuetify/components"
810
import * as directives from "vuetify/directives"
@@ -19,7 +21,12 @@ const vuetify = createVuetify({
1921
})
2022

2123
describe("CrsSelector.vue", async () => {
22-
test(`BRep`, async () => {
24+
const pinia = createTestingPinia()
25+
setActivePinia(pinia)
26+
const geode_store = use_geode_store()
27+
geode_store.base_url = ""
28+
29+
test(`Default behavior`, async () => {
2330
const crs_list = [
2431
{
2532
authority: "EPSG",
@@ -36,7 +43,7 @@ describe("CrsSelector.vue", async () => {
3643
const key_to_update = "key"
3744
const wrapper = await mountSuspended(CrsSelector, {
3845
global: {
39-
plugins: [vuetify],
46+
plugins: [vuetify, pinia],
4047
},
4148
props: { input_geode_object: "BRep", key_to_update },
4249
})

test/components/ExtensionSelector.nuxt.test.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { registerEndpoint, mountSuspended } from "@nuxt/test-utils/runtime"
66
import { createVuetify } from "vuetify"
77
import * as components from "vuetify/components"
88
import * as directives from "vuetify/directives"
9+
import { setActivePinia } from "pinia"
10+
import { createTestingPinia } from "@pinia/testing"
911

1012
import ExtensionSelector from "@/components/ExtensionSelector.vue"
1113

@@ -19,6 +21,11 @@ const vuetify = createVuetify({
1921
})
2022

2123
describe("ExtensionSelector.vue", async () => {
24+
const pinia = createTestingPinia()
25+
setActivePinia(pinia)
26+
const geode_store = use_geode_store()
27+
geode_store.base_url = ""
28+
2229
test(`Select geode_object & extension`, async () => {
2330
const output_geode_object = "BRep"
2431
const output_extension = "msh"
@@ -33,7 +40,7 @@ describe("ExtensionSelector.vue", async () => {
3340
})
3441
const wrapper = await mountSuspended(ExtensionSelector, {
3542
global: {
36-
plugins: [vuetify],
43+
plugins: [vuetify, pinia],
3744
},
3845
props: { input_geode_object: "BRep", filenames: ["test.toto"] },
3946
})

0 commit comments

Comments
 (0)