Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | 5x 5x 27x 27x 27x 5x 214x 107x 107x 107x 107x 107x 107x 107x 107x 5x 5x 5x 5x 5x 5x | import { promisify } from "util";
import sqlite3 from "sqlite3";
import * as SQLite from "expo-sqlite";
/**
* Setup for a NodeJS based SQLite instance
*
* This allows for testing SQL queries and function calls to the ORM
* without the need for the emulator and Expo application to be running
*
* Each function is replaced with an sqlite3 equivalent and return values
* are formatted to meet expectations of regular implementation.
*
* The database is stored in memory.
*
*
*/
const sqliteDb = new sqlite3.Database(":memory:"); // Create a new temporary database in memory
const allAsync = (...args: [string] | [string, any[]]) => {
Iif (args.length === 1) {
// If no parameters are provided, run query without parameters
return promisify(
(query: string, callback: (err: Error | null, rows: any[]) => void) => {
sqliteDb.all(query, callback);
}
)(args[0]);
} else {
// If parameters are provided, run query with parameters
return promisify(
(
query: string,
params: any[],
callback: (err: Error | null, rows: any[]) => void
) => {
sqliteDb.all(query, params, callback);
}
)(args[0], args[1]);
}
};
const runAsync = (sql: string, ...params: any[]) => {
if (params.length === 0) {
// If no parameters are provided, run query without parameters
return promisify(
(query: string, callback: (err: Error | null, rows: any[]) => void) => {
sqliteDb.run(query, callback); // Executes the query with no parameters
}
)(sql);
} else {
// If parameters are provided, run query with parameters
return promisify(
(
query: string,
params: any[],
callback: (
err: Error | null,
result: { lastInsertRowId: number; changes: number }
) => void
) => {
// Run the query with the provided parameters
sqliteDb.run(
query,
params,
(
err: Error | null,
result: {
changes: number;
lastInsertRowId: number;
}
) => {
Iif (err) {
throw new Error(
`Entity: callback failed in runAsync test function: ${err}`
);
} else {
// After the query completes, retrieve the last insert ID
sqliteDb.get(
"SELECT last_insert_rowid() AS id;",
(
err: any,
row: {
id: number;
}
) => {
Iif (err) {
throw new Error(
"Entity: callback failed in runAsync test function"
);
} else {
// Return the result including the lastInsertRowId
callback(null, {
...result,
lastInsertRowId: row?.id,
});
}
}
);
}
}
);
}
)(sql, params);
}
};
const getAsync = promisify(sqliteDb.get).bind(sqliteDb);
const execAsync = promisify(sqliteDb.exec).bind(sqliteDb);
const execSync = sqliteDb.exec.bind(sqliteDb);
const allSync = sqliteDb.all.bind(sqliteDb);
const runSync = sqliteDb.run.bind(sqliteDb);
export const mockdb = {
execAsync: execAsync,
getAllAsync: allAsync,
getFirstAsync: getAsync,
runAsync: runAsync,
execSync: execSync,
getAllSync: allSync,
}
|