Skip to main content
Glama
index.test.ts6.41 kB
/** * Plugin Settings Extractors Tests * * @package WP_Navigator_Pro * @since 2.1.0 */ import { describe, it, expect } from 'vitest'; import { getExtractor, getSupportedPlugins, hasSpecificExtractor, woocommerceExtractor, yoastExtractor, rankmathExtractor, createGenericExtractor, } from './index.js'; describe('Plugin Extractors Registry', () => { describe('getSupportedPlugins', () => { it('returns list of plugins with specific extractors', () => { const supported = getSupportedPlugins(); expect(supported).toContain('woocommerce'); expect(supported).toContain('wordpress-seo'); expect(supported).toContain('seo-by-rank-math'); }); }); describe('hasSpecificExtractor', () => { it('returns true for supported plugins', () => { expect(hasSpecificExtractor('woocommerce')).toBe(true); expect(hasSpecificExtractor('wordpress-seo')).toBe(true); expect(hasSpecificExtractor('seo-by-rank-math')).toBe(true); }); it('returns true for slug aliases', () => { expect(hasSpecificExtractor('yoast-seo')).toBe(true); expect(hasSpecificExtractor('rankmath')).toBe(true); }); it('returns false for unknown plugins', () => { expect(hasSpecificExtractor('unknown-plugin')).toBe(false); expect(hasSpecificExtractor('my-custom-plugin')).toBe(false); }); }); describe('getExtractor', () => { it('returns WooCommerce extractor for woocommerce slug', () => { const { extractor, isGeneric } = getExtractor('woocommerce'); expect(isGeneric).toBe(false); expect(extractor.slug).toBe('woocommerce'); expect(extractor.displayName).toBe('WooCommerce'); }); it('returns Yoast extractor for yoast-seo alias', () => { const { extractor, isGeneric } = getExtractor('yoast-seo'); expect(isGeneric).toBe(false); expect(extractor.slug).toBe('wordpress-seo'); expect(extractor.displayName).toBe('Yoast SEO'); }); it('returns generic extractor for unknown plugins', () => { const { extractor, isGeneric } = getExtractor('my-plugin', 'My Plugin'); expect(isGeneric).toBe(true); expect(extractor.slug).toBe('my-plugin'); expect(extractor.displayName).toBe('My Plugin'); expect(extractor.optionPrefixes).toContain('my_plugin_'); }); }); }); describe('WooCommerce Extractor', () => { it('has correct metadata', () => { expect(woocommerceExtractor.slug).toBe('woocommerce'); expect(woocommerceExtractor.displayName).toBe('WooCommerce'); expect(woocommerceExtractor.optionPrefixes).toContain('woocommerce_'); }); it('extracts core WooCommerce options', () => { const options = { woocommerce_currency: 'USD', woocommerce_default_country: 'US:CA', woocommerce_calc_taxes: 'yes', woocommerce_api_secret: 'should-be-excluded', // Not in core options }; const result = woocommerceExtractor.extract(options); expect(result.woocommerce_currency).toBe('USD'); expect(result.woocommerce_default_country).toBe('US:CA'); expect(result.woocommerce_calc_taxes).toBe('yes'); expect(result.woocommerce_api_secret).toBeUndefined(); }); it('shouldInclude filters to core options', () => { expect(woocommerceExtractor.shouldInclude?.('woocommerce_currency')).toBe(true); expect(woocommerceExtractor.shouldInclude?.('woocommerce_random')).toBe(false); }); }); describe('Yoast Extractor', () => { it('has correct metadata', () => { expect(yoastExtractor.slug).toBe('wordpress-seo'); expect(yoastExtractor.displayName).toBe('Yoast SEO'); expect(yoastExtractor.optionPrefixes).toContain('wpseo_'); }); it('extracts Yoast SEO options', () => { const options = { wpseo: { version: '21.0' }, wpseo_titles: { title: 'Site Title' }, wpseo_license: { key: 'xxx' }, // Should be excluded }; const result = yoastExtractor.extract(options); expect(result.wpseo).toEqual({ version: '21.0' }); expect(result.wpseo_titles).toEqual({ title: 'Site Title' }); expect(result.wpseo_license).toBeUndefined(); }); }); describe('RankMath Extractor', () => { it('has correct metadata', () => { expect(rankmathExtractor.slug).toBe('seo-by-rank-math'); expect(rankmathExtractor.displayName).toBe('RankMath SEO'); expect(rankmathExtractor.optionPrefixes).toContain('rank_math_'); }); it('extracts RankMath options', () => { const options = { rank_math_options_general: { version: '1.0' }, rank_math_connect_data: { api: 'xxx' }, // Should be excluded }; const result = rankmathExtractor.extract(options); expect(result.rank_math_options_general).toEqual({ version: '1.0' }); expect(result.rank_math_connect_data).toBeUndefined(); }); }); describe('Generic Extractor', () => { it('creates extractor with default prefix from slug', () => { const extractor = createGenericExtractor('my-plugin', 'My Plugin'); expect(extractor.slug).toBe('my-plugin'); expect(extractor.optionPrefixes).toContain('my_plugin_'); }); it('creates extractor with custom prefixes', () => { const extractor = createGenericExtractor('custom', 'Custom', ['custom_', 'cust_']); expect(extractor.optionPrefixes).toContain('custom_'); expect(extractor.optionPrefixes).toContain('cust_'); }); it('extracts options matching prefix', () => { const extractor = createGenericExtractor('test', 'Test'); const options = { test_setting_1: 'value1', test_setting_2: 'value2', other_setting: 'other', // Should not be included }; const result = extractor.extract(options); expect(result.test_setting_1).toBe('value1'); expect(result.test_setting_2).toBe('value2'); expect(result.other_setting).toBeUndefined(); }); it('excludes sensitive options', () => { const extractor = createGenericExtractor('test', 'Test'); const options = { test_api_key: 'secret', test_secret_key: 'secret', test_password: 'secret', test_license: 'secret', test_normal: 'value', }; const result = extractor.extract(options); expect(result.test_api_key).toBeUndefined(); expect(result.test_secret_key).toBeUndefined(); expect(result.test_password).toBeUndefined(); expect(result.test_license).toBeUndefined(); expect(result.test_normal).toBe('value'); }); });

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