google-docs-mcp / src /tools /docs /smartChipHelpers.test.ts
iFightDucks's picture
Initial HF Space deploy: a-bonus/google-docs-mcp with HF metadata
7dc28be
import { describe, expect, it } from 'vitest';
import { extractSmartChips } from './smartChipHelpers.js';
const mockDocument = {
body: {
content: [
{
startIndex: 1,
endIndex: 35,
paragraph: {
elements: [
{
startIndex: 1,
endIndex: 2,
dateElement: {
dateId: 'date-1',
dateElementProperties: {
displayText: '2026/05/07 15:30',
timestamp: '2026-05-07T06:30:00Z',
timeZoneId: 'Asia/Tokyo',
},
},
},
{
startIndex: 2,
endIndex: 3,
richLink: {
richLinkId: 'link-1',
richLinkProperties: {
title: 'Planning Template',
uri: 'https://docs.google.com/document/d/example/edit',
},
},
},
{
startIndex: 3,
endIndex: 4,
person: {
personId: 'person-1',
personProperties: {
name: 'Nguyen Hien',
email: 'hien@example.com',
},
},
},
],
},
},
{
startIndex: 35,
endIndex: 80,
table: {
tableRows: [
{
tableCells: [
{
content: [
{
paragraph: {
elements: [
{
startIndex: 40,
endIndex: 41,
dateElement: {
dateId: 'date-2',
dateElementProperties: {
displayText: '2026/05/08',
timestamp: '2026-05-07T15:00:00Z',
},
},
},
],
},
},
],
},
],
},
],
},
},
],
},
tabs: [
{
tabProperties: {
tabId: 'tab-1',
title: 'Tab 1',
},
documentTab: {
body: {
content: [
{
startIndex: 1,
endIndex: 10,
paragraph: {
elements: [
{
startIndex: 1,
endIndex: 2,
person: {
personId: 'person-tab',
personProperties: {
email: 'tab@example.com',
},
},
},
],
},
},
],
},
},
},
],
} as any;
describe('extractSmartChips', () => {
it('extracts date, rich link, and person chips from body content and tables', () => {
const chips = extractSmartChips(mockDocument);
expect(chips).toEqual([
{
type: 'date',
startIndex: 1,
endIndex: 2,
text: '2026/05/07 15:30',
properties: {
dateId: 'date-1',
displayText: '2026/05/07 15:30',
timestamp: '2026-05-07T06:30:00Z',
timeZoneId: 'Asia/Tokyo',
},
},
{
type: 'richLink',
startIndex: 2,
endIndex: 3,
text: 'Planning Template',
properties: {
richLinkId: 'link-1',
title: 'Planning Template',
uri: 'https://docs.google.com/document/d/example/edit',
},
},
{
type: 'person',
startIndex: 3,
endIndex: 4,
text: 'Nguyen Hien',
properties: {
personId: 'person-1',
name: 'Nguyen Hien',
email: 'hien@example.com',
},
},
{
type: 'date',
startIndex: 40,
endIndex: 41,
text: '2026/05/08',
properties: {
dateId: 'date-2',
displayText: '2026/05/08',
timestamp: '2026-05-07T15:00:00Z',
},
},
]);
});
it('can scope extraction to a specific tab', () => {
const chips = extractSmartChips(mockDocument, 'tab-1');
expect(chips).toEqual([
{
type: 'person',
startIndex: 1,
endIndex: 2,
text: 'tab@example.com',
properties: {
personId: 'person-tab',
email: 'tab@example.com',
},
},
]);
});
});