From 9b7af474bb8d0bd4b0722082cbbee0626e01b950 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Tue, 27 Jan 2026 11:22:16 +1000 Subject: [PATCH] Cypress ... --- .../backendApi/{client.js => client.mjs} | 74 +++++++++++-------- test/cypress/plugins/backendApi/logger.js | 7 -- test/cypress/plugins/backendApi/logger.mjs | 7 ++ .../plugins/backendApi/{task.js => task.mjs} | 44 +++++++---- test/cypress/plugins/index.mjs | 24 +++--- .../support/{commands.js => commands.mjs} | 0 test/cypress/support/e2e.js | 2 +- test/jsconfig.json | 6 +- 8 files changed, 103 insertions(+), 61 deletions(-) rename test/cypress/plugins/backendApi/{client.js => client.mjs} (60%) delete mode 100644 test/cypress/plugins/backendApi/logger.js create mode 100644 test/cypress/plugins/backendApi/logger.mjs rename test/cypress/plugins/backendApi/{task.js => task.mjs} (74%) rename test/cypress/support/{commands.js => commands.mjs} (100%) diff --git a/test/cypress/plugins/backendApi/client.js b/test/cypress/plugins/backendApi/client.mjs similarity index 60% rename from test/cypress/plugins/backendApi/client.js rename to test/cypress/plugins/backendApi/client.mjs index 6f5f7661..31ef1e03 100644 --- a/test/cypress/plugins/backendApi/client.js +++ b/test/cypress/plugins/backendApi/client.mjs @@ -1,9 +1,9 @@ -const logger = require('./logger'); -const axios = require('axios').default; +import axios from "axios"; +import logger from "./logger.mjs"; -const BackendApi = function(config, token) { +const BackendApi = function (config, token) { this.config = config; - this.token = token; + this.token = token; this.axios = axios.create({ baseURL: config.baseUrl, @@ -14,26 +14,24 @@ const BackendApi = function(config, token) { /** * @param {string} token */ -BackendApi.prototype.setToken = function(token) { +BackendApi.prototype.setToken = function (token) { this.token = token; }; /** * @param {bool} returnOnError */ -BackendApi.prototype._prepareOptions = function(returnOnError) { - let options = { +BackendApi.prototype._prepareOptions = function (returnOnError) { + const options = { headers: { - Accept: 'application/json' - } - } + Accept: "application/json", + }, + }; if (this.token) { - options.headers.Authorization = 'Bearer ' + this.token; + options.headers.Authorization = `Bearer ${this.token}`; } if (returnOnError) { - options.validateStatus = function () { - return true; - } + options.validateStatus = () => true; } return options; }; @@ -44,13 +42,30 @@ BackendApi.prototype._prepareOptions = function(returnOnError) { * @param {function} reject * @param {bool} returnOnError */ -BackendApi.prototype._handleResponse = function(response, resolve, reject, returnOnError) { - logger('Response data:', response.data); - if (!returnOnError && typeof response.data === 'object' && typeof response.data.error === 'object') { - if (typeof response.data === 'object' && typeof response.data.error === 'object' && typeof response.data.error.message !== 'undefined') { - reject(new Error(response.data.error.code + ': ' + response.data.error.message)); +BackendApi.prototype._handleResponse = ( + response, + resolve, + reject, + returnOnError, +) => { + logger("Response data:", response.data); + if ( + !returnOnError && + typeof response.data === "object" && + typeof response.data.error === "object" + ) { + if ( + typeof response.data === "object" && + typeof response.data.error === "object" && + typeof response.data.error.message !== "undefined" + ) { + reject( + new Error( + `${response.data.error.code}: ${response.data.error.message}`, + ), + ); } else { - reject(new Error('Error ' + response.status)); + reject(new Error(`Error ${response.status}`)); } } else { resolve(response.data); @@ -63,10 +78,10 @@ BackendApi.prototype._handleResponse = function(response, resolve, reject, retur * @param {function} reject * @param {bool} returnOnError */ -BackendApi.prototype._handleError = function(err, resolve, reject, returnOnError) { - logger('Axios Error:', err); +BackendApi.prototype._handleError = (err, resolve, reject, returnOnError) => { + logger("Axios Error:", err); if (returnOnError) { - resolve(typeof err.response.data !== 'undefined' ? err.response.data : err); + resolve(typeof err.response.data !== "undefined" ? err.response.data : err); } else { reject(err); } @@ -84,11 +99,11 @@ BackendApi.prototype.request = function (method, path, returnOnError, data) { const options = this._prepareOptions(returnOnError); return new Promise((resolve, reject) => { - let opts = { + const opts = { method: method, url: path, - ...options - } + ...options, + }; if (data !== undefined && data !== null) { opts.data = data; } @@ -110,16 +125,17 @@ BackendApi.prototype.request = function (method, path, returnOnError, data) { * @returns {Promise} */ BackendApi.prototype.postForm = function (path, form, returnOnError) { - logger('POST', this.config.baseUrl + path); + logger("POST", this.config.baseUrl + path); const options = this._prepareOptions(returnOnError); return new Promise((resolve, reject) => { const opts = { ...options, ...form.getHeaders(), - } + }; - this.axios.post(path, form, opts) + this.axios + .post(path, form, opts) .then((response) => { this._handleResponse(response, resolve, reject, returnOnError); }) diff --git a/test/cypress/plugins/backendApi/logger.js b/test/cypress/plugins/backendApi/logger.js deleted file mode 100644 index 8920b869..00000000 --- a/test/cypress/plugins/backendApi/logger.js +++ /dev/null @@ -1,7 +0,0 @@ -const _ = require("lodash"); - -module.exports = function() { - let arr = _.values(arguments); - arr.unshift('[Backend API]'); - console.log.apply(null, arr); -}; diff --git a/test/cypress/plugins/backendApi/logger.mjs b/test/cypress/plugins/backendApi/logger.mjs new file mode 100644 index 00000000..e515ca4b --- /dev/null +++ b/test/cypress/plugins/backendApi/logger.mjs @@ -0,0 +1,7 @@ +import _ from "lodash"; + +export default () => { + const arr = _.values(arguments); + arr.unshift('[Backend API]'); + console.log.apply(null, arr); +}; diff --git a/test/cypress/plugins/backendApi/task.js b/test/cypress/plugins/backendApi/task.mjs similarity index 74% rename from test/cypress/plugins/backendApi/task.js rename to test/cypress/plugins/backendApi/task.mjs index ab9704f4..edc5015c 100644 --- a/test/cypress/plugins/backendApi/task.js +++ b/test/cypress/plugins/backendApi/task.mjs @@ -1,13 +1,12 @@ -const fs = require('fs'); -const FormData = require('form-data'); -const logger = require('./logger'); -const Client = require('./client'); +import fs from "node:fs"; +import FormData from "form-data"; +import Client from "./client.mjs"; +import logger from "./logger.mjs"; -module.exports = function (config) { - logger('Client Ready using', config.baseUrl); +export default (config) => { + logger("Client Ready using", config.baseUrl); return { - /** * @param {object} options * @param {string} options.path API path @@ -18,7 +17,7 @@ module.exports = function (config) { backendApiGet: (options) => { const api = new Client(config); api.setToken(options.token); - return api.request('get', options.path, options.returnOnError || false); + return api.request("get", options.path, options.returnOnError || false); }, /** @@ -32,7 +31,12 @@ module.exports = function (config) { backendApiPost: (options) => { const api = new Client(config); api.setToken(options.token); - return api.request('post', options.path, options.returnOnError || false, options.data); + return api.request( + "post", + options.path, + options.returnOnError || false, + options.data, + ); }, /** @@ -48,8 +52,11 @@ module.exports = function (config) { api.setToken(options.token); const form = new FormData(); - for (let [key, value] of Object.entries(options.files)) { - form.append(key, fs.createReadStream(config.fixturesFolder + '/' + value)); + for (const [key, value] of Object.entries(options.files)) { + form.append( + key, + fs.createReadStream(`${config.fixturesFolder}/${value}`), + ); } return api.postForm(options.path, form, options.returnOnError || false); }, @@ -65,7 +72,12 @@ module.exports = function (config) { backendApiPut: (options) => { const api = new Client(config); api.setToken(options.token); - return api.request('put', options.path, options.returnOnError || false, options.data); + return api.request( + "put", + options.path, + options.returnOnError || false, + options.data, + ); }, /** @@ -78,7 +90,11 @@ module.exports = function (config) { backendApiDelete: (options) => { const api = new Client(config); api.setToken(options.token); - return api.request('delete', options.path, options.returnOnError || false); - } + return api.request( + "delete", + options.path, + options.returnOnError || false, + ); + }, }; }; diff --git a/test/cypress/plugins/index.mjs b/test/cypress/plugins/index.mjs index bf3752b1..1058d633 100644 --- a/test/cypress/plugins/index.mjs +++ b/test/cypress/plugins/index.mjs @@ -1,20 +1,26 @@ -import { SwaggerValidation } from '@jc21/cypress-swagger-validation'; -import chalk from 'chalk'; +import { SwaggerValidation } from "@jc21/cypress-swagger-validation"; +import chalk from "chalk"; +import backendTask from "./backendApi/task.mjs"; export default (on, config) => { // Replace swaggerBase config var wildcard - if (typeof config.env.swaggerBase !== 'undefined') { - config.env.swaggerBase = config.env.swaggerBase.replace('{{baseUrl}}', config.baseUrl); + if (typeof config.env.swaggerBase !== "undefined") { + config.env.swaggerBase = config.env.swaggerBase.replace( + "{{baseUrl}}", + config.baseUrl, + ); } // Plugin Events - on('task', SwaggerValidation(config)); - on('task', require('./backendApi/task')(config)); - on('task', { + on("task", SwaggerValidation(config)); + on("task", backendTask(config)); + on("task", { log(message) { - console.log(`${chalk.cyan.bold('[')}${chalk.blue.bold('LOG')}${chalk.cyan.bold(']')} ${chalk.red.bold(message)}`); + console.log( + `${chalk.cyan.bold("[")}${chalk.blue.bold("LOG")}${chalk.cyan.bold("]")} ${chalk.red.bold(message)}`, + ); return null; - } + }, }); return config; diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.mjs similarity index 100% rename from test/cypress/support/commands.js rename to test/cypress/support/commands.mjs diff --git a/test/cypress/support/e2e.js b/test/cypress/support/e2e.js index 9f724bf4..2d8a13a7 100644 --- a/test/cypress/support/e2e.js +++ b/test/cypress/support/e2e.js @@ -1,4 +1,4 @@ -import './commands'; +import './commands.mjs'; Cypress.on('uncaught:exception', (/*err, runnable*/) => { // returning false here prevents Cypress from diff --git a/test/jsconfig.json b/test/jsconfig.json index ffe33671..9caeeb91 100644 --- a/test/jsconfig.json +++ b/test/jsconfig.json @@ -4,6 +4,10 @@ "cypress/**/*.js", "cypress/config/dev.mjs", "cypress/config/ci.mjs", - "cypress/plugins/index.mjs" + "cypress/plugins/index.mjs", + "cypress/plugins/backendApi/task.mjs", + "cypress/plugins/backendApi/logger.mjs", + "cypress/plugins/backendApi/client.mjs", + "cypress/support/commands.mjs" ] }