This is an automated email from the ASF dual-hosted git repository. kinow pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
commit 17c9205835dd1b94f07ec26dfa26fad7b1d779a8 Author: Simon Bin <s...@informatik.uni-leipzig.de> AuthorDate: Fri Dec 16 00:42:49 2022 +0100 GH-1679: edit not working on non root g-sp --- .../jena-fuseki-ui/src/services/fuseki.service.js | 40 +++++++++++++++++++--- .../jena-fuseki-ui/src/views/dataset/Edit.vue | 12 +++++-- .../tests/unit/services/fuseki.service.spec.js | 9 +++-- 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js b/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js index 4183991deb..a090ec17f4 100644 --- a/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js +++ b/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js @@ -181,9 +181,31 @@ class FusekiService { return results } - async fetchGraph (datasetName, graphName) { + /** + * Get the data endpoint out of a list of server endpoints. + * + * For now we are simply returning the first non-empty, but that + * may change at some point. + * + * @private + * @param {string[]} serverEndpoints - list of server endpoints in the dataset (can be an empty list). + */ + getDataEndpoint(serverEndpoints) { + return serverEndpoints.find(endpoint => endpoint !== '') || '' + } + + /** + * Fetch a graph. + * @param {string} datasetName - Jena dataset name. + * @param {string[]} serverEndpoints - list of server endpoints in the dataset (can be an empty list). + * @param {string} graphName - name of the graph being accessed. + * @return {Promise<AxiosResponse<any>>} + */ + async fetchGraph (datasetName, serverEndpoints, graphName) { + const dataEndpoint = this.getDataEndpoint(serverEndpoints) + const urlPart = `${datasetName}/${dataEndpoint}` return await axios - .get(this.getFusekiUrl(`/${datasetName}`), { + .get(this.getFusekiUrl(urlPart), { params: { graph: graphName }, @@ -193,9 +215,19 @@ class FusekiService { }) } - async saveGraph (datasetName, graphName, code) { + /** + * Save a graph. + * @param {string} datasetName - Jena dataset name. + * @param {string[]} serverEndpoints - list of server endpoints in the dataset (can be an empty list). + * @param {string} graphName - name of the graph being accessed. + * @param {string} code - graph content. + * @return {Promise<AxiosResponse<any>>} + */ + async saveGraph (datasetName, serverEndpoints, graphName, code) { + const dataEndpoint = this.getDataEndpoint(serverEndpoints) + const urlPart = `${datasetName}/${dataEndpoint}` return await axios - .put(this.getFusekiUrl(`/${datasetName}`), code, { + .put(this.getFusekiUrl(urlPart), code, { params: { graph: graphName }, diff --git a/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Edit.vue b/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Edit.vue index e5458e1515..8dde59f7af 100644 --- a/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Edit.vue +++ b/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Edit.vue @@ -261,7 +261,11 @@ export default { this.loadingGraph = true this.selectedGraph = graphName try { - const result = await this.$fusekiService.fetchGraph(this.datasetName, graphName) + const dataEndpoint = this.services['gsp-rw']['srv.endpoints'].find(endpoint => endpoint !== '') || '' + const result = await this.$fusekiService.fetchGraph( + this.datasetName, + this.services['gsp-rw']['srv.endpoints'], + graphName) this.code = result.data } catch (error) { displayError(this, error) @@ -277,7 +281,11 @@ export default { if (!this.saveGraphDisabled) { this.loadingGraph = true try { - await this.$fusekiService.saveGraph(this.datasetName, this.selectedGraph, this.content) + await this.$fusekiService.saveGraph( + this.datasetName, + this.services['gsp-rw']['srv.endpoints'], + this.selectedGraph, + this.content) displayNotification(this, `Graph updated for dataset "${this.datasetName}"`) } catch (error) { displayError(this, error) diff --git a/jena-fuseki2/jena-fuseki-ui/tests/unit/services/fuseki.service.spec.js b/jena-fuseki2/jena-fuseki-ui/tests/unit/services/fuseki.service.spec.js index 87db72cd7c..6c392bd8ab 100644 --- a/jena-fuseki2/jena-fuseki-ui/tests/unit/services/fuseki.service.spec.js +++ b/jena-fuseki2/jena-fuseki-ui/tests/unit/services/fuseki.service.spec.js @@ -283,8 +283,11 @@ describe('FusekiService', () => { stub.resolves(Promise.resolve({ data: 42 })) - const graph = await fusekiService.fetchGraph('jena', 'default') + const graph = await fusekiService.fetchGraph('jena', ['dataEndpoint'], 'default') expect(stub.called).to.equal(true) + const getArgs = stub.getCall(0).args + // See https://github.com/apache/jena/pull/1679 + expect(getArgs[0]).to.equal('/jena/dataEndpoint') expect(graph).to.deep.equal({ data: 42 }) stub.restore() }) @@ -293,7 +296,7 @@ describe('FusekiService', () => { stub.resolves(Promise.resolve({ data: 42 })) - const graph = await fusekiService.saveGraph('jena', 'default', 'abc') + const graph = await fusekiService.saveGraph('jena', [], 'default', 'abc') expect(stub.called).to.equal(true) expect(graph).to.deep.equal({ data: 42 }) stub.restore() @@ -306,7 +309,7 @@ describe('FusekiService', () => { } stub.resolves(Promise.reject(error)) try { - await fusekiService.saveGraph('jena', 'default', 'abc') + await fusekiService.saveGraph('jena', [], 'default', 'abc') expect.fail('Not supposed to get here') } catch (error) { expect(error.message).to.be.equal('42')