format.test.ts•4.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)
})
})