import { describe, it, expect, vi } from 'vitest';
import { validateToolParameters, ToolParameterSchemas } from '../../src/utils/validation.js';
describe('Validation Utils', () => {
describe('validateToolParameters', () => {
it('should validate database query parameters', () => {
const validParams = {
database_id: 'test-db-id',
page_size: 10,
start_cursor: 'cursor-123',
};
const result = validateToolParameters(ToolParameterSchemas.databaseQuery, validParams);
expect(result.success).toBe(true);
if (result.success) {
expect(result.data).toEqual(validParams);
}
});
it('should reject invalid database query parameters', () => {
const invalidParams = {
database_id: '',
page_size: 0,
};
const result = validateToolParameters(ToolParameterSchemas.databaseQuery, invalidParams);
expect(result.success).toBe(false);
if (!result.success) {
expect(result.error).toContain('database_id: Database ID is required');
expect(result.error).toContain('page_size: Number must be greater than or equal to 1');
}
});
it('should validate page creation parameters', () => {
const validParams = {
parent: {
database_id: 'test-db-id',
},
properties: {
title: {
title: [{ text: { content: 'Test Page' } }],
},
},
};
const result = validateToolParameters(ToolParameterSchemas.createPage, validParams);
expect(result.success).toBe(true);
});
it('should reject page creation without parent', () => {
const invalidParams = {
properties: {
title: {
title: [{ text: { content: 'Test Page' } }],
},
},
};
const result = validateToolParameters(ToolParameterSchemas.createPage, invalidParams);
expect(result.success).toBe(false);
if (!result.success) {
expect(result.error).toContain('parent: Required');
}
});
it('should validate search parameters', () => {
const validParams = {
query: 'test search',
page_size: 50,
};
const result = validateToolParameters(ToolParameterSchemas.search, validParams);
expect(result.success).toBe(true);
});
it('should reject search without query', () => {
const invalidParams = {
page_size: 50,
};
const result = validateToolParameters(ToolParameterSchemas.search, invalidParams);
expect(result.success).toBe(false);
if (!result.success) {
expect(result.error).toContain('query: Required');
}
});
it('should validate pagination parameters', () => {
const validParams = {
page_size: 25,
start_cursor: 'cursor-123',
};
const result = validateToolParameters(ToolParameterSchemas.pagination, validParams);
expect(result.success).toBe(true);
});
it('should reject invalid page size', () => {
const invalidParams = {
page_size: 150,
};
const result = validateToolParameters(ToolParameterSchemas.pagination, invalidParams);
expect(result.success).toBe(false);
if (!result.success) {
expect(result.error).toContain('page_size: Number must be less than or equal to 100');
}
});
});
});