Skip to main content
Glama

Spreadsheet MCP Server

by HosakaKeigo
format.test.ts4.61 kB
/** * フォーマット関数のテスト */ import { describe, it, expect } from 'vitest' import { formatSpreadsheetInfo, formatSheetData } from '../../src/utils/format.js' import { SpreadsheetInfo, SheetData } from '../../src/api/types.js' describe('formatSpreadsheetInfo', () => { it('正しくスプレッドシート情報をフォーマットする', () => { // テスト用データ const info: SpreadsheetInfo = { id: 'test123', name: 'テストスプレッドシート', url: 'https://docs.google.com/spreadsheets/d/test123', lastModified: '2024-04-01T12:00:00Z', sheets: [ { id: 1, name: 'シート1', index: 0, rowCount: 10, columnCount: 5 }, { id: 2, name: 'シート2', index: 1, rowCount: 20, columnCount: 8 } ] } // 関数実行 const result = formatSpreadsheetInfo(info) // 検証 expect(result).toContain('# スプレッドシート情報') expect(result).toContain('名前: テストスプレッドシート') expect(result).toContain('ID: test123') expect(result).toContain('URL: https://docs.google.com/spreadsheets/d/test123') expect(result).toContain('- シート1 (10行 x 5列)') expect(result).toContain('- シート2 (20行 x 8列)') expect(result).toContain('スプレッドシートには 2 個のシートがあります') }) it('シートが空の場合も正しく処理する', () => { // テスト用データ - シートなし const info: SpreadsheetInfo = { id: 'empty456', name: '空のスプレッドシート', url: 'https://docs.google.com/spreadsheets/d/empty456', lastModified: '2024-04-01T12:00:00Z', sheets: [] } // 関数実行 const result = formatSpreadsheetInfo(info) // 検証 expect(result).toContain('名前: 空のスプレッドシート') expect(result).toContain('スプレッドシートには 0 個のシートがあります') }) }) describe('formatSheetData', () => { it('正しくシートデータをテーブル形式にフォーマットする', () => { // テスト用データ const data: SheetData = [ ['名前', '年齢', '職業'], ['山田', 28, '技術者'], ['鈴木', 34, '営業'], ['佐藤', 45, '管理職'] ] // 関数実行 const result = formatSheetData(data, 'テストシート', 'テストスプレッドシート') // 検証 expect(result).toContain('# テストスプレッドシート / テストシート') expect(result).toContain('3行のデータ') expect(result).toContain('| 名前 | 年齢 | 職業 |') expect(result).toContain('| --- | --- | --- |') expect(result).toContain('| 山田 | 28 | 技術者 |') expect(result).toContain('| 鈴木 | 34 | 営業 |') expect(result).toContain('| 佐藤 | 45 | 管理職 |') }) it('nullやboolean値を含むデータも正しくフォーマットする', () => { // テスト用データ - 多様な型 const data: SheetData = [ ['項目', '完了', '詳細', '数値'], ['タスク1', true, null, 100], ['タスク2', false, '保留中', 0] ] // 関数実行 const result = formatSheetData(data, 'タスク', 'プロジェクト管理') // 検証 expect(result).toContain('| 項目 | 完了 | 詳細 | 数値 |') expect(result).toContain('| タスク1 | true | | 100 |') expect(result).toContain('| タスク2 | false | 保留中 | 0 |') }) it('空のデータの場合も正しく処理する', () => { // 空のデータ const emptyData: SheetData = [] // 関数実行 const result = formatSheetData(emptyData, '空シート', 'テスト') // 検証 expect(result).toContain('# テスト / 空シート') expect(result).toContain('データなし') expect(result).not.toContain('|') // テーブルが生成されていないことを確認 }) it('ヘッダーのみのデータも正しく処理する', () => { // ヘッダーのみのデータ const headerOnlyData: SheetData = [ ['列1', '列2', '列3'] ] // 関数実行 const result = formatSheetData(headerOnlyData, 'ヘッダーのみ', 'テスト') // 検証 expect(result).toContain('# テスト / ヘッダーのみ') expect(result).toContain('データなし') expect(result).toContain('| 列1 | 列2 | 列3 |') expect(result).toContain('| --- | --- | --- |') // データ行がないことを確認 expect(result.split('\n').filter(line => line.startsWith('|')).length).toBe(2) }) })

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HosakaKeigo/spreadsheet-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server