spreadsheet.test.ts•1.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()
})
})