View | Details | Raw Unified | Return to bug 41247
Collapse All | Expand All

(-)a/t/cypress/plugins/db.js (-1 / +13 lines)
Lines 9-14 Link Here
9
 */
9
 */
10
10
11
const mysql = require("mysql2/promise");
11
const mysql = require("mysql2/promise");
12
const { exec } = require("child_process");
12
13
13
/**
14
/**
14
 * Database connection configuration
15
 * Database connection configuration
Lines 63-66 async function query(sql, params = []) { Link Here
63
    return rows;
64
    return rows;
64
}
65
}
65
66
66
module.exports = { query };
67
async function set_syspref({ variable, value }) {
68
    await query("UPDATE systempreferences SET value = ? WHERE variable = ?", [
69
        value,
70
        variable,
71
    ]).then(() => {
72
        exec("flush_memcached");
73
        return 1;
74
    });
75
    return 0;
76
}
77
78
module.exports = { query, set_syspref };
(-)a/t/cypress/plugins/index.js (-2 / +8 lines)
Lines 24-30 const { Link Here
24
24
25
const { getBasicAuthHeader } = require("./auth.js");
25
const { getBasicAuthHeader } = require("./auth.js");
26
26
27
const { query } = require("./db.js");
27
const { query, set_syspref } = require("./db.js");
28
29
const { modifyXmlElement, readXmlElementValue } = require("./xml.js");
28
30
29
const { apiGet, apiPost, apiPut, apiDelete } = require("./api-client.js");
31
const { apiGet, apiPost, apiPut, apiDelete } = require("./api-client.js");
30
32
Lines 50-57 const { apiGet, apiPost, apiPut, apiDelete } = require("./api-client.js"); Link Here
50
 * - Data Insertion: insertSampleBiblio, insertSampleHold, insertSampleCheckout, insertSamplePatron
52
 * - Data Insertion: insertSampleBiblio, insertSampleHold, insertSampleCheckout, insertSamplePatron
51
 * - Data Cleanup: deleteSampleObjects
53
 * - Data Cleanup: deleteSampleObjects
52
 * - API Access: apiGet, apiPost, apiPut, apiDelete
54
 * - API Access: apiGet, apiPost, apiPut, apiDelete
53
 * - Database Access: query
55
 * - Database Access: query, set_syspref
54
 * - Authentication: getBasicAuthHeader
56
 * - Authentication: getBasicAuthHeader
57
 * - XML files Access: modifyXmlElement, readXmlElementValue
55
 *
58
 *
56
 * @example
59
 * @example
57
 * // Usage in Cypress tests
60
 * // Usage in Cypress tests
Lines 104-109 module.exports = (on, config) => { Link Here
104
        },
107
        },
105
        deleteSampleObjects,
108
        deleteSampleObjects,
106
        query,
109
        query,
110
        set_syspref,
111
        modifyXmlElement,
112
        readXmlElementValue,
107
113
108
        apiGet(args) {
114
        apiGet(args) {
109
            return apiGet({ ...args, baseUrl, authHeader });
115
            return apiGet({ ...args, baseUrl, authHeader });
(-)a/t/cypress/plugins/xml.js (-1 / +50 lines)
Line 0 Link Here
0
- 
1
const fs = require("fs");
2
const path = require("path");
3
const { exec } = require("child_process");
4
const { promisify } = require("util");
5
const execPromise = promisify(exec);
6
7
async function modifyXmlElement({ filePath, element, value }) {
8
    const targetPath = path.resolve(filePath);
9
    let xmlContent;
10
11
    try {
12
        xmlContent = fs.readFileSync(targetPath, "utf8");
13
        const regex = new RegExp(`<${element}>[^<]*</${element}>`, "i");
14
        const replacement = `<${element}>${value}</${element}>`;
15
16
        if (!regex.test(xmlContent)) {
17
            throw new Error(`Element <${element}> not found in ${targetPath}`);
18
        }
19
20
        const newContent = xmlContent.replace(regex, replacement);
21
        fs.writeFileSync(targetPath, newContent, "utf8");
22
23
        await execPromise("koha-plack --restart kohadev");
24
        return null;
25
    } catch (err) {
26
        return err.message;
27
    }
28
}
29
30
async function readXmlElementValue({ filePath, element }) {
31
    const targetPath = path.resolve(filePath);
32
    let xmlContent;
33
34
    try {
35
        xmlContent = fs.readFileSync(targetPath, "utf8");
36
        const regex = new RegExp(`<${element}>([^<]*)</${element}>`, "i");
37
        const match = xmlContent.match(regex);
38
39
        if (!match) {
40
            throw new Error(`Element <${element}> not found in ${targetPath}`);
41
        }
42
43
        // Return the value of the element
44
        return match[1]; // match[1] contains the value between the tags
45
    } catch (err) {
46
        return err.message;
47
    }
48
}
49
50
module.exports = { readXmlElementValue, modifyXmlElement };

Return to bug 41247