From 91a2a3f07dc84998e41b2e4ff0d5cc4398efbbc5 Mon Sep 17 00:00:00 2001 From: Liam Lloyd-Tucker Date: Tue, 4 Aug 2026 17:10:45 -0700 Subject: [PATCH] Fix build issue caused by misnamed test file Presently, builds are broken because the utils_test.ts file in api/src/folder/controller imports a function from the utilities in the /api/test directory. As a result tsc gets confused regarding what the root folder of the API package is, causing it to output in an unexpected place. This causes the Dockerfile to be unable to find the index.js needed to start the API server. This commit fixes this problem by moving the utilities from utils_test.ts to the test files that rely on them. This causes some duplication, but 1. I don't see an elegant way to get tsc to ignore a controller-specific test utils file without vitest becoming convinced that there's a test file with no tests in it (which it sees as an error) 2. The utils in utils_test.ts were for loading an clearing fixture data. It is probably best not to reuse functions for this across test modules, because these are expensive operations in terms of time and reusing them encourages us to load more data than a particular module might need. --- .../controller/get_folder_children.test.ts | 50 ++++++++++++++++++- .../controller/get_folder_legacy.test.ts | 50 ++++++++++++++++++- .../controller/get_folder_share_links.test.ts | 50 ++++++++++++++++++- .../controller/get_folders_page.test.ts | 50 ++++++++++++++++++- .../folder/controller/patch_folder.test.ts | 50 ++++++++++++++++++- .../api/src/folder/controller/utils_test.ts | 50 ------------------- 6 files changed, 245 insertions(+), 55 deletions(-) delete mode 100644 packages/api/src/folder/controller/utils_test.ts diff --git a/packages/api/src/folder/controller/get_folder_children.test.ts b/packages/api/src/folder/controller/get_folder_children.test.ts index f96b8d67..ca694d5f 100644 --- a/packages/api/src/folder/controller/get_folder_children.test.ts +++ b/packages/api/src/folder/controller/get_folder_children.test.ts @@ -13,12 +13,60 @@ import { mockExtractUserEmailFromAuthToken, mockExtractShareTokenFromHeaders, } from "../../../test/middleware_mocks.js"; -import { loadFixtures, clearDatabase } from "./utils_test.js"; import { db } from "../../database.js"; +import { runFixtures } from "../../../test/run_fixtures.js"; vi.mock("../../database"); vi.mock("../../middleware"); +export const loadFixtures = async (): Promise => { + await runFixtures(db, [ + "folder.fixtures.create_test_accounts", + "folder.fixtures.create_test_archives", + "folder.fixtures.create_test_account_archives", + "folder.fixtures.create_test_locations", + "folder.fixtures.create_test_folders", + "folder.fixtures.create_test_records", + "folder.fixtures.create_test_files", + "folder.fixtures.create_test_record_files", + "folder.fixtures.create_test_folder_links", + "folder.fixtures.create_test_shareby_urls", + "folder.fixtures.create_test_accesses", + "folder.fixtures.create_test_folder_sizes", + "folder.fixtures.create_test_shares", + "folder.fixtures.create_test_profile_items", + "folder.fixtures.create_test_tags", + "folder.fixtures.create_test_tag_links", + "folder.fixtures.create_test_invite_shares", + ]); +}; + +export const clearDatabase = async (): Promise => { + await db.query( + `TRUNCATE + event, + account_archive, + account, + archive, + folder, + folder_link, + shareby_url, + access, + folder_size, + locn, + share, + profile_item, + tag, + tag_link, + record, + file, + record_file, + invite, + invite_share + CASCADE`, + ); +}; + describe("GET /folder/{id}/children", () => { const agent = request(app); diff --git a/packages/api/src/folder/controller/get_folder_legacy.test.ts b/packages/api/src/folder/controller/get_folder_legacy.test.ts index d989cf7d..ddcd54ef 100644 --- a/packages/api/src/folder/controller/get_folder_legacy.test.ts +++ b/packages/api/src/folder/controller/get_folder_legacy.test.ts @@ -11,12 +11,60 @@ import { mockExtractUserEmailFromAuthToken, mockExtractShareTokenFromHeaders, } from "../../../test/middleware_mocks.js"; -import { loadFixtures, clearDatabase } from "./utils_test.js"; +import { runFixtures } from "../../../test/run_fixtures.js"; vi.mock("../../database"); vi.mock("../../middleware"); vi.mock("@stela/logger"); +export const loadFixtures = async (): Promise => { + await runFixtures(db, [ + "folder.fixtures.create_test_accounts", + "folder.fixtures.create_test_archives", + "folder.fixtures.create_test_account_archives", + "folder.fixtures.create_test_locations", + "folder.fixtures.create_test_folders", + "folder.fixtures.create_test_records", + "folder.fixtures.create_test_files", + "folder.fixtures.create_test_record_files", + "folder.fixtures.create_test_folder_links", + "folder.fixtures.create_test_shareby_urls", + "folder.fixtures.create_test_accesses", + "folder.fixtures.create_test_folder_sizes", + "folder.fixtures.create_test_shares", + "folder.fixtures.create_test_profile_items", + "folder.fixtures.create_test_tags", + "folder.fixtures.create_test_tag_links", + "folder.fixtures.create_test_invite_shares", + ]); +}; + +export const clearDatabase = async (): Promise => { + await db.query( + `TRUNCATE + event, + account_archive, + account, + archive, + folder, + folder_link, + shareby_url, + access, + folder_size, + locn, + share, + profile_item, + tag, + tag_link, + record, + file, + record_file, + invite, + invite_share + CASCADE`, + ); +}; + const testEmail = "test@permanent.org"; describe("GET /folder (deprecated alias, no pagination)", () => { const agent = request(app); diff --git a/packages/api/src/folder/controller/get_folder_share_links.test.ts b/packages/api/src/folder/controller/get_folder_share_links.test.ts index 841c2bb8..3345f593 100644 --- a/packages/api/src/folder/controller/get_folder_share_links.test.ts +++ b/packages/api/src/folder/controller/get_folder_share_links.test.ts @@ -16,12 +16,60 @@ import { db } from "../../database.js"; import { verifyUserAuthentication } from "../../middleware/index.js"; import type { ShareLink } from "../../share_link/models.js"; import { mockVerifyUserAuthentication } from "../../../test/middleware_mocks.js"; -import { loadFixtures, clearDatabase } from "./utils_test.js"; +import { runFixtures } from "../../../test/run_fixtures.js"; vi.mock("../../database"); vi.mock("../../middleware"); vi.mock("@stela/logger"); +export const loadFixtures = async (): Promise => { + await runFixtures(db, [ + "folder.fixtures.create_test_accounts", + "folder.fixtures.create_test_archives", + "folder.fixtures.create_test_account_archives", + "folder.fixtures.create_test_locations", + "folder.fixtures.create_test_folders", + "folder.fixtures.create_test_records", + "folder.fixtures.create_test_files", + "folder.fixtures.create_test_record_files", + "folder.fixtures.create_test_folder_links", + "folder.fixtures.create_test_shareby_urls", + "folder.fixtures.create_test_accesses", + "folder.fixtures.create_test_folder_sizes", + "folder.fixtures.create_test_shares", + "folder.fixtures.create_test_profile_items", + "folder.fixtures.create_test_tags", + "folder.fixtures.create_test_tag_links", + "folder.fixtures.create_test_invite_shares", + ]); +}; + +export const clearDatabase = async (): Promise => { + await db.query( + `TRUNCATE + event, + account_archive, + account, + archive, + folder, + folder_link, + shareby_url, + access, + folder_size, + locn, + share, + profile_item, + tag, + tag_link, + record, + file, + record_file, + invite, + invite_share + CASCADE`, + ); +}; + describe("GET /folder/{id}/share_links", () => { const agent = request(app); diff --git a/packages/api/src/folder/controller/get_folders_page.test.ts b/packages/api/src/folder/controller/get_folders_page.test.ts index 2cf0bec1..93af4871 100644 --- a/packages/api/src/folder/controller/get_folders_page.test.ts +++ b/packages/api/src/folder/controller/get_folders_page.test.ts @@ -11,12 +11,60 @@ import { mockExtractUserEmailFromAuthToken, mockExtractShareTokenFromHeaders, } from "../../../test/middleware_mocks.js"; -import { loadFixtures, clearDatabase } from "./utils_test.js"; +import { runFixtures } from "../../../test/run_fixtures.js"; vi.mock("../../database"); vi.mock("../../middleware"); vi.mock("@stela/logger"); +export const loadFixtures = async (): Promise => { + await runFixtures(db, [ + "folder.fixtures.create_test_accounts", + "folder.fixtures.create_test_archives", + "folder.fixtures.create_test_account_archives", + "folder.fixtures.create_test_locations", + "folder.fixtures.create_test_folders", + "folder.fixtures.create_test_records", + "folder.fixtures.create_test_files", + "folder.fixtures.create_test_record_files", + "folder.fixtures.create_test_folder_links", + "folder.fixtures.create_test_shareby_urls", + "folder.fixtures.create_test_accesses", + "folder.fixtures.create_test_folder_sizes", + "folder.fixtures.create_test_shares", + "folder.fixtures.create_test_profile_items", + "folder.fixtures.create_test_tags", + "folder.fixtures.create_test_tag_links", + "folder.fixtures.create_test_invite_shares", + ]); +}; + +export const clearDatabase = async (): Promise => { + await db.query( + `TRUNCATE + event, + account_archive, + account, + archive, + folder, + folder_link, + shareby_url, + access, + folder_size, + locn, + share, + profile_item, + tag, + tag_link, + record, + file, + record_file, + invite, + invite_share + CASCADE`, + ); +}; + const testEmail = "test@permanent.org"; describe("GET /folders", () => { const agent = request(app); diff --git a/packages/api/src/folder/controller/patch_folder.test.ts b/packages/api/src/folder/controller/patch_folder.test.ts index be9ffe72..7754d49e 100644 --- a/packages/api/src/folder/controller/patch_folder.test.ts +++ b/packages/api/src/folder/controller/patch_folder.test.ts @@ -11,15 +11,63 @@ import { import request from "supertest"; import { app } from "../../app.js"; import { db } from "../../database.js"; -import { loadFixtures, clearDatabase } from "./utils_test.js"; import { mockVerifyUserAuthentication } from "../../../test/middleware_mocks.js"; import { mockSqlCall } from "../../../test/mock_sql.js"; import type { Folder } from "../models.js"; +import { runFixtures } from "../../../test/run_fixtures.js"; vi.mock("../../database"); vi.mock("../../middleware"); vi.mock("@stela/logger"); +export const loadFixtures = async (): Promise => { + await runFixtures(db, [ + "folder.fixtures.create_test_accounts", + "folder.fixtures.create_test_archives", + "folder.fixtures.create_test_account_archives", + "folder.fixtures.create_test_locations", + "folder.fixtures.create_test_folders", + "folder.fixtures.create_test_records", + "folder.fixtures.create_test_files", + "folder.fixtures.create_test_record_files", + "folder.fixtures.create_test_folder_links", + "folder.fixtures.create_test_shareby_urls", + "folder.fixtures.create_test_accesses", + "folder.fixtures.create_test_folder_sizes", + "folder.fixtures.create_test_shares", + "folder.fixtures.create_test_profile_items", + "folder.fixtures.create_test_tags", + "folder.fixtures.create_test_tag_links", + "folder.fixtures.create_test_invite_shares", + ]); +}; + +export const clearDatabase = async (): Promise => { + await db.query( + `TRUNCATE + event, + account_archive, + account, + archive, + folder, + folder_link, + shareby_url, + access, + folder_size, + locn, + share, + profile_item, + tag, + tag_link, + record, + file, + record_file, + invite, + invite_share + CASCADE`, + ); +}; + describe("patch folder", () => { const agent = request(app); diff --git a/packages/api/src/folder/controller/utils_test.ts b/packages/api/src/folder/controller/utils_test.ts deleted file mode 100644 index ce0e82e2..00000000 --- a/packages/api/src/folder/controller/utils_test.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { db } from "../../database.js"; -import { runFixtures } from "../../../test/run_fixtures.js"; - -export const loadFixtures = async (): Promise => { - await runFixtures(db, [ - "folder.fixtures.create_test_accounts", - "folder.fixtures.create_test_archives", - "folder.fixtures.create_test_account_archives", - "folder.fixtures.create_test_locations", - "folder.fixtures.create_test_folders", - "folder.fixtures.create_test_records", - "folder.fixtures.create_test_files", - "folder.fixtures.create_test_record_files", - "folder.fixtures.create_test_folder_links", - "folder.fixtures.create_test_shareby_urls", - "folder.fixtures.create_test_accesses", - "folder.fixtures.create_test_folder_sizes", - "folder.fixtures.create_test_shares", - "folder.fixtures.create_test_profile_items", - "folder.fixtures.create_test_tags", - "folder.fixtures.create_test_tag_links", - "folder.fixtures.create_test_invite_shares", - ]); -}; - -export const clearDatabase = async (): Promise => { - await db.query( - `TRUNCATE - event, - account_archive, - account, - archive, - folder, - folder_link, - shareby_url, - access, - folder_size, - locn, - share, - profile_item, - tag, - tag_link, - record, - file, - record_file, - invite, - invite_share - CASCADE`, - ); -};