UNPKG

n8n-nodes-duckduckgo-search

Version:

Integrate DuckDuckGo search seamlessly into your n8n workflows with advanced pagination and human-like behavior. Get more results without hitting rate limits.

186 lines (185 loc) 7.64 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const DuckDuckGo_node_1 = require("../DuckDuckGo.node"); const duckDuckScrape = __importStar(require("duck-duck-scrape")); jest.mock('duck-duck-scrape', () => ({ search: jest.fn(), searchNews: jest.fn(), searchImages: jest.fn(), searchVideos: jest.fn(), })); describe('DuckDuckGo Node - Locale Support', () => { let duckDuckGoNode; let mockExecuteFunction; let mockGetNodeParameter; beforeEach(() => { duckDuckGoNode = new DuckDuckGo_node_1.DuckDuckGo(); mockGetNodeParameter = jest.fn(); mockExecuteFunction = { getInputData: jest.fn().mockReturnValue([{ json: {} }]), getNodeParameter: mockGetNodeParameter, getNode: jest.fn().mockReturnValue({ name: 'DuckDuckGo', type: 'n8n-nodes-base.duckDuckGo', typeVersion: 1 }), helpers: { returnJsonArray: jest.fn(), }, continueOnFail: jest.fn().mockReturnValue(false), }; jest.clearAllMocks(); }); describe('Locale Parameter', () => { it('should use global locale when region is not specified', async () => { mockGetNodeParameter .mockImplementation((parameter, _itemIndex, fallback) => { switch (parameter) { case 'operation': return 'search'; case 'query': return 'test query'; case 'locale': return 'fr-fr'; case 'webSearchOptions': return { maxResults: 10, safeSearch: 1, }; case 'debugMode': return false; case 'errorHandling': return 'continueOnFail'; case 'cacheSettings': return { enableCache: false, }; default: return fallback; } }); await duckDuckGoNode.execute.call(mockExecuteFunction); expect(duckDuckScrape.search).toHaveBeenCalledWith('test query', expect.objectContaining({ locale: 'fr-fr', })); }); it('should prioritize region-specific setting over global locale', async () => { mockGetNodeParameter .mockImplementation((parameter, _itemIndex, fallback) => { switch (parameter) { case 'operation': return 'search'; case 'query': return 'test query'; case 'locale': return 'fr-fr'; case 'webSearchOptions': return { maxResults: 10, region: 'de-de', safeSearch: 1, }; case 'debugMode': return false; case 'errorHandling': return 'continueOnFail'; case 'cacheSettings': return { enableCache: false, }; default: return fallback; } }); await duckDuckGoNode.execute.call(mockExecuteFunction); expect(duckDuckScrape.search).toHaveBeenCalledWith('test query', expect.objectContaining({ locale: 'de-de', })); }); it('should work with different search types', async () => { mockGetNodeParameter .mockImplementation((parameter, _itemIndex, fallback) => { switch (parameter) { case 'operation': return 'searchImages'; case 'imageQuery': return 'test image query'; case 'locale': return 'es-es'; case 'imageSearchOptions': return { maxResults: 10, safeSearch: 1, }; case 'debugMode': return false; case 'errorHandling': return 'continueOnFail'; case 'cacheSettings': return { enableCache: false, }; default: return fallback; } }); await duckDuckGoNode.execute.call(mockExecuteFunction); expect(duckDuckScrape.searchImages).toHaveBeenCalledWith('test image query', expect.objectContaining({ locale: 'es-es', })); }); it('should use default locale when neither global nor region is specified', async () => { mockGetNodeParameter .mockImplementation((parameter, _itemIndex, fallback) => { switch (parameter) { case 'operation': return 'search'; case 'query': return 'test query'; case 'webSearchOptions': return { maxResults: 10, safeSearch: 1, }; case 'debugMode': return false; case 'errorHandling': return 'continueOnFail'; case 'cacheSettings': return { enableCache: false, }; default: return fallback; } }); await duckDuckGoNode.execute.call(mockExecuteFunction); expect(duckDuckScrape.search).toHaveBeenCalledWith('test query', expect.objectContaining({ locale: 'en-us', })); }); }); });