Bugzilla – Attachment 146962 Details for
Bug 32898
Cypress tests are failing
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 32898: ERM - Improve fetch
Bug-32898-ERM---Improve-fetch.patch (text/plain), 32.99 KB, created by
Tomás Cohen Arazi
on 2023-02-20 14:43:01 UTC
(
hide
)
Description:
Bug 32898: ERM - Improve fetch
Filename:
MIME Type:
Creator:
Tomás Cohen Arazi
Created:
2023-02-20 14:43:01 UTC
Size:
32.99 KB
patch
obsolete
>From 9e9dcbca6784f4ab07c17aa3f2dd4f1558b74fe4 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Wed, 8 Feb 2023 11:59:11 +0100 >Subject: [PATCH] Bug 32898: ERM - Improve fetch > >... and fix cypress tests > >The main problem was that there were no more checkError call for fetchLocalTitleCount >and the error was not displayed on the UI. > >This commit is doing several things: >- Refactor fetch.js to call the same fetch method (myFetch) in order to >deal with the error in a single place >- Have a new myFetchTotal JS function to get the X-Total-Count header >from the response and get the benefit of the previous refactoring >- Rename fetchCountLocalPackages with fetchLocalPackagesCount to match fetchLocalTitleCount >- Use fetchLocalPackagesCount on the Package list view >- Use checkError from components using fetch directly. Ideally the could >should be moved to fetch.js and myFetch should be used. >- checkError get a new flag in parameter to ask for the response instead >of the result (ie. the JSON of the response). That's useful when we need >the response status or the headers >- Make checkError throw a proper exception to stop propation. This >modify the error we display on the UI, it's why we have the following >changes in cypress tests: >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" >That's not ideal, we should have our own JS exception to avoid that >"Error" (coming from the toString call on the error) > >Signed-off-by: Pedro Amorim <pedro.amorim@ptfs-europe.com> >Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> >--- > .../vue/components/ERM/AgreementsFormAdd.vue | 3 +- > .../ERM/AgreementsFormConfirmDelete.vue | 3 +- > .../ERM/EHoldingsEBSCOPackagesList.vue | 4 +- > .../ERM/EHoldingsLocalPackagesFormAdd.vue | 15 +- > ...HoldingsLocalPackagesFormConfirmDelete.vue | 3 +- > .../ERM/EHoldingsLocalPackagesList.vue | 15 +- > .../ERM/EHoldingsLocalTitlesFormAdd.vue | 9 +- > .../EHoldingsLocalTitlesFormConfirmDelete.vue | 3 +- > .../ERM/EHoldingsLocalTitlesList.vue | 8 +- > .../js/vue/components/ERM/LicensesFormAdd.vue | 3 +- > .../ERM/LicensesFormConfirmDelete.vue | 3 +- > koha-tmpl/intranet-tmpl/prog/js/vue/fetch.js | 243 +++++------------- > t/cypress/integration/Agreements_spec.ts | 6 +- > t/cypress/integration/Licenses_spec.ts | 6 +- > t/cypress/integration/Packages_spec.ts | 15 +- > t/cypress/integration/Titles_spec.ts | 15 +- > 16 files changed, 135 insertions(+), 219 deletions(-) > >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsFormAdd.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsFormAdd.vue >index b21340f562a..bcfd66111d1 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsFormAdd.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsFormAdd.vue >@@ -190,7 +190,7 @@ import AgreementLicenses from "./AgreementLicenses.vue" > import AgreementRelationships from "./AgreementRelationships.vue" > import Documents from "./Documents.vue" > import { setMessage, setError, setWarning } from "../../messages" >-import { fetchAgreement } from "../../fetch" >+import { fetchAgreement, checkError } from "../../fetch" > import { storeToRefs } from "pinia" > > export default { >@@ -384,6 +384,7 @@ export default { > } > > fetch(apiUrl, options) >+ .then(response => checkError(response, 1)) > .then(response => { > if (response.status == 200) { > this.$router.push("/cgi-bin/koha/erm/agreements") >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsFormConfirmDelete.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsFormConfirmDelete.vue >index 5a98d042046..8c2fc90d165 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsFormConfirmDelete.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsFormConfirmDelete.vue >@@ -36,7 +36,7 @@ > </template> > > <script> >-import { fetchAgreement } from "../../fetch" >+import { fetchAgreement, checkError } from "../../fetch" > import { setMessage, setError } from "../../messages" > > export default { >@@ -70,6 +70,7 @@ export default { > } > > fetch(apiUrl, options) >+ .then(response => checkError(response, 1)) > .then(response => { > if (response.status == 204) { > setMessage(this.$__("Agreement deleted")) >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsEBSCOPackagesList.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsEBSCOPackagesList.vue >index dd4e79ae314..50bf8494823 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsEBSCOPackagesList.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsEBSCOPackagesList.vue >@@ -62,7 +62,7 @@ > <script> > import { inject, createVNode, render } from "vue" > import { storeToRefs } from "pinia" >-import { fetchCountLocalPackages } from "./../../fetch" >+import { fetchLocalPackageCount } from "./../../fetch" > import { > useDataTable, > build_url_params, >@@ -136,7 +136,7 @@ export default { > .DataTable() > .draw() > if (this.erm_providers.includes("local")) { >- this.local_count_packages = await fetchCountLocalPackages( >+ this.local_count_packages = await fetchLocalPackageCount( > this.filters > ) > } >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesFormAdd.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesFormAdd.vue >index 82d0eb96119..bf3da77f093 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesFormAdd.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesFormAdd.vue >@@ -88,7 +88,12 @@ > import { inject } from "vue" > import EHoldingsPackageAgreements from "./EHoldingsLocalPackageAgreements.vue" > import { setMessage, setError, setWarning } from "../../messages" >-import { fetchLocalPackage, createPackage, editPackage } from "../../fetch" >+import { >+ fetchLocalPackage, >+ createPackage, >+ editPackage, >+ checkError, >+} from "../../fetch" > import { storeToRefs } from "pinia" > > export default { >@@ -165,23 +170,23 @@ export default { > > if (erm_package.package_id) { > editPackage(erm_package).then(response => { >- if (response.status == 200) { >+ if (response && response.status == 200) { > this.$router.push( > "/cgi-bin/koha/erm/eholdings/local/packages" > ) > setMessage(this.$__("Package updated")) >- } else { >+ } else if (response) { > setError(response.message || response.statusText) > } > }) > } else { > createPackage(erm_package).then(response => { >- if (response.status == 201) { >+ if (response && response.status == 201) { > this.$router.push( > "/cgi-bin/koha/erm/eholdings/local/packages" > ) > setMessage(this.$__("Package created")) >- } else { >+ } else if (response) { > setError(response.message || response.statusText) > } > }) >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesFormConfirmDelete.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesFormConfirmDelete.vue >index 6f7b43e6e68..afd05514520 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesFormConfirmDelete.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesFormConfirmDelete.vue >@@ -31,7 +31,7 @@ > </template> > > <script> >-import { fetchLocalPackage } from "../../fetch" >+import { fetchLocalPackage, checkError } from "../../fetch" > import { setMessage, setError } from "../../messages" > > export default { >@@ -67,6 +67,7 @@ export default { > } > > fetch(apiUrl, options) >+ .then(response => checkError(response, 1)) > .then(response => { > if (response.status == 204) { > setMessage(this.$__("Package deleted")) >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesList.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesList.vue >index 2fa3f105fc5..45140f1460e 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesList.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesList.vue >@@ -1,10 +1,10 @@ > <template> > <div> > <div v-if="!initialized">{{ $__("Loading") }}</div> >- <div v-else-if="packages" id="packages_list"> >+ <div v-else-if="package_count" id="packages_list"> > <Toolbar /> > <div >- v-if="packages.length" >+ v-if="package_count > 0" > id="package_list_result" > class="page-section" > > >@@ -21,7 +21,7 @@ > import Toolbar from "./EHoldingsLocalPackagesToolbar.vue" > import { inject, createVNode, render } from "vue" > import { storeToRefs } from "pinia" >-import { fetchLocalPackages } from "../../fetch" >+import { fetchLocalPackageCount } from "../../fetch" > import { useDataTable } from "../../composables/datatables" > > export default { >@@ -44,7 +44,7 @@ export default { > }, > data: function () { > return { >- packages: [], >+ package_count: [], > initialized: false, > filters: { > package_name: this.$route.query.package_name || "", >@@ -54,13 +54,12 @@ export default { > }, > beforeRouteEnter(to, from, next) { > next(vm => { >- vm.getPackages().then(() => vm.build_datatable()) >+ vm.getPackageCount().then(() => vm.build_datatable()) > }) > }, > methods: { >- async getPackages() { >- const packages = await fetchLocalPackages() >- this.packages = packages >+ async getPackageCount() { >+ this.package_count = await fetchLocalPackageCount() > this.initialized = true > }, > show_package: function (package_id) { >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesFormAdd.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesFormAdd.vue >index ca3585b2cba..ff90a07ce1c 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesFormAdd.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesFormAdd.vue >@@ -388,7 +388,7 @@ > import { inject } from "vue" > import EHoldingsTitlesFormAddResources from "./EHoldingsLocalTitlesFormAddResources.vue" > import { setMessage, setError, setWarning } from "../../messages" >-import { fetchLocalTitle } from "../../fetch" >+import { fetchLocalTitle, checkError } from "../../fetch" > import { storeToRefs } from "pinia" > > export default { >@@ -506,19 +506,20 @@ export default { > } > > fetch(apiUrl, options) >+ .then(response => checkError(response, 1)) > .then( > response => { >- if (response.status == 200) { >+ if (response && response.status == 200) { > this.$router.push( > "/cgi-bin/koha/erm/eholdings/local/titles" > ) > setMessage(this.$__("Title updated")) >- } else if (response.status == 201) { >+ } else if (response && response.status == 201) { > this.$router.push( > "/cgi-bin/koha/erm/eholdings/local/titles" > ) > setMessage(this.$__("Title created")) >- } else { >+ } else if (response) { > setError(response.message || response.statusText) > } > }, >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesFormConfirmDelete.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesFormConfirmDelete.vue >index 3981fdfa134..d608333c2da 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesFormConfirmDelete.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesFormConfirmDelete.vue >@@ -31,7 +31,7 @@ > </template> > > <script> >-import { fetchLocalTitle } from "../../fetch" >+import { fetchLocalTitle, checkError } from "../../fetch" > import { setMessage, setError } from "../../messages" > > export default { >@@ -66,6 +66,7 @@ export default { > } > > fetch(apiUrl, options) >+ .then(response => checkError(response, 1)) > .then(response => { > if (response.status == 204) { > setMessage(this.$__("Title deleted")) >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesList.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesList.vue >index a30c5a65ad5..fe2a7e2e682 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesList.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesList.vue >@@ -3,8 +3,12 @@ > <div v-if="!initialized">{{ $__("Loading") }}</div> > <div v-else-if="title_count" id="titles_list"> > <Toolbar /> >- <div v-if="title_count" id="title_list_result" class="page-section"> >- <table v-if="title_count" :id="table_id"></table> >+ <div >+ v-if="title_count > 0" >+ id="title_list_result" >+ class="page-section" >+ > >+ <table :id="table_id"></table> > </div> > <div v-else-if="initialized" class="dialog message"> > {{ $__("There are no titles defined") }} >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicensesFormAdd.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicensesFormAdd.vue >index b5034591e24..57e3f6e9821 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicensesFormAdd.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicensesFormAdd.vue >@@ -150,7 +150,7 @@ import flatPickr from "vue-flatpickr-component" > import UserRoles from "./UserRoles.vue" > import Documents from "./Documents.vue" > import { setMessage, setError, setWarning } from "../../messages" >-import { fetchLicense } from "../../fetch" >+import { fetchLicense, checkError } from "../../fetch" > import { storeToRefs } from "pinia" > > export default { >@@ -265,6 +265,7 @@ export default { > } > > fetch(apiUrl, options) >+ .then(response => checkError(response, 1)) > .then( > response => { > if (response.status == 200) { >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicensesFormConfirmDelete.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicensesFormConfirmDelete.vue >index 1de737b10a6..06c4ff321c1 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicensesFormConfirmDelete.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicensesFormConfirmDelete.vue >@@ -35,7 +35,7 @@ > </template> > > <script> >-import { fetchLicense } from "../../fetch" >+import { fetchLicense, checkError } from "../../fetch" > import { setMessage, setError } from "../../messages" > > export default { >@@ -70,6 +70,7 @@ export default { > } > > fetch(apiUrl, options) >+ .then(response => checkError(response, 1)) > .then(response => { > if (response.status == 204) { > this.$router.push("/cgi-bin/koha/erm/licenses") >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/fetch.js b/koha-tmpl/intranet-tmpl/prog/js/vue/fetch.js >index 1a31a2e9495..a00526b204d 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/fetch.js >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/fetch.js >@@ -3,113 +3,47 @@ import { setError } from "./messages"; > export const fetchAgreement = async function (agreement_id) { > if (!agreement_id) return; > const apiUrl = "/api/v1/erm/agreements/" + agreement_id; >- let agreement; >- await fetch(apiUrl, { >+ return await myFetch(apiUrl, { > headers: { > "x-koha-embed": > "periods,user_roles,user_roles.patron,agreement_licenses,agreement_licenses.license,agreement_relationships,agreement_relationships.related_agreement,documents,agreement_packages,agreement_packages.package,vendor", > }, >- }) >- .then(checkError) >- .then( >- (result) => { >- agreement = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return agreement; >+ }); > }; > > export const fetchAgreements = async function () { > const apiUrl = "/api/v1/erm/agreements?_per_page=-1"; >- let agreements; >- await fetch(apiUrl) >- .then(checkError) >- .then( >- (result) => { >- agreements = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return agreements; >+ return await myFetch(apiUrl); > }; > > export const fetchLicense = async function (license_id) { > if (!license_id) return; > const apiUrl = "/api/v1/erm/licenses/" + license_id; >- let license; >- await fetch(apiUrl, { >+ return await myFetch(apiUrl, { > headers: { > "x-koha-embed": "user_roles,user_roles.patron,vendor,documents", > }, >- }) >- .then(checkError) >- .then( >- (result) => { >- license = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return license; >+ }); > }; > > export const fetchLicenses = async function () { > const apiUrl = "/api/v1/erm/licenses?_per_page=-1"; >- let licenses; >- await fetch(apiUrl, { >+ return await myFetch(apiUrl, { > headers: { > "x-koha-embed": "vendor.name", > }, >- }) >- .then(checkError) >- .then( >- (result) => { >- licenses = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return licenses; >+ }); > }; > > export const fetchPatron = async function (patron_id) { > if (!patron_id) return; > const apiUrl = "/api/v1/patrons/" + patron_id; >- let patron; >- await fetch(apiUrl) >- .then(checkError) >- .then( >- (result) => { >- patron = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return patron; >+ return await myFetch(apiUrl); > }; > > export const fetchVendors = async function () { > const apiUrl = "/api/v1/acquisitions/vendors?_per_page=-1"; >- let vendors; >- await fetch(apiUrl) >- .then(checkError) >- .then( >- (result) => { >- vendors = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return vendors; >+ return await myFetch(apiUrl); > }; > > const _createEditPackage = async function (method, erm_package) { >@@ -136,20 +70,7 @@ const _createEditPackage = async function (method, erm_package) { > }, > }; > >- let r; >- await fetch(apiUrl, options) >- .then( >- (response) => { >- r = response; >- }, >- (error) => { >- setError(error); >- } >- ) >- .catch((e) => { >- console.log(e); >- }); >- return r; >+ return await myFetch(apiUrl, options, 1); > }; > > export const createPackage = function (erm_package) { >@@ -161,23 +82,12 @@ export const editPackage = function (erm_package) { > > const _fetchPackage = async function (apiUrl, package_id) { > if (!package_id) return; >- let erm_package; >- await fetch(apiUrl, { >+ return await myFetch(apiUrl, { > headers: { > "x-koha-embed": > "package_agreements,package_agreements.agreement,resources+count,vendor", > }, >- }) >- .then(checkError) >- .then( >- (result) => { >- erm_package = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return erm_package; >+ }); > }; > export const fetchLocalPackage = function (package_id) { > const apiUrl = "/api/v1/erm/eholdings/local/packages/" + package_id; >@@ -190,21 +100,11 @@ export const fetchEBSCOPackage = function (package_id) { > > export const _fetchPackages = async function (apiUrl) { > let packages; >- await fetch(apiUrl, { >+ return await myFetch(apiUrl, { > headers: { > "x-koha-embed": "resources+count,vendor.name", > }, >- }) >- .then(checkError) >- .then( >- (result) => { >- packages = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return packages; >+ }); > }; > export const fetchLocalPackages = function () { > const apiUrl = "/api/v1/erm/eholdings/local/packages?_per_page=-1"; >@@ -215,48 +115,32 @@ export const fetchEBSCOPackages = function () { > return _fetchPackages(apiUrl); > }; > >-export const fetchCountLocalPackages = async function (filters) { >- const q = { >- "me.name": { like: "%" + filters.package_name + "%" }, >- ...(filters.content_type >- ? { "me.content_type": filters.content_type } >- : {}), >- }; >+export const fetchLocalPackageCount = async function (filters) { >+ const q = filters >+ ? { >+ "me.name": { like: "%" + filters.package_name + "%" }, >+ ...(filters.content_type >+ ? { "me.content_type": filters.content_type } >+ : {}), >+ } >+ : {}; > > const params = { > _page: 1, > _per_page: 1, > q: JSON.stringify(q), > }; >- let count_local_packages; > var apiUrl = "/api/v1/erm/eholdings/local/packages"; >- await fetch(apiUrl + "?" + new URLSearchParams(params)) >- //.then(checkError) >- .then( >- (response) => >- (count_local_packages = response.headers.get("X-Total-Count")) >- ); >- return count_local_packages; >+ return await myFetchTotal(apiUrl + "?" + new URLSearchParams(params)); > }; > > export const _fetchTitle = async function (apiUrl, title_id) { > if (!title_id) return; >- let title; >- await fetch(apiUrl, { >+ return await myFetch(apiUrl, { > headers: { > "x-koha-embed": "resources,resources.package", > }, >- }) >- .then(checkError) >- .then( >- (result) => { >- title = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return title; >+ }); > }; > export const fetchLocalTitle = function (title_id) { > const apiUrl = "/api/v1/erm/eholdings/local/titles/" + title_id; >@@ -287,35 +171,17 @@ export const fetchLocalTitleCount = async function (filters) { > _per_page: 1, > ...(q ? { q: JSON.stringify(q) } : {}), > }; >- let count_local_titles; > var apiUrl = "/api/v1/erm/eholdings/local/titles"; >- await fetch(apiUrl + "?" + new URLSearchParams(params)) >- //.then(checkError) >- .then( >- (response) => >- (count_local_titles = response.headers.get("X-Total-Count")) >- ); >- return count_local_titles; >+ return await myFetchTotal(apiUrl + "?" + new URLSearchParams(params)); > }; > > export const _fetchResource = async function (apiUrl, resource_id) { > if (!resource_id) return; >- let resource; >- await fetch(apiUrl, { >+ return await myFetch(apiUrl, { > headers: { > "x-koha-embed": "title,package,vendor", > }, >- }) >- .then(checkError) >- .then( >- (result) => { >- resource = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return resource; >+ }); > }; > export const fetchLocalResource = function (resource_id) { > const apiUrl = "/api/v1/erm/eholdings/local/resources/" + resource_id; >@@ -327,18 +193,7 @@ export const fetchEBSCOResource = function (resource_id) { > }; > > export const _fetchResources = async function (apiUrl) { >- let resources; >- await fetch(apiUrl) >- .then(checkError) >- .then( >- (result) => { >- resources = result; >- }, >- (error) => { >- setError(error); >- } >- ); >- return resources; >+ return await myFetch(apiUrl); > }; > > export const fetchLocalResources = function () { >@@ -350,12 +205,44 @@ export const fetchEBSCOResources = function () { > return _fetchResources(apiUrl); > }; > >-export const checkError = function (response) { >+export const myFetch = async function (url, options, return_response) { >+ let r; >+ await fetch(url, options || {}) >+ .then((response) => checkError(response, return_response)) >+ .then( >+ (result) => { >+ r = result; >+ }, >+ (error) => { >+ setError(error.toString()); >+ } >+ ) >+ .catch((error) => { >+ setError(error); >+ }); >+ return r; >+}; >+export const myFetchTotal = async function (url, options) { >+ let r; >+ await myFetch(url, options, 1).then( >+ (response) => { >+ if (response) { >+ r = response.headers.get("X-Total-Count"); >+ } >+ }, >+ (error) => { >+ setError(error.toString()); >+ } >+ ); >+ return r; >+}; >+ >+export const checkError = function (response, return_response) { > if (response.status >= 200 && response.status <= 299) { >- return response.json(); >+ return return_response ? response : response.json(); > } else { > console.log("Server returned an error:"); > console.log(response); >- setError("%s (%s)".format(response.statusText, response.status)); >+ throw Error("%s (%s)".format(response.statusText, response.status)); > } > }; >diff --git a/t/cypress/integration/Agreements_spec.ts b/t/cypress/integration/Agreements_spec.ts >index 632fc2533ef..f562c40809c 100644 >--- a/t/cypress/integration/Agreements_spec.ts >+++ b/t/cypress/integration/Agreements_spec.ts >@@ -286,7 +286,7 @@ describe("Agreement CRUD operations", () => { > }); > cy.get("#agreements_add").contains("Submit").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >@@ -432,7 +432,7 @@ describe("Agreement CRUD operations", () => { > }); > cy.get("#agreements_add").contains("Submit").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >@@ -511,7 +511,7 @@ describe("Agreement CRUD operations", () => { > }); > cy.contains("Yes, delete").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >diff --git a/t/cypress/integration/Licenses_spec.ts b/t/cypress/integration/Licenses_spec.ts >index 3a88d037004..1a308a7163a 100644 >--- a/t/cypress/integration/Licenses_spec.ts >+++ b/t/cypress/integration/Licenses_spec.ts >@@ -131,7 +131,7 @@ describe("License CRUD operations", () => { > }); > cy.get("#licenses_add").contains("Submit").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >@@ -189,7 +189,7 @@ describe("License CRUD operations", () => { > }); > cy.get("#licenses_add").contains("Submit").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >@@ -263,7 +263,7 @@ describe("License CRUD operations", () => { > }); > cy.contains("Yes, delete").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >diff --git a/t/cypress/integration/Packages_spec.ts b/t/cypress/integration/Packages_spec.ts >index ee508f3585c..c368b79a1fe 100644 >--- a/t/cypress/integration/Packages_spec.ts >+++ b/t/cypress/integration/Packages_spec.ts >@@ -51,7 +51,14 @@ describe("Package CRUD operations", () => { > ); > > // GET packages returns empty list >- cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", []); >+ cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", { >+ statusCode: 200, >+ body: [], >+ headers: { >+ "X-Base-Total-Count": "0", >+ "X-Total-Count": "0", >+ }, >+ }); > cy.visit("/cgi-bin/koha/erm/eholdings/local/packages"); > cy.get("#packages_list").contains("There are no packages defined"); > >@@ -114,7 +121,7 @@ describe("Package CRUD operations", () => { > }); > cy.get("#packages_add").contains("Submit").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >@@ -183,7 +190,7 @@ describe("Package CRUD operations", () => { > }); > cy.get("#packages_add").contains("Submit").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >@@ -298,7 +305,7 @@ describe("Package CRUD operations", () => { > }); > cy.contains("Yes, delete").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >diff --git a/t/cypress/integration/Titles_spec.ts b/t/cypress/integration/Titles_spec.ts >index 88b5bb1e6a4..bef33b78315 100644 >--- a/t/cypress/integration/Titles_spec.ts >+++ b/t/cypress/integration/Titles_spec.ts >@@ -134,7 +134,14 @@ describe("Title CRUD operations", () => { > ); > > // GET titles returns empty list >- cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", []); >+ cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", { >+ statusCode: 200, >+ body: [], >+ headers: { >+ "X-Base-Total-Count": "0", >+ "X-Total-Count": "0", >+ }, >+ }); > cy.visit("/cgi-bin/koha/erm/eholdings/local/titles"); > cy.get("#titles_list").contains("There are no titles defined"); > >@@ -223,7 +230,7 @@ describe("Title CRUD operations", () => { > }); > cy.get("#titles_add").contains("Submit").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >@@ -314,7 +321,7 @@ describe("Title CRUD operations", () => { > }); > cy.get("#titles_add").contains("Submit").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >@@ -431,7 +438,7 @@ describe("Title CRUD operations", () => { > }); > cy.contains("Yes, delete").click(); > cy.get("main div[class='dialog alert']").contains( >- "Something went wrong: Internal Server Error" >+ "Something went wrong: Error: Internal Server Error" > ); > > // Submit the form, success! >-- >2.34.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 32898
:
146343
|
146384
|
146385
|
146399
|
146643
|
146723
|
146724
|
146725
|
146957
|
146960
|
146961
| 146962 |
146963
|
146964