Skip to content

Commit 75a7bbf

Browse files
authored
Merge pull request #55 from propublica/develop
small updates
2 parents ebc2b54 + 2cbe3f6 commit 75a7bbf

5 files changed

Lines changed: 920 additions & 9 deletions

File tree

__tests__/menu.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,10 @@ describe("importDriveLinks", () => {
160160
getFolderById: jest.fn().mockReturnValue(mockFolder),
161161
};
162162

163-
importDriveLinks({ folderUrl: "https://drive.google.com/drive/folders/abc123", outputCol: "source_drive" });
163+
importDriveLinks({
164+
folderUrl: "https://drive.google.com/drive/folders/abc123",
165+
outputCol: "source_drive",
166+
});
164167

165168
expect(mockSetValues).toHaveBeenCalledWith([["https://drive.google.com/file/1"]]);
166169
});

__tests__/services.test.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,10 @@ describe("prepRecipe", () => {
130130
describe("importDriveLinks", () => {
131131
it("calls google.script.run.importDriveLinks with config and jobId and resolves", async () => {
132132
const handlers = captureHandlers();
133-
const config = { folderUrl: "https://drive.google.com/drive/folders/abc", outputCol: "source_drive" };
133+
const config = {
134+
folderUrl: "https://drive.google.com/drive/folders/abc",
135+
outputCol: "source_drive",
136+
};
134137
const promise = services.importDriveLinks(config, "job-1");
135138
handlers.resolve(undefined);
136139
await expect(promise).resolves.toBeUndefined();
@@ -139,7 +142,10 @@ describe("importDriveLinks", () => {
139142

140143
it("rejects on failure", async () => {
141144
const handlers = captureHandlers();
142-
const config = { folderUrl: "https://drive.google.com/drive/folders/abc", outputCol: "source_drive" };
145+
const config = {
146+
folderUrl: "https://drive.google.com/drive/folders/abc",
147+
outputCol: "source_drive",
148+
};
143149
const promise = services.importDriveLinks(config, "job-1");
144150
handlers.reject(new Error("drive error"));
145151
await expect(promise).rejects.toThrow("drive error");

__tests__/utils.test.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -196,29 +196,40 @@ describe("getAllFilesRecursive", () => {
196196
});
197197

198198
it("filters by mimeType prefix when mimeTypePrefixes is provided", () => {
199-
const mockDoc = { getUrl: () => "doc-url", getMimeType: () => "application/vnd.google-apps.document" };
199+
const mockDoc = {
200+
getUrl: () => "doc-url",
201+
getMimeType: () => "application/vnd.google-apps.document",
202+
};
200203
const mockPdf = { getUrl: () => "pdf-url", getMimeType: () => "application/pdf" };
201204
const mockImg = { getUrl: () => "img-url", getMimeType: () => "image/png" };
202-
const files = makeFileIterator([]) as any;
203205
let i = 0;
204206
const mockFiles = [mockDoc, mockPdf, mockImg];
205207
const fileIter = { hasNext: () => i < mockFiles.length, next: () => mockFiles[i++] };
206208
const subfolders = makeFolderIterator([]);
207-
const folder = { getFiles: () => fileIter, getFolders: () => subfolders } as unknown as GoogleAppsScript.Drive.Folder;
209+
const folder = {
210+
getFiles: () => fileIter,
211+
getFolders: () => subfolders,
212+
} as unknown as GoogleAppsScript.Drive.Folder;
208213

209214
const result: DriveFileInfo[] = [];
210215
getAllFilesRecursive(folder, result, ["application/"]);
211216
expect(result.map((f) => f.url)).toEqual(["doc-url", "pdf-url"]);
212217
});
213218

214219
it("imports all files when mimeTypePrefixes is absent", () => {
215-
const mockDoc = { getUrl: () => "doc-url", getMimeType: () => "application/vnd.google-apps.document" };
220+
const mockDoc = {
221+
getUrl: () => "doc-url",
222+
getMimeType: () => "application/vnd.google-apps.document",
223+
};
216224
const mockImg = { getUrl: () => "img-url", getMimeType: () => "image/png" };
217225
let i = 0;
218226
const mockFiles = [mockDoc, mockImg];
219227
const fileIter = { hasNext: () => i < mockFiles.length, next: () => mockFiles[i++] };
220228
const subfolders = makeFolderIterator([]);
221-
const folder = { getFiles: () => fileIter, getFolders: () => subfolders } as unknown as GoogleAppsScript.Drive.Folder;
229+
const folder = {
230+
getFiles: () => fileIter,
231+
getFolders: () => subfolders,
232+
} as unknown as GoogleAppsScript.Drive.Folder;
222233

223234
const result: DriveFileInfo[] = [];
224235
getAllFilesRecursive(folder, result);
@@ -359,7 +370,11 @@ describe("writeJobProgress", () => {
359370
const mockPut = jest.fn();
360371
const mockCache = { put: mockPut } as unknown as GoogleAppsScript.Cache.Cache;
361372

362-
writeJobProgress(mockCache, "job-123", { message: "Processing row 3 of 10", current: 3, total: 10 });
373+
writeJobProgress(mockCache, "job-123", {
374+
message: "Processing row 3 of 10",
375+
current: 3,
376+
total: 10,
377+
});
363378

364379
expect(mockPut).toHaveBeenCalledWith(
365380
"job-123",

docs/plans/2026-03-18-import-drive-links-panel-design.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ Rebuild the "Import Drive Links" tool as a first-class sidebar panel, replacing
1414
- Delete the old `importDriveLinks` server function and its `runTool` dispatcher entry
1515
- Lay down patterns that support future Extra tool panels (Sample Rows, Extract Text)
1616

17+
## Migration Pattern
18+
19+
This is the first of three "Extra tool → dedicated panel" migrations. Sample Rows and Extract Text will follow the same steps. Key conventions to carry forward:
20+
21+
- Each tool gets its own config interface in `src/shared/types.ts` (e.g. `SampleRowsConfig`, `ExtractTextConfig`)
22+
- Each migration removes that tool's entry from the `runTool` TOOLS dispatcher in `index.ts`
23+
- Once all three tools are migrated, `runTool` becomes dead code — delete the function, its GAS stub in `rollup.config.js`, and its declaration in `google.d.ts`
24+
- `__tests__/panels/import-drive-links.test.ts` is the reference test pattern for the subsequent panel test files
25+
1726
## Architecture
1827

1928
### New files

0 commit comments

Comments
 (0)