Skip to main content
Glama
elementor.test.ts5.27 kB
/** * Tests for Elementor Builder Adapter (Stub) * * @package WP_Navigator_MCP */ import { describe, it, expect } from 'vitest'; import { ElementorAdapter, elementorAdapter } from './elementor.js'; import type { PageData } from './types.js'; /** * Create mock page data for testing */ function createPageData(content: string, meta?: Record<string, unknown>): PageData { return { id: 1, slug: 'test-page', title: { rendered: 'Test Page' }, content: { rendered: content, raw: content }, status: 'publish', meta, }; } describe('ElementorAdapter', () => { describe('properties', () => { it('should have correct identification', () => { const adapter = new ElementorAdapter(); expect(adapter.name).toBe('elementor'); expect(adapter.displayName).toBe('Elementor'); expect(adapter.supported).toBe(false); }); it('should have version info', () => { const adapter = new ElementorAdapter(); expect(adapter.version.adapter).toBe('0.1.0'); expect(adapter.version.minBuilderVersion).toBe('3.0.0'); }); it('should declare limited capabilities', () => { const adapter = new ElementorAdapter(); expect(adapter.capabilities.canExtract).toBe(false); expect(adapter.capabilities.canApply).toBe(false); expect(adapter.capabilities.canDetect).toBe(true); expect(adapter.capabilities.supportedElements).toHaveLength(0); }); }); describe('detect', () => { it('should detect Elementor content by meta', () => { const page = createPageData('<div>content</div>', { _elementor_edit_mode: 'builder', }); const result = elementorAdapter.detect(page); expect(result.detected).toBe(true); expect(result.confidence).toBeGreaterThan(0.5); expect(result.method).toBe('meta'); }); it('should detect Elementor content by CSS classes', () => { const content = '<div class="elementor-widget-container">Widget content</div>'; const page = createPageData(content); const result = elementorAdapter.detect(page); expect(result.detected).toBe(true); expect(result.confidence).toBeGreaterThan(0); }); it('should detect Elementor content by data attributes', () => { const content = '<div data-elementor-type="wp-page" data-elementor-id="123">content</div>'; const page = createPageData(content); const result = elementorAdapter.detect(page); expect(result.detected).toBe(true); }); it('should detect e-con (Elementor Container) classes', () => { const content = '<div class="e-con-inner">Container content</div>'; const page = createPageData(content); const result = elementorAdapter.detect(page); expect(result.detected).toBe(true); }); it('should not detect non-Elementor content', () => { const content = '<p>Plain HTML without Elementor</p>'; const page = createPageData(content); const result = elementorAdapter.detect(page); expect(result.detected).toBe(false); expect(result.confidence).toBe(0); }); it('should not crash on empty content', () => { const page = createPageData(''); const result = elementorAdapter.detect(page); expect(result.detected).toBe(false); expect(result.confidence).toBe(0); }); it('should include helpful message when detected', () => { const page = createPageData('<div class="elementor-element">content</div>'); const result = elementorAdapter.detect(page); expect(result.details?.message).toContain('coming in v2'); }); }); describe('extractLayout', () => { it('should return not supported result', () => { const page = createPageData('<div class="elementor-widget">content</div>'); const result = elementorAdapter.extractLayout(page); expect(result.success).toBe(false); expect(result.warnings).toHaveLength(1); expect(result.warnings[0].code).toBe('BUILDER_NOT_SUPPORTED'); expect(result.warnings[0].message).toContain('Elementor'); expect(result.warnings[0].message).toContain('v2.0'); }); it('should return empty elements array', () => { const page = createPageData('<div class="elementor-widget">content</div>'); const result = elementorAdapter.extractLayout(page); expect(result.data.elements).toHaveLength(0); expect(result.data.source.builder).toBe('elementor'); }); }); describe('extractLayoutFromContent', () => { it('should return not supported result', () => { const result = elementorAdapter.extractLayoutFromContent('<div class="elementor">content</div>'); expect(result.success).toBe(false); expect(result.warnings[0].code).toBe('BUILDER_NOT_SUPPORTED'); }); }); describe('applyLayout', () => { it('should return not supported result', () => { const layout = { layout_version: '1.0' as const, source: { builder: 'gutenberg', formatVersion: '1.0' }, elements: [], }; const result = elementorAdapter.applyLayout(layout); expect(result.success).toBe(false); expect(result.data).toBe(''); expect(result.warnings[0].code).toBe('BUILDER_NOT_SUPPORTED'); }); }); });

Latest Blog Posts

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/littlebearapps/wp-navigator-mcp'

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