Skip to content

Commit ccbbe09

Browse files
committed
object_priority & test added
1 parent 7390b4b commit ccbbe09

File tree

2 files changed

+77
-2
lines changed

2 files changed

+77
-2
lines changed

components/ObjectSelector.vue

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,38 @@
9494
}
9595
}
9696
}
97-
98-
allowed_objects.value = final_object
97+
if (Object.keys(final_object).length > 0) {
98+
const max_loadability_score = Math.max(
99+
...Object.values(final_object).map(obj => obj.is_loadable ? 1 : 0)
100+
)
101+
102+
const best_objects = Object.fromEntries(
103+
Object.entries(final_object).filter(
104+
([object_name, object_info]) => (object_info.is_loadable ? 1 : 0) === max_loadability_score
105+
)
106+
)
107+
108+
if (Object.keys(best_objects).length > 1) {
109+
const priorities = {}
110+
for (const object_name of Object.keys(best_objects)) {
111+
const priority_response = await api_fetch({
112+
schema: schemas.opengeodeweb_back.object_priority,
113+
params: { object_name, filename: filenames[0] }
114+
})
115+
priorities[object_name] = priority_response.data.value.priority
116+
}
117+
118+
const best_object_name = Object.keys(best_objects).reduce((a, b) =>
119+
priorities[a] > priorities[b] ? a : b
120+
)
121+
122+
allowed_objects.value = { [best_object_name]: final_object[best_object_name] }
123+
} else {
124+
allowed_objects.value = best_objects
125+
}
126+
} else {
127+
allowed_objects.value = final_object
128+
}
99129
if (Object.keys(allowed_objects.value).length == 1) {
100130
set_geode_object(Object.keys(allowed_objects.value)[0])
101131
}

test/components/ObjectSelector.nuxt.test.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,50 @@ describe("ObjectSelector.vue", async () => {
8282
expect(wrapper.emitted().update_values[0][0]).toEqual({
8383
input_geode_object: geode_object_1,
8484
})
85+
86+
test(`test object_priority with equal is_loadable scores`, async () => {
87+
var response = {
88+
allowed_objects: {},
89+
}
90+
const geode_object_1 = "BRep"
91+
const geode_object_2 = "EdgedCurve3D"
92+
const geode_object_3 = "PolygonalSurface3D"
93+
response["allowed_objects"][geode_object_1] = { is_loadable: true }
94+
response["allowed_objects"][geode_object_2] = { is_loadable: true }
95+
response["allowed_objects"][geode_object_3] = { is_loadable: true }
96+
registerEndpoint(allowed_objects.$id, {
97+
method: allowed_objects.methods[0],
98+
handler: () => response,
99+
})
100+
const object_priority_schema = schemas.opengeodeweb_back.object_priority
101+
registerEndpoint(object_priority_schema.$id, {
102+
method: object_priority_schema.methods[0],
103+
handler: ({ body }) => {
104+
const { object_name } = body
105+
const priorities = {
106+
"BRep": 10,
107+
"EdgedCurve3D": 5,
108+
"PolygonalSurface3D": 8
109+
}
110+
return { priority: priorities[object_name] || 0 }
111+
}
112+
})
113+
const wrapper = await mountSuspended(ObjectSelector, {
114+
global: {
115+
plugins: [vuetify, pinia],
116+
},
117+
props: { filenames: ["test.toto"], supported_feature: "test" },
118+
})
119+
await flushPromises()
120+
const v_cards = wrapper.findAllComponents(components.VCard)
121+
expect(v_cards).toHaveLength(1)
122+
const v_img = v_cards[0].findComponent(components.VImg)
123+
expect(v_img.vm.src).toContain(`${geode_object_1}.svg`)
124+
expect(wrapper.emitted()).toHaveProperty("update_values")
125+
expect(wrapper.emitted().update_values).toHaveLength(1)
126+
expect(wrapper.emitted().update_values[0][0]).toEqual({
127+
input_geode_object: geode_object_1,
128+
})
129+
})
85130
})
86131
})

0 commit comments

Comments
 (0)