Skip to main content
Glama

Spreadsheet MCP Server

by HosakaKeigo
spreadsheet.test.ts1.99 kB
/** * スプレッドシートAPI関数のテスト */ import { describe, it, expect } from 'vitest' import { extractSpreadsheetId } from '../../src/api/spreadsheet.js' describe('extractSpreadsheetId', () => { it('標準的なGoogleスプレッドシートURLからIDを正しく抽出する', () => { const url = 'https://docs.google.com/spreadsheets/d/1a2b3c4d5e6f7g8h9i0j/edit#gid=0' const result = extractSpreadsheetId(url) expect(result).toBe('1a2b3c4d5e6f7g8h9i0j') }) it('編集権限のあるURLからIDを正しく抽出する', () => { const url = 'https://docs.google.com/spreadsheets/d/1a2b3c4d5e6f7g8h9i0j/edit?usp=sharing' const result = extractSpreadsheetId(url) expect(result).toBe('1a2b3c4d5e6f7g8h9i0j') }) it('モバイル用URLからIDを正しく抽出する', () => { const url = 'https://docs.google.com/spreadsheets/d/1a2b3c4d5e6f7g8h9i0j/mobilebasic' const result = extractSpreadsheetId(url) expect(result).toBe('1a2b3c4d5e6f7g8h9i0j') }) it('モック用の特殊URLも処理する', () => { // 'budget'を含むURL expect(extractSpreadsheetId('https://some-url.com/budget')).toBe('mock_budget') expect(extractSpreadsheetId('budget-data')).toBe('mock_budget') // 'project'を含むURL expect(extractSpreadsheetId('https://example.com/project')).toBe('mock_project') expect(extractSpreadsheetId('project-planning')).toBe('mock_project') }) it('無効なURLの場合はnullを返す', () => { expect(extractSpreadsheetId('https://example.com')).toBeNull() expect(extractSpreadsheetId('')).toBeNull() expect(extractSpreadsheetId('invalid-url')).toBeNull() }) it('nullまたはundefinedの入力に対してnullを返す', () => { // @ts-ignore: テスト用に型チェックを無視 expect(extractSpreadsheetId(null)).toBeNull() // @ts-ignore: テスト用に型チェックを無視 expect(extractSpreadsheetId(undefined)).toBeNull() }) })

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