@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.22.2 → 4.22.4
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/dpr/DprPollingStatusClass.mjs +2 -2
- package/dpr/components/_async/async-filters-form/types.d.js +1 -1
- package/dpr/components/_async/async-filters-form/types.d.js.map +1 -1
- package/dpr/components/_async/async-filters-form/types.d.ts +0 -1
- package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
- package/dpr/components/_catalogue/catalogue-list/utils.js.map +3 -3
- package/dpr/components/_catalogue/catalogue-list/utils.ts +2 -1
- package/dpr/components/_charts/utils.test.ts +0 -3
- package/dpr/components/bookmark-toggle/clientClass.mjs +6 -4
- package/dpr/components/bookmark-toggle/view.njk +1 -1
- package/dpr/components/user-reports/bookmarks/utils.js +1 -1
- package/dpr/components/user-reports/bookmarks/utils.js.map +3 -3
- package/dpr/components/user-reports/bookmarks/utils.ts +13 -3
- package/dpr/components/user-reports/requested/clientClass.mjs +19 -7
- package/dpr/components/user-reports/utils.js.map +2 -2
- package/dpr/components/user-reports/utils.test.ts +24 -24
- package/dpr/components/user-reports/utils.ts +2 -0
- package/dpr/components/user-reports/viewed/clientClass.mjs +4 -3
- package/dpr/middleware/setUpDprResources.js +1 -1
- package/dpr/middleware/setUpDprResources.js.map +3 -3
- package/dpr/middleware/setUpDprResources.test.ts +1 -0
- package/dpr/middleware/setUpDprResources.ts +3 -1
- package/dpr/routes/journeys/my-reports/bookmarks/controller.js +1 -1
- package/dpr/routes/journeys/my-reports/bookmarks/controller.js.map +3 -3
- package/dpr/routes/journeys/my-reports/bookmarks/controller.ts +6 -9
- package/dpr/routes/journeys/my-reports/bookmarks/routes.js +1 -1
- package/dpr/routes/journeys/my-reports/bookmarks/routes.js.map +2 -2
- package/dpr/routes/journeys/my-reports/bookmarks/routes.ts +0 -3
- package/dpr/routes/journeys/my-reports/bookmarks/service.js +3 -3
- package/dpr/routes/journeys/my-reports/bookmarks/service.js.map +3 -3
- package/dpr/routes/journeys/my-reports/bookmarks/service.ts +7 -4
- package/dpr/routes/journeys/my-reports/recently-viewed/controller.js +1 -1
- package/dpr/routes/journeys/my-reports/recently-viewed/controller.js.map +2 -2
- package/dpr/routes/journeys/my-reports/recently-viewed/controller.ts +2 -1
- package/dpr/routes/journeys/my-reports/recently-viewed/routes.js +1 -1
- package/dpr/routes/journeys/my-reports/recently-viewed/routes.js.map +2 -2
- package/dpr/routes/journeys/my-reports/recently-viewed/routes.ts +1 -1
- package/dpr/routes/journeys/my-reports/requested-reports/controller.js +1 -1
- package/dpr/routes/journeys/my-reports/requested-reports/controller.js.map +2 -2
- package/dpr/routes/journeys/my-reports/requested-reports/controller.ts +1 -1
- package/dpr/routes/journeys/my-reports/requested-reports/routes.js +1 -1
- package/dpr/routes/journeys/my-reports/requested-reports/routes.js.map +2 -2
- package/dpr/routes/journeys/my-reports/requested-reports/routes.ts +1 -1
- package/dpr/routes/journeys/my-reports/requested-reports/service.js +1 -1
- package/dpr/routes/journeys/my-reports/requested-reports/service.js.map +3 -3
- package/dpr/routes/journeys/my-reports/requested-reports/service.ts +37 -1
- package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
- package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
- package/dpr/routes/journeys/request-report/filters/utils.ts +3 -1
- package/dpr/routes/journeys/request-report/tests.cy.js +1 -1
- package/dpr/routes/journeys/request-report/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/request-report/tests.cy.ts +22 -1
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@ export function routes({ layoutPath, services }: { layoutPath: string; services:
|
|
|
8
8
|
const router = Router({ mergeParams: true })
|
|
9
9
|
|
|
10
10
|
const controller = new RequestedReportsController(services)
|
|
11
|
-
router.
|
|
11
|
+
router.post('/:id', controller.POST)
|
|
12
12
|
|
|
13
13
|
router.use(`/list`, listRoutes({ layoutPath, services }))
|
|
14
14
|
return router
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var y=Object.create;var R=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var E=(i,e)=>{for(var t in e)R(i,t,{get:e[t],enumerable:!0})},f=(i,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of I(e))!v.call(i,r)&&r!==t&&R(i,r,{get:()=>e[r],enumerable:!(s=x(e,r))||s.enumerable});return i};var m=(i,e,t)=>(t=i!=null?y(D(i)):{},f(e||!i||!i.__esModule?R(t,"default",{value:i,enumerable:!0}):t,i)),C=i=>f(R({},"__esModule",{value:!0}),i);var b={};E(b,{RequestedReportService:()=>l,default:()=>P});module.exports=C(b);var o=require("../../../../types/UserReports"),h=m(require("../../../../services/reportStoreService")),q=require("../../../../utils/urlHelper"),S=m(require("../../../../utils/logger"));class l extends h.default{constructor(e){super(e)}async addReport(e,t){const s=await this.getState(e);s.requestedReports.unshift(t),await this.saveState(e,s)}async removeReport(e,t){const s=await this.getState(t),r=this.findIndexByExecutionId(e,s.requestedReports);s.requestedReports.splice(r,1),await this.saveState(t,s)}async getReportByExecutionId(e,t){return(await this.getState(t)).requestedReports.find(r=>r.executionId===e)}async getReportByTableId(e,t){return(await this.getState(t)).requestedReports.find(r=>r.tableId===e)}async getAllReports(e){return(await this.getState(e)).requestedReports}async getAllReportsById(e,t){return(await this.getState(t)).requestedReports.filter(r=>r.id&&r.id===e||r.variantId&&r.variantId===e)}async updateLastViewed(e,t){const s=await this.getState(t),r=this.findIndexByExecutionId(e,s.requestedReports),a=s.requestedReports[r];a.timestamp.lastViewed=new Date,s.requestedReports[r]=a,await this.saveState(t,s)}async updateStatus(e,t,s,r){const a=await this.getState(t),d=this.findIndexByExecutionId(e,a.requestedReports);let n=a.requestedReports[d];n&&(n=this.updateDataByStatus(n,s,r)),a.requestedReports[d]=n,await this.saveState(t,a)}async setToExpired(e,t){const s=await this.getState(t),r=this.findIndexByExecutionId(e,s.requestedReports);let a=s.requestedReports[r];a&&(a={...a,status:o.RequestStatus.EXPIRED,timestamp:{...a.timestamp,expired:new Date}},s.requestedReports[r]=a,await this.saveState(t,s))}async cleanList(e,t){const a=(await this.getState(e)).requestedReports.filter(n=>n.timestamp.lastViewed!==void 0);let d=0;await Promise.all(a.map(async n=>{const{executionId:p}=n;!t.find(g=>{const{executionId:c}=g;return c&&c===p})&&p&&(await this.removeReport(p,e),d+=1)})),d>0&&S.default.info(`RequestedReports: Removed ${d} stale reports from list`)}setReportUrl(e){const{tableId:t,url:s,dpdPathFromQuery:r,dataProductDefinitionsPath:a,type:d}=e;let n,p;if(s&&s.polling?.pathname){let u=Array.from(new Array(2));u=s.polling.pathname.replace("/request-report","/view-report/async").split("/"),u[u.length-2]=t,u[u.length-1]=d;const g=u.join("/"),c=s.report?.search?s.report.search:"",w=a&&r?`${(0,q.getDpdPathSuffix)(a)}`:"";n=`${g}${c||w}`,p=`${s.origin}${n}`}return{pathname:n,fullUrl:p}}updateDataByStatus(e,t,s){const r=new Date;switch(t&&(e.status=t),t){case o.RequestStatus.FAILED:e.timestamp.failed=r,s&&(e.errorMessage=s);break;case o.RequestStatus.EXPIRED:e.timestamp.expired=r;break;case o.RequestStatus.ABORTED:e.timestamp.aborted=r;break;case o.RequestStatus.FINISHED:{e.timestamp.completed=r,e.url&&(e.url.report={...e.url.report,...this.setReportUrl(e)});break}case o.RequestStatus.SUBMITTED:e.timestamp.requested=r;break;case o.RequestStatus.STARTED:case o.RequestStatus.PICKED:break;default:e.timestamp.lastViewed=r;break}return e}}var P=l;0&&(module.exports={RequestedReportService});
|
|
2
2
|
//# sourceMappingURL=service.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/dpr/routes/journeys/my-reports/requested-reports/service.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport UserDataStore from '../../../../data/reportDataStore'\nimport { RequestedReport, RequestStatus } from '../../../../types/UserReports'\nimport ReportStoreService from '../../../../services/reportStoreService'\nimport { getDpdPathSuffix } from '../../../../utils/urlHelper'\n\nclass RequestedReportService extends ReportStoreService {\n constructor(userDataStore: UserDataStore) {\n super(userDataStore)\n }\n\n async addReport(userId: string, reportStateData: RequestedReport) {\n const userConfig = await this.getState(userId)\n userConfig.requestedReports.unshift(reportStateData)\n await this.saveState(userId, userConfig)\n }\n\n async removeReport(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n const index = this.findIndexByExecutionId(id, userConfig.requestedReports)\n userConfig.requestedReports.splice(index, 1)\n await this.saveState(userId, userConfig)\n }\n\n async getReportByExecutionId(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n return userConfig.requestedReports.find((report) => report.executionId === id)\n }\n\n async getReportByTableId(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n return userConfig.requestedReports.find((report) => report.tableId === id)\n }\n\n async getAllReports(userId: string): Promise<RequestedReport[]> {\n const userConfig = await this.getState(userId)\n return userConfig.requestedReports\n }\n\n async getAllReportsById(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n return userConfig.requestedReports.filter((requested) => {\n return (requested.id && requested.id === id) || (requested.variantId && requested.variantId === id)\n })\n }\n\n async updateLastViewed(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n const index = this.findIndexByExecutionId(id, userConfig.requestedReports)\n const report: RequestedReport = userConfig.requestedReports[index]\n report.timestamp.lastViewed = new Date()\n userConfig.requestedReports[index] = report\n await this.saveState(userId, userConfig)\n }\n\n async updateStatus(id: string, userId: string, status?: RequestStatus, errorMessage?: string) {\n const userConfig = await this.getState(userId)\n const index = this.findIndexByExecutionId(id, userConfig.requestedReports)\n let report: RequestedReport = userConfig.requestedReports[index]\n if (report) report = this.updateDataByStatus(report, status, errorMessage)\n userConfig.requestedReports[index] = report\n await this.saveState(userId, userConfig)\n }\n\n async setToExpired(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n const index = this.findIndexByExecutionId(id, userConfig.requestedReports)\n let report: RequestedReport = userConfig.requestedReports[index]\n if (report) {\n report = {\n ...report,\n status: RequestStatus.EXPIRED,\n timestamp: {\n ...report.timestamp,\n expired: new Date(),\n },\n }\n userConfig.requestedReports[index] = report\n await this.saveState(userId, userConfig)\n }\n }\n\n setReportUrl(report: RequestedReport) {\n const { tableId, url, dpdPathFromQuery, dataProductDefinitionsPath, type } = report\n\n let pathname\n let fullUrl\n\n if (url && url.polling?.pathname) {\n let reportUrlArr = Array.from(new Array(2))\n reportUrlArr = url.polling.pathname.replace('/request-report', '/view-report/async').split('/')\n reportUrlArr[reportUrlArr.length - 2] = tableId\n reportUrlArr[reportUrlArr.length - 1] = type\n const reportUrl = reportUrlArr.join('/')\n\n const search = url.report?.search ? url.report.search : ''\n const dpdPath =\n dataProductDefinitionsPath && dpdPathFromQuery ? `${getDpdPathSuffix(dataProductDefinitionsPath)}` : ''\n const searchPath = search || dpdPath\n pathname = `${reportUrl}${searchPath}`\n fullUrl = `${url.origin}${pathname}`\n }\n\n return {\n pathname,\n fullUrl,\n }\n }\n\n updateDataByStatus(report: RequestedReport, status?: RequestStatus | undefined, errorMessage?: string) {\n const ts = new Date()\n if (status) report.status = status\n switch (status) {\n case RequestStatus.FAILED:\n report.timestamp.failed = ts\n if (errorMessage) report.errorMessage = errorMessage\n break\n case RequestStatus.EXPIRED:\n report.timestamp.expired = ts\n break\n case RequestStatus.ABORTED:\n report.timestamp.aborted = ts\n break\n case RequestStatus.FINISHED: {\n report.timestamp.completed = ts\n if (report.url) {\n report.url.report = {\n ...report.url.report,\n ...this.setReportUrl(report),\n }\n }\n break\n }\n case RequestStatus.SUBMITTED:\n report.timestamp.requested = ts\n break\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n break\n default:\n report.timestamp.lastViewed = ts\n break\n }\n\n return report\n }\n}\n\nexport { RequestedReportService }\nexport default RequestedReportService\n"],
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAEA,IAAAK,
|
|
6
|
-
"names": ["service_exports", "__export", "RequestedReportService", "service_default", "__toCommonJS", "import_UserReports", "import_reportStoreService", "import_urlHelper", "ReportStoreService", "userDataStore", "userId", "reportStateData", "userConfig", "id", "index", "report", "requested", "status", "errorMessage", "tableId", "url", "dpdPathFromQuery", "dataProductDefinitionsPath", "type", "pathname", "fullUrl", "reportUrlArr", "reportUrl", "search", "dpdPath", "ts"]
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport UserDataStore from '../../../../data/reportDataStore'\nimport { RequestedReport, RequestStatus, StoredReportData } from '../../../../types/UserReports'\nimport ReportStoreService from '../../../../services/reportStoreService'\nimport { getDpdPathSuffix } from '../../../../utils/urlHelper'\nimport logger from '../../../../utils/logger'\n\nclass RequestedReportService extends ReportStoreService {\n constructor(userDataStore: UserDataStore) {\n super(userDataStore)\n }\n\n async addReport(userId: string, reportStateData: RequestedReport) {\n const userConfig = await this.getState(userId)\n userConfig.requestedReports.unshift(reportStateData)\n await this.saveState(userId, userConfig)\n }\n\n async removeReport(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n const index = this.findIndexByExecutionId(id, userConfig.requestedReports)\n userConfig.requestedReports.splice(index, 1)\n await this.saveState(userId, userConfig)\n }\n\n async getReportByExecutionId(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n return userConfig.requestedReports.find((report) => report.executionId === id)\n }\n\n async getReportByTableId(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n return userConfig.requestedReports.find((report) => report.tableId === id)\n }\n\n async getAllReports(userId: string): Promise<RequestedReport[]> {\n const userConfig = await this.getState(userId)\n return userConfig.requestedReports\n }\n\n async getAllReportsById(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n return userConfig.requestedReports.filter((requested) => {\n return (requested.id && requested.id === id) || (requested.variantId && requested.variantId === id)\n })\n }\n\n async updateLastViewed(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n const index = this.findIndexByExecutionId(id, userConfig.requestedReports)\n const report: RequestedReport = userConfig.requestedReports[index]\n report.timestamp.lastViewed = new Date()\n userConfig.requestedReports[index] = report\n await this.saveState(userId, userConfig)\n }\n\n async updateStatus(id: string, userId: string, status?: RequestStatus, errorMessage?: string) {\n const userConfig = await this.getState(userId)\n const index = this.findIndexByExecutionId(id, userConfig.requestedReports)\n let report: RequestedReport = userConfig.requestedReports[index]\n if (report) report = this.updateDataByStatus(report, status, errorMessage)\n userConfig.requestedReports[index] = report\n await this.saveState(userId, userConfig)\n }\n\n async setToExpired(id: string, userId: string) {\n const userConfig = await this.getState(userId)\n const index = this.findIndexByExecutionId(id, userConfig.requestedReports)\n let report: RequestedReport = userConfig.requestedReports[index]\n if (report) {\n report = {\n ...report,\n status: RequestStatus.EXPIRED,\n timestamp: {\n ...report.timestamp,\n expired: new Date(),\n },\n }\n userConfig.requestedReports[index] = report\n await this.saveState(userId, userConfig)\n }\n }\n\n /**\n * Removes old stale data from requested reports\n * - When a report is viewed it is given a lastViewed ts.\n * - If the requested data has a lastViewed ts and\n * - has no corresponding viewed entry\n * - then that requested data is stale and can be removed\n *\n * @param {string} userId\n * @param {StoredReportData[]} viewedReports\n * @memberof RequestedReportService\n */\n async cleanList(userId: string, viewedReports: StoredReportData[]) {\n const userConfig = await this.getState(userId)\n const allRequested = userConfig.requestedReports\n const viewedRequestedReports = allRequested.filter((requestedReport) => {\n return requestedReport.timestamp.lastViewed !== undefined\n })\n\n let count = 0\n await Promise.all(\n viewedRequestedReports.map(async (viewedRequestReport) => {\n const { executionId } = viewedRequestReport\n const viewedReport = viewedReports.find((report) => {\n const { executionId: viewedExecutionId } = report\n return viewedExecutionId && viewedExecutionId === executionId\n })\n if (!viewedReport && executionId) {\n await this.removeReport(executionId, userId)\n count += 1\n }\n }),\n )\n if (count > 0) logger.info(`RequestedReports: Removed ${count} stale reports from list`)\n }\n\n setReportUrl(report: RequestedReport) {\n const { tableId, url, dpdPathFromQuery, dataProductDefinitionsPath, type } = report\n\n let pathname\n let fullUrl\n\n if (url && url.polling?.pathname) {\n let reportUrlArr = Array.from(new Array(2))\n reportUrlArr = url.polling.pathname.replace('/request-report', '/view-report/async').split('/')\n reportUrlArr[reportUrlArr.length - 2] = tableId\n reportUrlArr[reportUrlArr.length - 1] = type\n const reportUrl = reportUrlArr.join('/')\n\n const search = url.report?.search ? url.report.search : ''\n const dpdPath =\n dataProductDefinitionsPath && dpdPathFromQuery ? `${getDpdPathSuffix(dataProductDefinitionsPath)}` : ''\n const searchPath = search || dpdPath\n pathname = `${reportUrl}${searchPath}`\n fullUrl = `${url.origin}${pathname}`\n }\n\n return {\n pathname,\n fullUrl,\n }\n }\n\n updateDataByStatus(report: RequestedReport, status?: RequestStatus | undefined, errorMessage?: string) {\n const ts = new Date()\n if (status) report.status = status\n switch (status) {\n case RequestStatus.FAILED:\n report.timestamp.failed = ts\n if (errorMessage) report.errorMessage = errorMessage\n break\n case RequestStatus.EXPIRED:\n report.timestamp.expired = ts\n break\n case RequestStatus.ABORTED:\n report.timestamp.aborted = ts\n break\n case RequestStatus.FINISHED: {\n report.timestamp.completed = ts\n if (report.url) {\n report.url.report = {\n ...report.url.report,\n ...this.setReportUrl(report),\n }\n }\n break\n }\n case RequestStatus.SUBMITTED:\n report.timestamp.requested = ts\n break\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n break\n default:\n report.timestamp.lastViewed = ts\n break\n }\n\n return report\n }\n}\n\nexport { RequestedReportService }\nexport default RequestedReportService\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["service_exports", "__export", "RequestedReportService", "service_default", "__toCommonJS", "import_UserReports", "import_reportStoreService", "import_urlHelper", "import_logger", "ReportStoreService", "userDataStore", "userId", "reportStateData", "userConfig", "id", "index", "report", "requested", "status", "errorMessage", "viewedReports", "viewedRequestedReports", "requestedReport", "count", "viewedRequestReport", "executionId", "viewedExecutionId", "logger", "tableId", "url", "dpdPathFromQuery", "dataProductDefinitionsPath", "type", "pathname", "fullUrl", "reportUrlArr", "reportUrl", "search", "dpdPath", "ts"]
|
|
7
7
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/* eslint-disable no-param-reassign */
|
|
2
2
|
import UserDataStore from '../../../../data/reportDataStore'
|
|
3
|
-
import { RequestedReport, RequestStatus } from '../../../../types/UserReports'
|
|
3
|
+
import { RequestedReport, RequestStatus, StoredReportData } from '../../../../types/UserReports'
|
|
4
4
|
import ReportStoreService from '../../../../services/reportStoreService'
|
|
5
5
|
import { getDpdPathSuffix } from '../../../../utils/urlHelper'
|
|
6
|
+
import logger from '../../../../utils/logger'
|
|
6
7
|
|
|
7
8
|
class RequestedReportService extends ReportStoreService {
|
|
8
9
|
constructor(userDataStore: UserDataStore) {
|
|
@@ -80,6 +81,41 @@ class RequestedReportService extends ReportStoreService {
|
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Removes old stale data from requested reports
|
|
86
|
+
* - When a report is viewed it is given a lastViewed ts.
|
|
87
|
+
* - If the requested data has a lastViewed ts and
|
|
88
|
+
* - has no corresponding viewed entry
|
|
89
|
+
* - then that requested data is stale and can be removed
|
|
90
|
+
*
|
|
91
|
+
* @param {string} userId
|
|
92
|
+
* @param {StoredReportData[]} viewedReports
|
|
93
|
+
* @memberof RequestedReportService
|
|
94
|
+
*/
|
|
95
|
+
async cleanList(userId: string, viewedReports: StoredReportData[]) {
|
|
96
|
+
const userConfig = await this.getState(userId)
|
|
97
|
+
const allRequested = userConfig.requestedReports
|
|
98
|
+
const viewedRequestedReports = allRequested.filter((requestedReport) => {
|
|
99
|
+
return requestedReport.timestamp.lastViewed !== undefined
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
let count = 0
|
|
103
|
+
await Promise.all(
|
|
104
|
+
viewedRequestedReports.map(async (viewedRequestReport) => {
|
|
105
|
+
const { executionId } = viewedRequestReport
|
|
106
|
+
const viewedReport = viewedReports.find((report) => {
|
|
107
|
+
const { executionId: viewedExecutionId } = report
|
|
108
|
+
return viewedExecutionId && viewedExecutionId === executionId
|
|
109
|
+
})
|
|
110
|
+
if (!viewedReport && executionId) {
|
|
111
|
+
await this.removeReport(executionId, userId)
|
|
112
|
+
count += 1
|
|
113
|
+
}
|
|
114
|
+
}),
|
|
115
|
+
)
|
|
116
|
+
if (count > 0) logger.info(`RequestedReports: Removed ${count} stale reports from list`)
|
|
117
|
+
}
|
|
118
|
+
|
|
83
119
|
setReportUrl(report: RequestedReport) {
|
|
84
120
|
const { tableId, url, dpdPathFromQuery, dataProductDefinitionsPath, type } = report
|
|
85
121
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var $=Object.create;var g=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var
|
|
1
|
+
"use strict";var $=Object.create;var g=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},T=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of J(t))!z.call(e,i)&&i!==r&&g(e,i,{get:()=>t[i],enumerable:!(s=j(t,i))||s.enumerable});return e};var h=(e,t,r)=>(r=e!=null?$(L(e)):{},T(t||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e)),K=e=>T(g({},"__esModule",{value:!0}),e);var re={};G(re,{cancelRequest:()=>N,default:()=>te,getDefintionByType:()=>Q,getFiltersFromReqBody:()=>H,renderRequest:()=>k,request:()=>B,updateStore:()=>O});module.exports=K(re);var x=h(require("../../../../components/_async/async-filters-form/utils")),D=h(require("../../../../utils/localsHelper")),U=h(require("../../../../components/_filters/utils")),q=require("../../../../utils/reportStoreHelper"),E=h(require("../../../../utils/UserStoreItemBuilder")),f=require("../../../../types/UserReports"),w=h(require("../../../../utils/Personalisation/personalisationUtils")),C=require("../../../../components/_filters/filtersTypeEnum");const O=async({req:e,res:t,services:r,queryData:s,executionData:i,childExecutionData:o})=>{const{search:l,id:d,type:a}=e.body,{dprUser:n,definitionsPath:c,dpdPathFromQuery:u}=D.default.getValues(t);await(0,q.removeDuplicates)({storeService:r.requestedReportService,userId:n.id,id:d,search:l}),await(0,q.removeDuplicates)({storeService:r.recentlyViewedService,userId:n.id,id:d,search:l});const p=e.body,R={type:p.type,reportId:p.reportId,reportName:p.reportName,description:p.description,id:p.id,name:p.name};let m;switch(a){case f.ReportType.REPORT:m=new E.default(R,p).addExecutionData(i).addChildExecutionData(o).addFilters(s?.filterData).addSortData(s?.sortData).addDefinitionsPath(c,u).addRequestUrls(e).addQuery(s).addStatus(f.RequestStatus.SUBMITTED).addTimestamp().build();break;case f.ReportType.DASHBOARD:{m=new E.default(R,p).addExecutionData(i).addChildExecutionData(o).addFilters(s?.filterData).addDefinitionsPath(c,u).addRequestUrls(e).addQuery(s).addStatus(f.RequestStatus.SUBMITTED).addTimestamp().addMetrics(JSON.parse(e.body.sections)).build();break}default:break}m&&await r.requestedReportService.addReport(n.id,m)};async function W(e,t,r,s,i,o){return Promise.all(e.map(l=>t.requestAsyncReport(r,s,l.id,{...i&&i.query,...o&&{dataProductDefinitionsPath:o}}).then(d=>{const{executionId:a,tableId:n}=d;if(!a||!n)throw new Error("requestChildReports: No execution of tableId in response");return{executionId:a,tableId:n,variantId:l.id}})))}const X=async({req:e,res:t,token:r,dashboardService:s,reportingService:i})=>{const{definitionsPath:o,dpdPathFromQuery:l}=D.default.getValues(t),{reportId:d,id:a,type:n}=e.body;let c,u,p,R,m,y=[];n===f.ReportType.REPORT&&(m=await i.getDefinition(r,d,a,o),c=m?.variant.specification?.fields||[],u=x.default.setQueryFromFilters(e,c),{executionId:p,tableId:R}=await i.requestAsyncReport(r,d,a,{...u.query,dataProductDefinitionsPath:o}),y=m.variant.childVariants??[]),n===f.ReportType.DASHBOARD&&(m=await s.getDefinition(r,d,a,o),c=m?.filterFields||[],u=x.default.setQueryFromFilters(e,c),{executionId:p,tableId:R}=await s.requestAsyncDashboard(r,d,a,{...u.query,dataProductDefinitionsPath:o}));const S=await W(y,i,r,d,u,o);return{executionData:{executionId:p,tableId:R,...l&&{dataProductDefinitionsPath:o}},childExecutionData:S,queryData:u}},Y=async({token:e,reportId:t,definitionPath:r,services:s,definition:i})=>{const d=(await s.reportingService.getDefinitions(e,r)).find(p=>p.id===t)?.name,{name:a,description:n,sections:c,filterFields:u}=i;return{reportName:d,name:a,description:n,sections:c||[],fields:u||[]}},Z=async e=>({definition:e,reportName:e.name,name:e.variant.name,description:e.variant.description||e.description,template:e.variant.specification,fields:e?.variant?.specification?.fields||[],interactive:e?.variant?.interactive}),Q=async(e,t,r,s)=>{const{token:i,definitionsPath:o}=D.default.getValues(t),{reportId:l,id:d,variantId:a,type:n}=e.params;return await(n===f.ReportType.REPORT?s.reportingService:s.dashboardService).getDefinition(i,l,a||d,o)},ee=async(e,t,r,s,i,o)=>{const{reportId:l,id:d}=e.params;let a=await x.default.renderFilters(r,s);a.filters=w.default.setUserContextDefaults(t,a.filters);let n;return t.locals.saveDefaultsEnabled&&(n=await i.defaultFilterValuesService.get(o,l,d,C.FiltersType.REQUEST)),n&&(a=w.default.setFilterValuesFromSavedDefaults(a.filters,a.sortBy||[],n)),a.filters=U.default.setFilterValuesFromRequest(a.filters,e),{filtersData:a,defaultFilterValues:n}},B=async({req:e,res:t,services:r})=>{const{token:s}=D.default.getValues(t),i={req:e,res:t,token:s},{executionData:o,queryData:l,childExecutionData:d}=await X({...i,dashboardService:r.dashboardService,reportingService:r.reportingService});if(o.executionId&&o.tableId)await O({req:e,res:t,services:r,queryData:l,executionData:o,childExecutionData:d});else throw new Error("No execution data returned");return o},N=async({req:e,res:t,services:r})=>{const{token:s,dprUser:i,definitionsPath:o}=D.default.getValues(t),{reportId:l,id:d,executionId:a,type:n}=e.params;let c=r.reportingService;n===f.ReportType.REPORT&&(c=r.reportingService),n===f.ReportType.DASHBOARD&&(c=r.dashboardService);const u=await c.cancelAsyncRequest(s,l,d,a,o);u&&u.cancellationSucceeded&&await r.requestedReportService.updateStatus(a,i.id,f.RequestStatus.ABORTED)},k=async({req:e,res:t,services:r,next:s})=>{try{const{token:i,csrfToken:o,definitionsPath:l,dpdPathFromQuery:d,dprUser:a}=D.default.getValues(t),{reportId:n,type:c,id:u}=e.params,{definition:p}=t.locals,R=e.query.defaultsSaved,m={token:i,reportId:n,definitionPath:l,services:r};let y,S,v,M,F=[],P,A,I,b=[];if(c===f.ReportType.REPORT&&({name:y,reportName:S,description:v,fields:F,interactive:A}=await Z(p)),c===f.ReportType.DASHBOARD&&({name:y,reportName:S,description:v,sections:P,fields:F}=await Y({...m,definition:p})),F){const V=await ee(e,t,F,A||!1,r,a.id);b=V.defaultFilterValues||b,I=V.filtersData}const _={reportName:S,name:y,description:v,reportId:n,id:u,...d&&{definitionPath:l},csrfToken:o,template:M,sections:P,hasDefaults:b?.length>0,defaultsSaved:R,type:c,saveDefaultsEnabled:t.locals.saveDefaultsEnabled};return{title:`Request ${c}`,filtersDescription:`Customise your ${c} using the filters below and submit your request.`,filtersData:I,reportData:_}}catch(i){return s(i),!1}},H=e=>Object.keys(e.body).filter(t=>t.includes("filters.")).filter(t=>!!e.body[t]).map(t=>({name:t,value:e.body[t]}));var te={request:B,cancelRequest:N,renderRequest:k,getFiltersFromReqBody:H,getDefintionByType:Q};0&&(module.exports={cancelRequest,getDefintionByType,getFiltersFromReqBody,renderRequest,request,updateStore});
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/dpr/routes/journeys/request-report/filters/utils.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request, Response, NextFunction } from 'express'\n\n// Utils\nimport { defaultFilterValue } from '../../../../utils/Personalisation/types'\nimport FiltersFormUtils from '../../../../components/_async/async-filters-form/utils'\nimport LocalsHelper from '../../../../utils/localsHelper'\nimport FiltersUtils from '../../../../components/_filters/utils'\nimport { removeDuplicates } from '../../../../utils/reportStoreHelper'\nimport UserStoreItemBuilder from '../../../../utils/UserStoreItemBuilder'\n\n// Types\nimport type ReportingService from '../../../../services/reportingService'\nimport { ReportType, RequestFormData, RequestStatus } from '../../../../types/UserReports'\nimport type { ExecutionData, ChildReportExecutionData } from '../../../../types/ExecutionData'\nimport type { AsyncReportUtilsParams, RequestDataResult, RequestReportData } from '../../../../types/AsyncReportUtils'\nimport type {\n RenderFiltersReturnValue,\n SetQueryFromFiltersResult,\n} from '../../../../components/_async/async-filters-form/types'\nimport type { components } from '../../../../types/api'\nimport type { Services } from '../../../../types/Services'\nimport type DashboardService from '../../../../services/dashboardService'\nimport PersonalistionUtils from '../../../../utils/Personalisation/personalisationUtils'\nimport { FiltersType } from '../../../../components/_filters/filtersTypeEnum'\n\n/**\n * Updates the store with the request details\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {SetQueryFromFiltersResult} querySummaryData\n * @param {string} executionData\n * @return {*} {Promise<string>}\n */\nexport const updateStore = async ({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n}: {\n req: Request\n res: Response\n services: Services\n queryData?: SetQueryFromFiltersResult | undefined\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n}): Promise<void> => {\n const { search, id, type } = req.body\n const { dprUser, definitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n\n await removeDuplicates({ storeService: services.requestedReportService, userId: dprUser.id, id, search })\n await removeDuplicates({ storeService: services.recentlyViewedService, userId: dprUser.id, id, search })\n\n const requestFormData: RequestFormData = req.body\n const reportData = {\n type: requestFormData.type as ReportType,\n reportId: requestFormData.reportId,\n reportName: requestFormData.reportName,\n description: requestFormData.description,\n id: requestFormData.id,\n name: requestFormData.name,\n }\n\n let requestedReportData\n switch (type) {\n case ReportType.REPORT:\n requestedReportData = new UserStoreItemBuilder(reportData, requestFormData)\n .addExecutionData(executionData)\n .addChildExecutionData(childExecutionData)\n .addFilters(queryData?.filterData)\n .addSortData(queryData?.sortData)\n .addDefinitionsPath(definitionsPath, dpdPathFromQuery)\n .addRequestUrls(req)\n .addQuery(queryData)\n .addStatus(RequestStatus.SUBMITTED)\n .addTimestamp()\n .build()\n break\n case ReportType.DASHBOARD: {\n requestedReportData = new UserStoreItemBuilder(reportData, requestFormData)\n .addExecutionData(executionData)\n .addChildExecutionData(childExecutionData)\n .addFilters(queryData?.filterData)\n .addDefinitionsPath(definitionsPath, dpdPathFromQuery)\n .addRequestUrls(req)\n .addQuery(queryData)\n .addStatus(RequestStatus.SUBMITTED)\n .addTimestamp()\n .addMetrics(JSON.parse(req.body.sections))\n .build()\n break\n }\n default:\n break\n }\n\n if (requestedReportData) await services.requestedReportService.addReport(dprUser.id, requestedReportData)\n}\n\nasync function requestChildReports(\n childVariants: Array<components['schemas']['ChildVariantDefinition']>,\n reportingService: ReportingService,\n token: string,\n reportId: string,\n queryData?: SetQueryFromFiltersResult,\n dataProductDefinitionsPath?: string,\n): Promise<Array<ChildReportExecutionData>> {\n return Promise.all(\n childVariants.map((childVariant) =>\n reportingService\n .requestAsyncReport(token, reportId, childVariant.id, {\n ...(queryData && queryData.query),\n ...(dataProductDefinitionsPath && { dataProductDefinitionsPath }),\n })\n .then((response) => {\n const { executionId, tableId } = response\n if (!executionId || !tableId) {\n throw new Error('requestChildReports: No execution of tableId in response')\n }\n return { executionId, tableId, variantId: childVariant.id }\n }),\n ),\n )\n}\n\nconst requestProduct = async ({\n req,\n res,\n token,\n dashboardService,\n reportingService,\n}: {\n req: Request\n res: Response\n token: string\n dashboardService: DashboardService\n reportingService: ReportingService\n}): Promise<{\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n queryData?: SetQueryFromFiltersResult | undefined\n}> => {\n const { definitionsPath: dataProductDefinitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n const { reportId, id, type } = req.body\n\n let fields: components['schemas']['FieldDefinition'][]\n let queryData\n let executionId\n let tableId\n let definition\n let childVariants: components['schemas']['ChildVariantDefinition'][] = []\n\n if (type === ReportType.REPORT) {\n definition = await reportingService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n fields = definition?.variant.specification?.fields || []\n queryData = FiltersFormUtils.setQueryFromFilters(req, fields)\n ;({ executionId, tableId } = await reportingService.requestAsyncReport(token, reportId, id, {\n ...queryData.query,\n dataProductDefinitionsPath,\n }))\n childVariants = definition.variant.childVariants ?? []\n }\n\n if (type === ReportType.DASHBOARD) {\n definition = await dashboardService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n fields = definition?.filterFields || []\n queryData = FiltersFormUtils.setQueryFromFilters(req, fields)\n ;({ executionId, tableId } = await dashboardService.requestAsyncDashboard(token, reportId, id, {\n ...queryData.query,\n dataProductDefinitionsPath,\n }))\n }\n\n const childExecutionData = await requestChildReports(\n childVariants,\n reportingService,\n token,\n reportId,\n queryData,\n dataProductDefinitionsPath,\n )\n\n const executionData = {\n executionId,\n tableId,\n ...(dpdPathFromQuery && { dataProductDefinitionsPath }),\n }\n\n return {\n executionData,\n childExecutionData,\n queryData,\n }\n}\n\nconst renderDashboardRequestData = async ({\n token,\n reportId,\n definitionPath,\n services,\n definition,\n}: {\n token: string\n reportId: string\n definitionPath: string\n services: Services\n definition: components['schemas']['DashboardDefinition']\n}) => {\n const productDefinitions = await services.reportingService.getDefinitions(token, definitionPath)\n const productDefinition = productDefinitions.find(\n (def: components['schemas']['ReportDefinitionSummary']) => def.id === reportId,\n )\n const reportName = productDefinition?.name\n const { name, description, sections, filterFields: fields } = definition\n\n return {\n reportName,\n name,\n description,\n sections: sections || [],\n fields: fields || [],\n }\n}\n\nconst renderReportRequestData = async (definition: components['schemas']['SingleVariantReportDefinition']) => {\n return {\n definition,\n reportName: definition.name,\n name: definition.variant.name,\n description: definition.variant.description || definition.description,\n template: definition.variant.specification,\n fields: definition?.variant?.specification?.fields || [],\n interactive: definition?.variant?.interactive,\n }\n}\n\nexport const getDefintionByType = async (req: Request, res: Response, _next: NextFunction, services: Services) => {\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n const { reportId, id, variantId, type } = req.params\n\n const service = type === ReportType.REPORT ? services.reportingService : services.dashboardService\n const definition = await service.getDefinition(token, reportId, variantId || id, definitionsPath)\n\n return definition\n}\n\nconst getFilterData = async (\n req: Request,\n res: Response,\n fields: components['schemas']['FieldDefinition'][],\n interactive: boolean,\n services: Services,\n userId: string,\n) => {\n const { reportId, id } = req.params\n\n // 1. Get filters from definition with default values\n let filtersData = <RenderFiltersReturnValue>await FiltersFormUtils.renderFilters(fields, interactive)\n\n // 2. Update filter values with user context values. eg. establishmnent code\n filtersData.filters = PersonalistionUtils.setUserContextDefaults(res, filtersData.filters)\n\n // 3. Update filter values with saved defaults\n let defaultFilterValues\n if (res.locals['saveDefaultsEnabled']) {\n defaultFilterValues = await services.defaultFilterValuesService.get(userId, reportId, id, FiltersType.REQUEST)\n }\n if (defaultFilterValues) {\n filtersData = PersonalistionUtils.setFilterValuesFromSavedDefaults(\n filtersData.filters,\n filtersData.sortBy || [],\n defaultFilterValues,\n )\n }\n\n // 4. Overwrite filter values with query param values\n filtersData.filters = FiltersUtils.setFilterValuesFromRequest(filtersData.filters, req)\n\n return { filtersData, defaultFilterValues }\n}\n\n/**\n * Sends the request for the async report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const request = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token } = LocalsHelper.getValues(res)\n const requestArgs = { req, res, token }\n\n const { executionData, queryData, childExecutionData } = await requestProduct({\n ...requestArgs,\n dashboardService: services.dashboardService,\n reportingService: services.reportingService,\n })\n\n if (executionData) {\n await updateStore({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n })\n }\n\n return executionData\n}\n\nexport const cancelRequest = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token, dprUser, definitionsPath } = LocalsHelper.getValues(res)\n const { reportId, id, executionId, type } = req.params\n\n let service: ReportingService | DashboardService = services.reportingService\n if (type === ReportType.REPORT) service = services.reportingService\n if (type === ReportType.DASHBOARD) service = services.dashboardService\n\n const response = await service.cancelAsyncRequest(token, reportId, id, executionId, definitionsPath)\n\n if (response && response['cancellationSucceeded']) {\n await services.requestedReportService.updateStatus(executionId, dprUser.id, RequestStatus.ABORTED)\n }\n}\n\n/**\n * Returns the data required for rendering the async filters component\n *\n * @param {AsyncReportUtilsParams} { req, res, dataSources }\n * @return {*}\n */\nexport const renderRequest = async ({\n req,\n res,\n services,\n next,\n}: {\n req: Request\n res: Response\n next: NextFunction\n services: Services\n}): Promise<RequestDataResult | boolean> => {\n try {\n const { token, csrfToken, definitionsPath: definitionPath, dpdPathFromQuery, dprUser } = LocalsHelper.getValues(res)\n const { reportId, type, id } = req.params\n const { definition } = res.locals\n const defaultsSaved = <string>req.query['defaultsSaved']\n\n const definitionApiArgs = { token, reportId, definitionPath, services }\n\n let name\n let reportName\n let description\n let template\n let fields: components['schemas']['FieldDefinition'][] = []\n let sections\n let interactive\n let filtersData\n let defaultFilterValues: defaultFilterValue[] = []\n\n if (type === ReportType.REPORT) {\n ;({ name, reportName, description, fields, interactive } = await renderReportRequestData(definition))\n }\n\n if (type === ReportType.DASHBOARD) {\n ;({ name, reportName, description, sections, fields } = await renderDashboardRequestData({\n ...definitionApiArgs,\n definition,\n }))\n }\n\n if (fields) {\n const filterData = await getFilterData(req, res, fields, interactive || false, services, dprUser.id)\n defaultFilterValues = filterData.defaultFilterValues || defaultFilterValues\n filtersData = filterData.filtersData\n }\n\n const reportData: RequestReportData = {\n reportName,\n name,\n description,\n reportId,\n id,\n ...(dpdPathFromQuery && { definitionPath }),\n csrfToken,\n template,\n sections,\n hasDefaults: defaultFilterValues?.length > 0,\n defaultsSaved,\n type: type as ReportType,\n saveDefaultsEnabled: res.locals['saveDefaultsEnabled'],\n }\n\n return {\n title: `Request ${type}`,\n filtersDescription: `Customise your ${type} using the filters below and submit your request.`,\n filtersData,\n reportData,\n }\n } catch (error) {\n next(error)\n return false\n }\n}\n\nexport const getFiltersFromReqBody = (req: Request) => {\n return Object.keys(req.body)\n .filter((attr) => attr.includes('filters.'))\n .filter((attr) => !!req.body[attr])\n .map((attr) => {\n return { name: attr, value: req.body[attr] }\n })\n}\n\nexport default {\n request,\n cancelRequest,\n renderRequest,\n getFiltersFromReqBody,\n getDefintionByType,\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request, Response, NextFunction } from 'express'\n\n// Utils\nimport { defaultFilterValue } from '../../../../utils/Personalisation/types'\nimport FiltersFormUtils from '../../../../components/_async/async-filters-form/utils'\nimport LocalsHelper from '../../../../utils/localsHelper'\nimport FiltersUtils from '../../../../components/_filters/utils'\nimport { removeDuplicates } from '../../../../utils/reportStoreHelper'\nimport UserStoreItemBuilder from '../../../../utils/UserStoreItemBuilder'\n\n// Types\nimport type ReportingService from '../../../../services/reportingService'\nimport { ReportType, RequestFormData, RequestStatus } from '../../../../types/UserReports'\nimport type { ExecutionData, ChildReportExecutionData } from '../../../../types/ExecutionData'\nimport type { AsyncReportUtilsParams, RequestDataResult, RequestReportData } from '../../../../types/AsyncReportUtils'\nimport type {\n RenderFiltersReturnValue,\n SetQueryFromFiltersResult,\n} from '../../../../components/_async/async-filters-form/types'\nimport type { components } from '../../../../types/api'\nimport type { Services } from '../../../../types/Services'\nimport type DashboardService from '../../../../services/dashboardService'\nimport PersonalistionUtils from '../../../../utils/Personalisation/personalisationUtils'\nimport { FiltersType } from '../../../../components/_filters/filtersTypeEnum'\n\n/**\n * Updates the store with the request details\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {SetQueryFromFiltersResult} querySummaryData\n * @param {string} executionData\n * @return {*} {Promise<string>}\n */\nexport const updateStore = async ({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n}: {\n req: Request\n res: Response\n services: Services\n queryData?: SetQueryFromFiltersResult | undefined\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n}): Promise<void> => {\n const { search, id, type } = req.body\n const { dprUser, definitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n\n await removeDuplicates({ storeService: services.requestedReportService, userId: dprUser.id, id, search })\n await removeDuplicates({ storeService: services.recentlyViewedService, userId: dprUser.id, id, search })\n\n const requestFormData: RequestFormData = req.body\n const reportData = {\n type: requestFormData.type as ReportType,\n reportId: requestFormData.reportId,\n reportName: requestFormData.reportName,\n description: requestFormData.description,\n id: requestFormData.id,\n name: requestFormData.name,\n }\n\n let requestedReportData\n switch (type) {\n case ReportType.REPORT:\n requestedReportData = new UserStoreItemBuilder(reportData, requestFormData)\n .addExecutionData(executionData)\n .addChildExecutionData(childExecutionData)\n .addFilters(queryData?.filterData)\n .addSortData(queryData?.sortData)\n .addDefinitionsPath(definitionsPath, dpdPathFromQuery)\n .addRequestUrls(req)\n .addQuery(queryData)\n .addStatus(RequestStatus.SUBMITTED)\n .addTimestamp()\n .build()\n break\n case ReportType.DASHBOARD: {\n requestedReportData = new UserStoreItemBuilder(reportData, requestFormData)\n .addExecutionData(executionData)\n .addChildExecutionData(childExecutionData)\n .addFilters(queryData?.filterData)\n .addDefinitionsPath(definitionsPath, dpdPathFromQuery)\n .addRequestUrls(req)\n .addQuery(queryData)\n .addStatus(RequestStatus.SUBMITTED)\n .addTimestamp()\n .addMetrics(JSON.parse(req.body.sections))\n .build()\n break\n }\n default:\n break\n }\n\n if (requestedReportData) await services.requestedReportService.addReport(dprUser.id, requestedReportData)\n}\n\nasync function requestChildReports(\n childVariants: Array<components['schemas']['ChildVariantDefinition']>,\n reportingService: ReportingService,\n token: string,\n reportId: string,\n queryData?: SetQueryFromFiltersResult,\n dataProductDefinitionsPath?: string,\n): Promise<Array<ChildReportExecutionData>> {\n return Promise.all(\n childVariants.map((childVariant) =>\n reportingService\n .requestAsyncReport(token, reportId, childVariant.id, {\n ...(queryData && queryData.query),\n ...(dataProductDefinitionsPath && { dataProductDefinitionsPath }),\n })\n .then((response) => {\n const { executionId, tableId } = response\n if (!executionId || !tableId) {\n throw new Error('requestChildReports: No execution of tableId in response')\n }\n return { executionId, tableId, variantId: childVariant.id }\n }),\n ),\n )\n}\n\nconst requestProduct = async ({\n req,\n res,\n token,\n dashboardService,\n reportingService,\n}: {\n req: Request\n res: Response\n token: string\n dashboardService: DashboardService\n reportingService: ReportingService\n}): Promise<{\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n queryData?: SetQueryFromFiltersResult | undefined\n}> => {\n const { definitionsPath: dataProductDefinitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n const { reportId, id, type } = req.body\n\n let fields: components['schemas']['FieldDefinition'][]\n let queryData\n let executionId\n let tableId\n let definition\n let childVariants: components['schemas']['ChildVariantDefinition'][] = []\n\n if (type === ReportType.REPORT) {\n definition = await reportingService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n fields = definition?.variant.specification?.fields || []\n queryData = FiltersFormUtils.setQueryFromFilters(req, fields)\n ;({ executionId, tableId } = await reportingService.requestAsyncReport(token, reportId, id, {\n ...queryData.query,\n dataProductDefinitionsPath,\n }))\n childVariants = definition.variant.childVariants ?? []\n }\n\n if (type === ReportType.DASHBOARD) {\n definition = await dashboardService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n fields = definition?.filterFields || []\n queryData = FiltersFormUtils.setQueryFromFilters(req, fields)\n ;({ executionId, tableId } = await dashboardService.requestAsyncDashboard(token, reportId, id, {\n ...queryData.query,\n dataProductDefinitionsPath,\n }))\n }\n\n const childExecutionData = await requestChildReports(\n childVariants,\n reportingService,\n token,\n reportId,\n queryData,\n dataProductDefinitionsPath,\n )\n\n const executionData = {\n executionId,\n tableId,\n ...(dpdPathFromQuery && { dataProductDefinitionsPath }),\n }\n\n return {\n executionData,\n childExecutionData,\n queryData,\n }\n}\n\nconst renderDashboardRequestData = async ({\n token,\n reportId,\n definitionPath,\n services,\n definition,\n}: {\n token: string\n reportId: string\n definitionPath: string\n services: Services\n definition: components['schemas']['DashboardDefinition']\n}) => {\n const productDefinitions = await services.reportingService.getDefinitions(token, definitionPath)\n const productDefinition = productDefinitions.find(\n (def: components['schemas']['ReportDefinitionSummary']) => def.id === reportId,\n )\n const reportName = productDefinition?.name\n const { name, description, sections, filterFields: fields } = definition\n\n return {\n reportName,\n name,\n description,\n sections: sections || [],\n fields: fields || [],\n }\n}\n\nconst renderReportRequestData = async (definition: components['schemas']['SingleVariantReportDefinition']) => {\n return {\n definition,\n reportName: definition.name,\n name: definition.variant.name,\n description: definition.variant.description || definition.description,\n template: definition.variant.specification,\n fields: definition?.variant?.specification?.fields || [],\n interactive: definition?.variant?.interactive,\n }\n}\n\nexport const getDefintionByType = async (req: Request, res: Response, _next: NextFunction, services: Services) => {\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n const { reportId, id, variantId, type } = req.params\n\n const service = type === ReportType.REPORT ? services.reportingService : services.dashboardService\n const definition = await service.getDefinition(token, reportId, variantId || id, definitionsPath)\n\n return definition\n}\n\nconst getFilterData = async (\n req: Request,\n res: Response,\n fields: components['schemas']['FieldDefinition'][],\n interactive: boolean,\n services: Services,\n userId: string,\n) => {\n const { reportId, id } = req.params\n\n // 1. Get filters from definition with default values\n let filtersData = <RenderFiltersReturnValue>await FiltersFormUtils.renderFilters(fields, interactive)\n\n // 2. Update filter values with user context values. eg. establishmnent code\n filtersData.filters = PersonalistionUtils.setUserContextDefaults(res, filtersData.filters)\n\n // 3. Update filter values with saved defaults\n let defaultFilterValues\n if (res.locals['saveDefaultsEnabled']) {\n defaultFilterValues = await services.defaultFilterValuesService.get(userId, reportId, id, FiltersType.REQUEST)\n }\n if (defaultFilterValues) {\n filtersData = PersonalistionUtils.setFilterValuesFromSavedDefaults(\n filtersData.filters,\n filtersData.sortBy || [],\n defaultFilterValues,\n )\n }\n\n // 4. Overwrite filter values with query param values\n filtersData.filters = FiltersUtils.setFilterValuesFromRequest(filtersData.filters, req)\n\n return { filtersData, defaultFilterValues }\n}\n\n/**\n * Sends the request for the async report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const request = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token } = LocalsHelper.getValues(res)\n const requestArgs = { req, res, token }\n\n const { executionData, queryData, childExecutionData } = await requestProduct({\n ...requestArgs,\n dashboardService: services.dashboardService,\n reportingService: services.reportingService,\n })\n\n if (executionData.executionId && executionData.tableId) {\n await updateStore({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n })\n } else {\n throw new Error('No execution data returned')\n }\n\n return executionData\n}\n\nexport const cancelRequest = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token, dprUser, definitionsPath } = LocalsHelper.getValues(res)\n const { reportId, id, executionId, type } = req.params\n\n let service: ReportingService | DashboardService = services.reportingService\n if (type === ReportType.REPORT) service = services.reportingService\n if (type === ReportType.DASHBOARD) service = services.dashboardService\n\n const response = await service.cancelAsyncRequest(token, reportId, id, executionId, definitionsPath)\n\n if (response && response['cancellationSucceeded']) {\n await services.requestedReportService.updateStatus(executionId, dprUser.id, RequestStatus.ABORTED)\n }\n}\n\n/**\n * Returns the data required for rendering the async filters component\n *\n * @param {AsyncReportUtilsParams} { req, res, dataSources }\n * @return {*}\n */\nexport const renderRequest = async ({\n req,\n res,\n services,\n next,\n}: {\n req: Request\n res: Response\n next: NextFunction\n services: Services\n}): Promise<RequestDataResult | boolean> => {\n try {\n const { token, csrfToken, definitionsPath: definitionPath, dpdPathFromQuery, dprUser } = LocalsHelper.getValues(res)\n const { reportId, type, id } = req.params\n const { definition } = res.locals\n const defaultsSaved = <string>req.query['defaultsSaved']\n\n const definitionApiArgs = { token, reportId, definitionPath, services }\n\n let name\n let reportName\n let description\n let template\n let fields: components['schemas']['FieldDefinition'][] = []\n let sections\n let interactive\n let filtersData\n let defaultFilterValues: defaultFilterValue[] = []\n\n if (type === ReportType.REPORT) {\n ;({ name, reportName, description, fields, interactive } = await renderReportRequestData(definition))\n }\n\n if (type === ReportType.DASHBOARD) {\n ;({ name, reportName, description, sections, fields } = await renderDashboardRequestData({\n ...definitionApiArgs,\n definition,\n }))\n }\n\n if (fields) {\n const filterData = await getFilterData(req, res, fields, interactive || false, services, dprUser.id)\n defaultFilterValues = filterData.defaultFilterValues || defaultFilterValues\n filtersData = filterData.filtersData\n }\n\n const reportData: RequestReportData = {\n reportName,\n name,\n description,\n reportId,\n id,\n ...(dpdPathFromQuery && { definitionPath }),\n csrfToken,\n template,\n sections,\n hasDefaults: defaultFilterValues?.length > 0,\n defaultsSaved,\n type: type as ReportType,\n saveDefaultsEnabled: res.locals['saveDefaultsEnabled'],\n }\n\n return {\n title: `Request ${type}`,\n filtersDescription: `Customise your ${type} using the filters below and submit your request.`,\n filtersData,\n reportData,\n }\n } catch (error) {\n next(error)\n return false\n }\n}\n\nexport const getFiltersFromReqBody = (req: Request) => {\n return Object.keys(req.body)\n .filter((attr) => attr.includes('filters.'))\n .filter((attr) => !!req.body[attr])\n .map((attr) => {\n return { name: attr, value: req.body[attr] }\n })\n}\n\nexport default {\n request,\n cancelRequest,\n renderRequest,\n getFiltersFromReqBody,\n getDefintionByType,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["utils_exports", "__export", "cancelRequest", "utils_default", "getDefintionByType", "getFiltersFromReqBody", "renderRequest", "request", "updateStore", "__toCommonJS", "import_utils", "import_localsHelper", "import_reportStoreHelper", "import_UserStoreItemBuilder", "import_UserReports", "import_personalisationUtils", "import_filtersTypeEnum", "req", "res", "services", "queryData", "executionData", "childExecutionData", "search", "id", "type", "dprUser", "definitionsPath", "dpdPathFromQuery", "LocalsHelper", "requestFormData", "reportData", "requestedReportData", "UserStoreItemBuilder", "requestChildReports", "childVariants", "reportingService", "token", "reportId", "dataProductDefinitionsPath", "childVariant", "response", "executionId", "tableId", "requestProduct", "dashboardService", "fields", "definition", "FiltersFormUtils", "renderDashboardRequestData", "definitionPath", "reportName", "def", "name", "description", "sections", "renderReportRequestData", "_next", "variantId", "getFilterData", "interactive", "userId", "filtersData", "PersonalistionUtils", "defaultFilterValues", "FiltersUtils", "requestArgs", "service", "next", "csrfToken", "defaultsSaved", "definitionApiArgs", "template", "filterData", "error", "attr"]
|
|
7
7
|
}
|
|
@@ -301,7 +301,7 @@ export const request = async ({ req, res, services }: AsyncReportUtilsParams) =>
|
|
|
301
301
|
reportingService: services.reportingService,
|
|
302
302
|
})
|
|
303
303
|
|
|
304
|
-
if (executionData) {
|
|
304
|
+
if (executionData.executionId && executionData.tableId) {
|
|
305
305
|
await updateStore({
|
|
306
306
|
req,
|
|
307
307
|
res,
|
|
@@ -310,6 +310,8 @@ export const request = async ({ req, res, services }: AsyncReportUtilsParams) =>
|
|
|
310
310
|
executionData,
|
|
311
311
|
childExecutionData,
|
|
312
312
|
})
|
|
313
|
+
} else {
|
|
314
|
+
throw new Error('No execution data returned')
|
|
313
315
|
}
|
|
314
316
|
|
|
315
317
|
return executionData
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var n=require("../../../../../cypress-tests/cypressUtils");context("Requesting a report",()=>{const o="/embedded/platform/",r=()=>{cy.task("stubReportsSubmittedStatus"),cy.findByRole("strong").contains("SUBMITTED"),cy.task("stubReportsPickedStatus"),cy.findByRole("strong").contains("PICKED"),cy.task("stubReportsStartedStatus"),cy.findByRole("strong").contains("STARTED"),cy.task("stubReportsFinishedStatus")};describe("Successful request",()=>{beforeEach(()=>{(0,n.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.visit(o)}),it("should succesfully request and load a report",()=>{cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(i,l)=>!!l.textContent?.includes("Successful Report")&&!!l.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.url().should("have.string","/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters"),cy.location().should(i=>{expect(i.search).to.contain("filters.field1=value1.2"),expect(i.search).to.contain("filters.field3.start=2003-02-0"),expect(i.search).to.contain("filters.field3.end=2006-05-04"),expect(i.search).to.contain("filters.field7=2005-02-01"),expect(i.search).to.contain("filters.field8=value8.2&filters.field8=value8.3"),expect(i.search).to.contain("sortColumn=field1&sortedAsc=false")}),cy.findByRole("button",{name:"Request report"}).click(),cy.url().should("match",/.*\/embedded\/platform\/dpr\/request-report\/report\/request-examples\/request-example-success\/(.*)\/status/i),r(),cy.url().should("match",/.*\/embedded\/platform\/dpr\/view-report\/async\/report\/request-examples\/request-example-success\/(.*)\/report/i),cy.location().should(i=>{expect(i.search).to.contain("columns=field1&columns=field2&columns=field3&columns=field6&columns=field7")})}),it("should redirect the old request url to the new one",()=>{cy.visit("/embedded/platform/async/report/request-examples/request-example-success/request"),cy.url().should("have.string","/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters"),cy.location().should(l=>{expect(l.search).to.contain("filters.field1=value1.2"),expect(l.search).to.contain("filters.field3.start=2003-02-0"),expect(l.search).to.contain("filters.field3.end=2006-05-04"),expect(l.search).to.contain("filters.field7=2005-02-01"),expect(l.search).to.contain("filters.field8=value8.2&filters.field8=value8.3"),expect(l.search).to.contain("sortColumn=field1&sortedAsc=false")})})}),describe("Failed request",()=>{beforeEach(()=>{(0,n.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.visit(o)});const i=()=>{cy.task("stubReportsFailedStatus"),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(e,t)=>!!t.textContent?.includes("Successful Report")&&!!t.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("group",{name:/Field 1/}).findByRole("radio",{checked:!0}).invoke("val").as("field1"),cy.findByRole("combobox",{name:/Field 2/}).invoke("val").as("field2"),cy.findByRole("group",{name:/Field 3/}).within(()=>{cy.findByRole("textbox",{name:/From/}).invoke("val").as("field3From"),cy.findByRole("textbox",{name:/To/}).invoke("val").as("field3To")}),cy.findByRole("combobox",{name:/Field 4/}).invoke("val").as("field4"),cy.findByRole("combobox",{name:/Field 5/}).invoke("val").as("field5"),cy.findByRole("textbox",{name:/Field 6/}).invoke("val").as("field6"),cy.findByRole("textbox",{name:/Field 7/}).invoke("val").as("field7"),cy.findByRole("group",{name:/Field 8/}).within(()=>{cy.findAllByRole("checkbox").each((e,t)=>{cy.wrap(e).invoke("val").as(`field8-${t}`)})}),cy.findByRole("button",{name:"Request report"}).click(),cy.findByRole("button",{name:"Retry"}).click(),cy.findByRole("group",{name:/Field 1/}).findByRole("radio",{checked:!0}).invoke("val").then(e=>{cy.get("@field1").should("equal",e)}),cy.findByRole("combobox",{name:/Field 2/}).invoke("val").then(e=>{cy.get("@field2").should("equal",e)}),cy.findByRole("group",{name:/Field 3/}).within(()=>{cy.findByRole("textbox",{name:/From/}).invoke("val").then(e=>{cy.get("@field3From").should("equal",e)}),cy.findByRole("textbox",{name:/To/}).invoke("val").then(e=>{cy.get("@field3To").should("equal",e)})}),cy.findByRole("combobox",{name:/Field 4/}).invoke("val").then(e=>{cy.get("@field4").should("equal",e)}),cy.findByRole("combobox",{name:/Field 5/}).invoke("val").then(e=>{cy.get("@field5").should("equal",e)}),cy.findByRole("textbox",{name:/Field 6/}).invoke("val").then(e=>{cy.get("@field6").should("equal",e)}),cy.findByRole("textbox",{name:/Field 7/}).invoke("val").then(e=>{cy.get("@field7").should("equal",e)}),cy.findByRole("group",{name:/Field 8/}).within(()=>{cy.findAllByRole("checkbox").each((e,t)=>{cy.wrap(e).invoke("val").then(c=>{cy.get(`@field8-${t}`).should("equal",c)})})})},l=()=>{cy.visit(o),cy.findByRole("tab",{name:/Requested/}).click(),cy.findByLabelText(/Requested/i).within(()=>{cy.findByRole("row",{name:(e,t)=>!!t.textContent?.includes("Successful Report")}).within(()=>{cy.findByRole("link",{name:"Retry"}).should("be.visible"),cy.findByRole("link",{name:"Remove"}).should("be.visible"),cy.findByRole("cell",{name:"FAILED"}).should("be.visible")})}),cy.findByRole("link",{name:"Retry"}).click(),cy.findByText(/Your report has failed to generate/).should("be.visible"),cy.findAllByText(/Successful Report/).should("be.visible"),cy.visit(o),cy.findByRole("tab",{name:/Requested/}).click(),cy.findByLabelText(/Requested/i).within(()=>{cy.findByRole("row",{name:(e,t)=>!!t.textContent?.includes("Successful Report")}).within(()=>{cy.findByRole("link",{name:"Retry"}).click()})}),cy.findByText(/Your report has failed to generate/).should("be.visible"),cy.findAllByText(/Successful Report/).should("be.visible")},s=()=>{cy.url().then(e=>{const t=e.split("/"),c=t[t.length-2],a=`/embedded/platform/async/report/request-examples/request-example-success/request/${c}`;cy.visit(a),cy.url().should("have.string",`/embedded/platform/dpr/request-report/report/request-examples/request-example-success/${c}/status`)})},d=()=>{cy.visit(o),cy.findByRole("tab",{name:/Requested/}).click(),cy.findByLabelText(/Requested/i).within(()=>{cy.findByRole("row",{name:(e,t)=>!!t.textContent?.includes("Successful Report")}).within(()=>{cy.findByRole("link",{name:"Remove"}).click()})}),cy.findByLabelText(/Requested/i).within(()=>{cy.findByRole("row",{name:(e,t)=>!!t.textContent?.includes("Successful Report")}).should("not.exist")})};it("should test out filters, retry/remove and old status url redirects",()=>{i(),l(),s(),d()})}),describe("Aborted request",()=>{const i="/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters?filters.field1=value1.2&filters.field3.start=2003-02-01&filters.field3.end=2006-05-04&filters.field7=2005-02-01&filters.field8=value8.2&filters.field8=value8.3&sortColumn=field1&sortedAsc=false";beforeEach(()=>{(0,n.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("stubCancelAsyncRequest"),cy.visit(o)}),it("should be able to abort the request",()=>{cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(l,s)=>!!s.textContent?.includes("Successful Report")&&!!s.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.url().should("have.string","/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters"),cy.findByRole("button",{name:"Request report"}).click(),cy.url().should("match",/.*\/embedded\/platform\/dpr\/request-report\/report\/request-examples\/request-example-success\/(.*)\/status/i),cy.findByRole("button",{name:/Cancel/}).click(),cy.task("stubReportsAbortedStatus"),cy.findByRole("strong").contains("ABORTED"),cy.findByRole("button",{name:/Return to request page/}).click(),cy.url().should("have.string","/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters"),cy.visit(o),cy.findByRole("tab",{name:/Requested/}).click(),cy.findByLabelText(/Requested/i).within(()=>{cy.findByRole("row",{name:(l,s)=>!!s.textContent?.includes("Successful Report")}).within(()=>{cy.findByRole("link",{name:"Retry"}).should("be.visible"),cy.findByRole("link",{name:"Remove"}).should("be.visible"),cy.findByRole("cell",{name:"ABORTED"}).should("be.visible")})}),cy.findByLabelText(/Requested/i).within(()=>{cy.findByRole("row",{name:(l,s)=>!!s.textContent?.includes("Successful Report")}).within(()=>{cy.findByRole("link",{name:"Retry"}).click()})}),cy.url().should("have.string",i),cy.visit(o),cy.findByRole("tab",{name:/Requested/}).click(),cy.findByLabelText(/Requested/i).within(()=>{cy.findByRole("row",{name:(l,s)=>!!s.textContent?.includes("Successful Report")}).within(()=>{cy.findByRole("link",{name:"Remove"}).click()})}),cy.findByLabelText(/Requested/i).within(()=>{cy.findByRole("row",{name:(l,s)=>!!s.textContent?.includes("Successful Report")}).should("not.exist")})})}),describe("Exceution failed",()=>{beforeEach(()=>{(0,n.executeReportStubs)(),cy.visit(o)}),it("should error when execution data is incorrect",()=>{(0,n.requestReportByNameAndDescription)({name:"Execution data error",description:"This will return an error"}),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible"),cy.visit(o),cy.findByRole("tab",{name:/Requested/}).click(),cy.findByLabelText(/Requested.*/i).within(()=>{cy.findAllByRole("paragraph").contains(/You have 0 requested reports/).should("be.visible")})})})});
|
|
2
2
|
//# sourceMappingURL=tests.cy.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/dpr/routes/journeys/request-report/tests.cy.ts"],
|
|
4
|
-
"sourcesContent": ["import { executeReportStubs } from '../../../../../cypress-tests/cypressUtils'\n\ncontext('Requesting a report', () => {\n const path = '/embedded/platform/'\n\n const checkStatuses = () => {\n cy.task('stubReportsSubmittedStatus')\n cy.findByRole('strong').contains('SUBMITTED')\n cy.task('stubReportsPickedStatus')\n cy.findByRole('strong').contains('PICKED')\n cy.task('stubReportsStartedStatus')\n cy.findByRole('strong').contains('STARTED')\n cy.task('stubReportsFinishedStatus')\n }\n\n describe('Successful request', () => {\n beforeEach(() => {\n executeReportStubs()\n cy.task('stubDefinitionRequestExamplesSuccess')\n cy.task('stubRequestSuccessResult20')\n cy.visit(path)\n })\n\n it('should succesfully request and load a report', () => {\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return (\n Boolean(element.textContent?.includes('Successful Report')) &&\n Boolean(element.textContent?.includes('this will succeed'))\n )\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request report' }).click()\n })\n })\n cy.url().should(\n 'have.string',\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters',\n )\n cy.location().should((location) => {\n expect(location.search).to.contain(`filters.field1=value1.2`)\n expect(location.search).to.contain(`filters.field3.start=2003-02-0`)\n expect(location.search).to.contain(`filters.field3.end=2006-05-04`)\n expect(location.search).to.contain(`filters.field7=2005-02-01`)\n expect(location.search).to.contain(`filters.field8=value8.2&filters.field8=value8.3`)\n expect(location.search).to.contain(`sortColumn=field1&sortedAsc=false`)\n })\n\n cy.findByRole('button', { name: 'Request report' }).click()\n cy.url().should(\n 'match',\n /.*\\/embedded\\/platform\\/dpr\\/request-report\\/report\\/request-examples\\/request-example-success\\/(.*)\\/status/i,\n )\n checkStatuses()\n cy.url().should(\n 'match',\n /.*\\/embedded\\/platform\\/dpr\\/view-report\\/async\\/report\\/request-examples\\/request-example-success\\/(.*)\\/report/i,\n )\n cy.location().should((location) => {\n expect(location.search).to.contain(`columns=field1&columns=field2&columns=field3&columns=field6&columns=field7`)\n })\n })\n\n it('should redirect the old request url to the new one', () => {\n const oldPath = '/embedded/platform/async/report/request-examples/request-example-success/request'\n cy.visit(oldPath)\n cy.url().should(\n 'have.string',\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters',\n )\n cy.location().should((location) => {\n expect(location.search).to.contain(`filters.field1=value1.2`)\n expect(location.search).to.contain(`filters.field3.start=2003-02-0`)\n expect(location.search).to.contain(`filters.field3.end=2006-05-04`)\n expect(location.search).to.contain(`filters.field7=2005-02-01`)\n expect(location.search).to.contain(`filters.field8=value8.2&filters.field8=value8.3`)\n expect(location.search).to.contain(`sortColumn=field1&sortedAsc=false`)\n })\n })\n })\n\n describe('Failed request', () => {\n beforeEach(() => {\n executeReportStubs()\n cy.task('stubDefinitionRequestExamplesSuccess')\n cy.task('stubRequestSuccessResult20')\n cy.visit(path)\n })\n\n const testFilterPersistence = () => {\n cy.task('stubReportsFailedStatus')\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return (\n Boolean(element.textContent?.includes('Successful Report')) &&\n Boolean(element.textContent?.includes('this will succeed'))\n )\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request report' }).click()\n })\n })\n cy.findByRole('group', { name: /Field 1/ })\n .findByRole('radio', { checked: true })\n .invoke('val')\n .as('field1')\n cy.findByRole('combobox', { name: /Field 2/ })\n .invoke('val')\n .as('field2')\n cy.findByRole('group', { name: /Field 3/ }).within(() => {\n cy.findByRole('textbox', { name: /From/ }).invoke('val').as('field3From')\n cy.findByRole('textbox', { name: /To/ }).invoke('val').as('field3To')\n })\n cy.findByRole('combobox', { name: /Field 4/ })\n .invoke('val')\n .as('field4')\n cy.findByRole('combobox', { name: /Field 5/ })\n .invoke('val')\n .as('field5')\n cy.findByRole('textbox', { name: /Field 6/ })\n .invoke('val')\n .as('field6')\n cy.findByRole('textbox', { name: /Field 7/ })\n .invoke('val')\n .as('field7')\n cy.findByRole('group', { name: /Field 8/ }).within(() => {\n cy.findAllByRole('checkbox').each((el, idx) => {\n cy.wrap(el).invoke('val').as(`field8-${idx}`)\n })\n })\n cy.findByRole('button', { name: 'Request report' }).click()\n cy.findByRole('button', { name: 'Retry' }).click()\n\n cy.findByRole('group', { name: /Field 1/ })\n .findByRole('radio', { checked: true })\n .invoke('val')\n .then((val) => {\n cy.get('@field1').should('equal', val)\n })\n cy.findByRole('combobox', { name: /Field 2/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field2').should('equal', val)\n })\n cy.findByRole('group', { name: /Field 3/ }).within(() => {\n cy.findByRole('textbox', { name: /From/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field3From').should('equal', val)\n })\n cy.findByRole('textbox', { name: /To/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field3To').should('equal', val)\n })\n })\n cy.findByRole('combobox', { name: /Field 4/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field4').should('equal', val)\n })\n cy.findByRole('combobox', { name: /Field 5/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field5').should('equal', val)\n })\n cy.findByRole('textbox', { name: /Field 6/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field6').should('equal', val)\n })\n cy.findByRole('textbox', { name: /Field 7/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field7').should('equal', val)\n })\n cy.findByRole('group', { name: /Field 8/ }).within(() => {\n cy.findAllByRole('checkbox').each((el, idx) => {\n cy.wrap(el)\n .invoke('val')\n .then((val) => {\n cy.get(`@field8-${idx}`).should('equal', val)\n })\n })\n })\n }\n\n const testCorrectLinksRetryFailure = () => {\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Retry' }).should('be.visible')\n cy.findByRole('link', { name: 'Remove' }).should('be.visible')\n cy.findByRole('cell', { name: 'FAILED' }).should('be.visible')\n })\n })\n cy.findByRole('link', { name: 'Retry' }).click()\n cy.findByText(/Your report has failed to generate/).should('be.visible')\n cy.findAllByText(/Successful Report/).should('be.visible')\n\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Retry' }).click()\n })\n })\n cy.findByText(/Your report has failed to generate/).should('be.visible')\n cy.findAllByText(/Successful Report/).should('be.visible')\n }\n const testRedirectsOldStatusUrl = () => {\n cy.url().then((url) => {\n const splitUrl = url.split('/')\n const prevExId = splitUrl[splitUrl.length - 2]\n const oldPath = `/embedded/platform/async/report/request-examples/request-example-success/request/${prevExId}`\n cy.visit(oldPath)\n cy.url().should(\n 'have.string',\n `/embedded/platform/dpr/request-report/report/request-examples/request-example-success/${prevExId}/status`,\n )\n })\n }\n const testRemoveItem = () => {\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Remove' }).click()\n })\n })\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).should('not.exist')\n })\n }\n it('should test out filters, retry/remove and old status url redirects', () => {\n testFilterPersistence()\n testCorrectLinksRetryFailure()\n testRedirectsOldStatusUrl()\n testRemoveItem()\n })\n })\n\n describe('Aborted request', () => {\n const filtersHref =\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters?filters.field1=value1.2&filters.field3.start=2003-02-01&filters.field3.end=2006-05-04&filters.field7=2005-02-01&filters.field8=value8.2&filters.field8=value8.3&sortColumn=field1&sortedAsc=false'\n\n beforeEach(() => {\n executeReportStubs()\n cy.task('stubDefinitionRequestExamplesSuccess')\n cy.task('stubRequestSuccessResult20')\n cy.task('stubCancelAsyncRequest')\n cy.visit(path)\n })\n\n it('should be able to abort the request', () => {\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return (\n Boolean(element.textContent?.includes('Successful Report')) &&\n Boolean(element.textContent?.includes('this will succeed'))\n )\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request report' }).click()\n })\n })\n cy.url().should(\n 'have.string',\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters',\n )\n cy.findByRole('button', { name: 'Request report' }).click()\n\n cy.url().should(\n 'match',\n /.*\\/embedded\\/platform\\/dpr\\/request-report\\/report\\/request-examples\\/request-example-success\\/(.*)\\/status/i,\n )\n\n cy.findByRole('button', { name: /Cancel/ }).click()\n cy.task('stubReportsAbortedStatus')\n cy.findByRole('strong').contains('ABORTED')\n cy.findByRole('button', { name: /Return to request page/ }).click()\n cy.url().should(\n 'have.string',\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters',\n )\n\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Retry' }).should('be.visible')\n cy.findByRole('link', { name: 'Remove' }).should('be.visible')\n cy.findByRole('cell', { name: 'ABORTED' }).should('be.visible')\n })\n })\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Retry' }).click()\n })\n })\n cy.url().should('have.string', filtersHref)\n\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Remove' }).click()\n })\n })\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).should('not.exist')\n })\n })\n })\n})\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,
|
|
4
|
+
"sourcesContent": ["import { executeReportStubs, requestReportByNameAndDescription } from '../../../../../cypress-tests/cypressUtils'\n\ncontext('Requesting a report', () => {\n const path = '/embedded/platform/'\n\n const checkStatuses = () => {\n cy.task('stubReportsSubmittedStatus')\n cy.findByRole('strong').contains('SUBMITTED')\n cy.task('stubReportsPickedStatus')\n cy.findByRole('strong').contains('PICKED')\n cy.task('stubReportsStartedStatus')\n cy.findByRole('strong').contains('STARTED')\n cy.task('stubReportsFinishedStatus')\n }\n\n describe('Successful request', () => {\n beforeEach(() => {\n executeReportStubs()\n cy.task('stubDefinitionRequestExamplesSuccess')\n cy.task('stubRequestSuccessResult20')\n cy.visit(path)\n })\n\n it('should succesfully request and load a report', () => {\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return (\n Boolean(element.textContent?.includes('Successful Report')) &&\n Boolean(element.textContent?.includes('this will succeed'))\n )\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request report' }).click()\n })\n })\n cy.url().should(\n 'have.string',\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters',\n )\n cy.location().should((location) => {\n expect(location.search).to.contain(`filters.field1=value1.2`)\n expect(location.search).to.contain(`filters.field3.start=2003-02-0`)\n expect(location.search).to.contain(`filters.field3.end=2006-05-04`)\n expect(location.search).to.contain(`filters.field7=2005-02-01`)\n expect(location.search).to.contain(`filters.field8=value8.2&filters.field8=value8.3`)\n expect(location.search).to.contain(`sortColumn=field1&sortedAsc=false`)\n })\n\n cy.findByRole('button', { name: 'Request report' }).click()\n cy.url().should(\n 'match',\n /.*\\/embedded\\/platform\\/dpr\\/request-report\\/report\\/request-examples\\/request-example-success\\/(.*)\\/status/i,\n )\n checkStatuses()\n cy.url().should(\n 'match',\n /.*\\/embedded\\/platform\\/dpr\\/view-report\\/async\\/report\\/request-examples\\/request-example-success\\/(.*)\\/report/i,\n )\n cy.location().should((location) => {\n expect(location.search).to.contain(`columns=field1&columns=field2&columns=field3&columns=field6&columns=field7`)\n })\n })\n\n it('should redirect the old request url to the new one', () => {\n const oldPath = '/embedded/platform/async/report/request-examples/request-example-success/request'\n cy.visit(oldPath)\n cy.url().should(\n 'have.string',\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters',\n )\n cy.location().should((location) => {\n expect(location.search).to.contain(`filters.field1=value1.2`)\n expect(location.search).to.contain(`filters.field3.start=2003-02-0`)\n expect(location.search).to.contain(`filters.field3.end=2006-05-04`)\n expect(location.search).to.contain(`filters.field7=2005-02-01`)\n expect(location.search).to.contain(`filters.field8=value8.2&filters.field8=value8.3`)\n expect(location.search).to.contain(`sortColumn=field1&sortedAsc=false`)\n })\n })\n })\n\n describe('Failed request', () => {\n beforeEach(() => {\n executeReportStubs()\n cy.task('stubDefinitionRequestExamplesSuccess')\n cy.task('stubRequestSuccessResult20')\n cy.visit(path)\n })\n\n const testFilterPersistence = () => {\n cy.task('stubReportsFailedStatus')\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return (\n Boolean(element.textContent?.includes('Successful Report')) &&\n Boolean(element.textContent?.includes('this will succeed'))\n )\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request report' }).click()\n })\n })\n cy.findByRole('group', { name: /Field 1/ })\n .findByRole('radio', { checked: true })\n .invoke('val')\n .as('field1')\n cy.findByRole('combobox', { name: /Field 2/ })\n .invoke('val')\n .as('field2')\n cy.findByRole('group', { name: /Field 3/ }).within(() => {\n cy.findByRole('textbox', { name: /From/ }).invoke('val').as('field3From')\n cy.findByRole('textbox', { name: /To/ }).invoke('val').as('field3To')\n })\n cy.findByRole('combobox', { name: /Field 4/ })\n .invoke('val')\n .as('field4')\n cy.findByRole('combobox', { name: /Field 5/ })\n .invoke('val')\n .as('field5')\n cy.findByRole('textbox', { name: /Field 6/ })\n .invoke('val')\n .as('field6')\n cy.findByRole('textbox', { name: /Field 7/ })\n .invoke('val')\n .as('field7')\n cy.findByRole('group', { name: /Field 8/ }).within(() => {\n cy.findAllByRole('checkbox').each((el, idx) => {\n cy.wrap(el).invoke('val').as(`field8-${idx}`)\n })\n })\n cy.findByRole('button', { name: 'Request report' }).click()\n cy.findByRole('button', { name: 'Retry' }).click()\n\n cy.findByRole('group', { name: /Field 1/ })\n .findByRole('radio', { checked: true })\n .invoke('val')\n .then((val) => {\n cy.get('@field1').should('equal', val)\n })\n cy.findByRole('combobox', { name: /Field 2/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field2').should('equal', val)\n })\n cy.findByRole('group', { name: /Field 3/ }).within(() => {\n cy.findByRole('textbox', { name: /From/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field3From').should('equal', val)\n })\n cy.findByRole('textbox', { name: /To/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field3To').should('equal', val)\n })\n })\n cy.findByRole('combobox', { name: /Field 4/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field4').should('equal', val)\n })\n cy.findByRole('combobox', { name: /Field 5/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field5').should('equal', val)\n })\n cy.findByRole('textbox', { name: /Field 6/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field6').should('equal', val)\n })\n cy.findByRole('textbox', { name: /Field 7/ })\n .invoke('val')\n .then((val) => {\n cy.get('@field7').should('equal', val)\n })\n cy.findByRole('group', { name: /Field 8/ }).within(() => {\n cy.findAllByRole('checkbox').each((el, idx) => {\n cy.wrap(el)\n .invoke('val')\n .then((val) => {\n cy.get(`@field8-${idx}`).should('equal', val)\n })\n })\n })\n }\n\n const testCorrectLinksRetryFailure = () => {\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Retry' }).should('be.visible')\n cy.findByRole('link', { name: 'Remove' }).should('be.visible')\n cy.findByRole('cell', { name: 'FAILED' }).should('be.visible')\n })\n })\n cy.findByRole('link', { name: 'Retry' }).click()\n cy.findByText(/Your report has failed to generate/).should('be.visible')\n cy.findAllByText(/Successful Report/).should('be.visible')\n\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Retry' }).click()\n })\n })\n cy.findByText(/Your report has failed to generate/).should('be.visible')\n cy.findAllByText(/Successful Report/).should('be.visible')\n }\n const testRedirectsOldStatusUrl = () => {\n cy.url().then((url) => {\n const splitUrl = url.split('/')\n const prevExId = splitUrl[splitUrl.length - 2]\n const oldPath = `/embedded/platform/async/report/request-examples/request-example-success/request/${prevExId}`\n cy.visit(oldPath)\n cy.url().should(\n 'have.string',\n `/embedded/platform/dpr/request-report/report/request-examples/request-example-success/${prevExId}/status`,\n )\n })\n }\n const testRemoveItem = () => {\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Remove' }).click()\n })\n })\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).should('not.exist')\n })\n }\n it('should test out filters, retry/remove and old status url redirects', () => {\n testFilterPersistence()\n testCorrectLinksRetryFailure()\n testRedirectsOldStatusUrl()\n testRemoveItem()\n })\n })\n\n describe('Aborted request', () => {\n const filtersHref =\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters?filters.field1=value1.2&filters.field3.start=2003-02-01&filters.field3.end=2006-05-04&filters.field7=2005-02-01&filters.field8=value8.2&filters.field8=value8.3&sortColumn=field1&sortedAsc=false'\n\n beforeEach(() => {\n executeReportStubs()\n cy.task('stubDefinitionRequestExamplesSuccess')\n cy.task('stubRequestSuccessResult20')\n cy.task('stubCancelAsyncRequest')\n cy.visit(path)\n })\n\n it('should be able to abort the request', () => {\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return (\n Boolean(element.textContent?.includes('Successful Report')) &&\n Boolean(element.textContent?.includes('this will succeed'))\n )\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request report' }).click()\n })\n })\n cy.url().should(\n 'have.string',\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters',\n )\n cy.findByRole('button', { name: 'Request report' }).click()\n\n cy.url().should(\n 'match',\n /.*\\/embedded\\/platform\\/dpr\\/request-report\\/report\\/request-examples\\/request-example-success\\/(.*)\\/status/i,\n )\n\n cy.findByRole('button', { name: /Cancel/ }).click()\n cy.task('stubReportsAbortedStatus')\n cy.findByRole('strong').contains('ABORTED')\n cy.findByRole('button', { name: /Return to request page/ }).click()\n cy.url().should(\n 'have.string',\n '/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters',\n )\n\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Retry' }).should('be.visible')\n cy.findByRole('link', { name: 'Remove' }).should('be.visible')\n cy.findByRole('cell', { name: 'ABORTED' }).should('be.visible')\n })\n })\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Retry' }).click()\n })\n })\n cy.url().should('have.string', filtersHref)\n\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Remove' }).click()\n })\n })\n\n cy.findByLabelText(/Requested/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return Boolean(element.textContent?.includes('Successful Report'))\n },\n }).should('not.exist')\n })\n })\n })\n\n describe('Exceution failed', () => {\n beforeEach(() => {\n executeReportStubs()\n cy.visit(path)\n })\n\n it('should error when execution data is incorrect', () => {\n requestReportByNameAndDescription({ name: 'Execution data error', description: 'This will return an error' })\n\n cy.findByRole('heading', { name: /Your report has failed to generate/ }).should('be.visible')\n\n cy.visit(path)\n cy.findByRole('tab', { name: /Requested/ }).click()\n cy.findByLabelText(/Requested.*/i).within(() => {\n cy.findAllByRole('paragraph')\n .contains(/You have 0 requested reports/)\n .should('be.visible')\n })\n })\n })\n})\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_cypressUtils", "path", "checkStatuses", "_", "element", "location", "testFilterPersistence", "el", "idx", "val", "testCorrectLinksRetryFailure", "testRedirectsOldStatusUrl", "url", "splitUrl", "prevExId", "oldPath", "testRemoveItem", "filtersHref"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { executeReportStubs } from '../../../../../cypress-tests/cypressUtils'
|
|
1
|
+
import { executeReportStubs, requestReportByNameAndDescription } from '../../../../../cypress-tests/cypressUtils'
|
|
2
2
|
|
|
3
3
|
context('Requesting a report', () => {
|
|
4
4
|
const path = '/embedded/platform/'
|
|
@@ -355,4 +355,25 @@ context('Requesting a report', () => {
|
|
|
355
355
|
})
|
|
356
356
|
})
|
|
357
357
|
})
|
|
358
|
+
|
|
359
|
+
describe('Exceution failed', () => {
|
|
360
|
+
beforeEach(() => {
|
|
361
|
+
executeReportStubs()
|
|
362
|
+
cy.visit(path)
|
|
363
|
+
})
|
|
364
|
+
|
|
365
|
+
it('should error when execution data is incorrect', () => {
|
|
366
|
+
requestReportByNameAndDescription({ name: 'Execution data error', description: 'This will return an error' })
|
|
367
|
+
|
|
368
|
+
cy.findByRole('heading', { name: /Your report has failed to generate/ }).should('be.visible')
|
|
369
|
+
|
|
370
|
+
cy.visit(path)
|
|
371
|
+
cy.findByRole('tab', { name: /Requested/ }).click()
|
|
372
|
+
cy.findByLabelText(/Requested.*/i).within(() => {
|
|
373
|
+
cy.findAllByRole('paragraph')
|
|
374
|
+
.contains(/You have 0 requested reports/)
|
|
375
|
+
.should('be.visible')
|
|
376
|
+
})
|
|
377
|
+
})
|
|
378
|
+
})
|
|
358
379
|
})
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ministryofjustice/hmpps-digital-prison-reporting-frontend",
|
|
3
3
|
"description": "The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.",
|
|
4
|
-
"version": "4.22.
|
|
4
|
+
"version": "4.22.4",
|
|
5
5
|
"main": "dpr/all.mjs",
|
|
6
6
|
"sass": "dpr/all.scss",
|
|
7
7
|
"engines": {
|