Files

80 lines
2.2 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { GoogleSheetsWriter } from '../src/output/googleSheets.js';
describe('GoogleSheetsWriter', () => {
it('creates missing sheets and appends content, sponsor, and dead-link rows', async () => {
const calls: unknown[] = [];
const sheets = {
spreadsheets: {
get: async () => ({
data: { sheets: [{ properties: { title: 'Sponsored Links' } }] }
}),
batchUpdate: async (request: unknown) => {
calls.push(request);
},
values: {
append: async (request: unknown) => {
calls.push(request);
}
}
}
};
await new GoogleSheetsWriter('sheet-1', undefined, sheets).write({
rows: [
{
'Source Newsletter': 'A Very Long Newsletter Name That Is Fine In Google Sheets',
Title: '=Formula',
'Link URL': 'https://example.com'
}
],
sponsors: [{ Newsletter: 'Weekly', Sponsor: 'Acme', Link: 'https://sponsor.example' }],
deadLinks: [{ URL: 'https://dead.example', Status: '404' }]
});
expect(calls[0]).toMatchObject({
spreadsheetId: 'sheet-1',
requestBody: {
requests: [
{
addSheet: {
properties: { title: 'A Very Long Newsletter Name That Is Fine In Google Sheets' }
}
},
{ addSheet: { properties: { title: 'Dead Links' } } }
]
}
});
expect(calls).toContainEqual(
expect.objectContaining({
spreadsheetId: 'sheet-1',
range: "'A Very Long Newsletter Name That Is Fine In Google Sheets'!A1",
requestBody: {
values: [
[
'Issue Date',
'Category',
'Link URL',
'Title',
'Description',
'Page Title + Meta',
'Also In'
],
['', '', 'https://example.com', "'=Formula", '', '', '']
]
}
})
);
expect(calls).toContainEqual(
expect.objectContaining({
range: "'Sponsored Links'!A1"
})
);
expect(calls).toContainEqual(
expect.objectContaining({
range: "'Dead Links'!A1"
})
);
});
});