diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 1eba435d..eb66cee2 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -107,22 +107,30 @@ jobs: if: always() # This step runs even if the previous test step failed. run: | echo "--- Merging Coverage Reports and Displaying Text Summary ---" - + # Add logging to verify that the source coverage files exist before merging. echo "Checking for source coverage files..." ls -l .coverage/unit/coverage-final.json ls -l .coverage/integration/coverage-final.json - # Step 1: Explicitly merge the two coverage-final.json files into a single output file. - # This is more robust than letting nyc guess the files. - echo "Merging coverage data..." - npx nyc merge .coverage/merged .coverage/unit/coverage-final.json .coverage/integration/coverage-final.json - # Move the merged file to the root of the .coverage directory for the report step. - mv .coverage/merged/coverage.json .coverage/coverage.json + # Step 1: Create a temporary directory to hold all coverage files for merging. + MERGE_DIR=".coverage/temp-for-merge" + mkdir -p "$MERGE_DIR" + echo "Created temporary merge directory: $MERGE_DIR" - # Step 2: Generate the text summary and HTML report from the single, merged coverage file. + # Step 2: Copy the individual coverage reports into the temporary directory. + cp .coverage/unit/coverage-final.json "$MERGE_DIR/unit-coverage.json" + cp .coverage/integration/coverage-final.json "$MERGE_DIR/integration-coverage.json" + echo "Copied coverage files to merge directory. Contents:" + ls -l "$MERGE_DIR" + + # Step 3: Merge all .json files from the temporary directory into a single output file. + echo "Merging coverage data..." + npx nyc merge "$MERGE_DIR" .coverage/coverage.json + + # Step 4: Generate the text summary and HTML report from the single, merged coverage file. echo "Generating reports from merged data..." - npx nyc report --reporter=text --reporter=html --report-dir .coverage/ + npx nyc report --reporter=text --reporter=html --report-dir .coverage/ --temp-dir .coverage/ echo "✅ Coverage reports generated successfully." - name: Archive Code Coverage Report diff --git a/src/db/backup_user.ts b/src/db/backup_user.ts index f786f494..0139581e 100644 --- a/src/db/backup_user.ts +++ b/src/db/backup_user.ts @@ -70,16 +70,19 @@ const USER_DATA_TABLES: Record = { 'shopping_trips': 'user_id', }; +type DBValue = string | number | boolean | null | Date | object; + /** * Generates a SQL INSERT statement for a given row of data. * @param table The name of the table. * @param row The data object for the row. * @returns A formatted SQL INSERT statement string. */ -function generateInsertStatement(table: string, row: Record): string { +function generateInsertStatement(table: string, row: Record): string { const columns = Object.keys(row).map(col => `"${col}"`).join(', '); const values = Object.values(row).map(val => { if (val === null) return 'NULL'; + if (val instanceof Date) return `'${val.toISOString()}'`; // Handle Date objects if (typeof val === 'string') return `'${val.replace(/'/g, "''")}'`; // Escape single quotes if (typeof val === 'object') return `'${JSON.stringify(val).replace(/'/g, "''")}'`; // Handle JSONB return val; @@ -162,4 +165,3 @@ async function main() { } main(); - diff --git a/src/services/flyer-processing.integration.test.ts b/src/services/flyer-processing.integration.test.ts index 3a3add00..7d256a31 100644 --- a/src/services/flyer-processing.integration.test.ts +++ b/src/services/flyer-processing.integration.test.ts @@ -1,5 +1,5 @@ // src/services/flyer-processing.integration.test.ts -import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest'; +import { describe, it, expect, beforeAll, afterAll } from 'vitest'; import fs from 'fs'; import path from 'path'; import * as apiClient from './apiClient';