Skip to content

Commit 7d982b3

Browse files
author
Fix Bot
committed
fix: address PR #593 review feedback
1. Export buildAuthHeadersForPreset and add direct tests for: - WEB_AUTH_HEADER="" explicit opt-out behavior - WEB_AUTH_SCHEME="" stripping scheme prefix - Preset defaults (authHeader + authScheme) - No WEB_KEY returns empty headers 2. Add duckduckgo.test.ts verifying SafeSearchType.STRICT === 0, confirming the enum change is semantically identical to the previous raw value. Addresses review by @Vasanthdev2004 at pullrequestreview-4093533095
1 parent 5824d96 commit 7d982b3

3 files changed

Lines changed: 72 additions & 3 deletions

File tree

src/tools/WebSearchTool/providers/custom.test.ts

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, test, beforeEach, afterEach } from 'bun:test'
2-
import { extractHits } from './custom.js'
2+
import { extractHits, customProvider } from './custom.js'
33

44
// ---------------------------------------------------------------------------
55
// extractHits — flexible response parsing
@@ -117,7 +117,61 @@ describe('buildAuthHeadersForPreset auth header behavior', () => {
117117
delete process.env.WEB_URL_TEMPLATE
118118
delete process.env.WEB_SEARCH_API
119119
delete process.env.WEB_PROVIDER
120-
const { customProvider } = require('./custom.js')
121120
expect(customProvider.isConfigured()).toBe(false)
122121
})
123122
})
123+
124+
// ---------------------------------------------------------------------------
125+
// buildAuthHeadersForPreset — direct tests for WEB_AUTH_HEADER / WEB_AUTH_SCHEME
126+
// ---------------------------------------------------------------------------
127+
128+
describe('buildAuthHeadersForPreset direct assertions', () => {
129+
const savedEnv: Record<string, string | undefined> = {}
130+
131+
beforeEach(() => {
132+
for (const k of ['WEB_KEY', 'WEB_AUTH_HEADER', 'WEB_AUTH_SCHEME']) {
133+
savedEnv[k] = process.env[k]
134+
}
135+
})
136+
137+
afterEach(() => {
138+
for (const [k, v] of Object.entries(savedEnv)) {
139+
if (v === undefined) delete process.env[k]
140+
else process.env[k] = v
141+
}
142+
})
143+
144+
test('WEB_AUTH_HEADER="" is an explicit opt-out — returns empty headers even with WEB_KEY set', () => {
145+
process.env.WEB_KEY = 'sk-test-123'
146+
process.env.WEB_AUTH_HEADER = ''
147+
const { buildAuthHeadersForPreset } = require('./custom.js')
148+
expect(buildAuthHeadersForPreset({ urlTemplate: '', queryParam: 'q', authHeader: 'Authorization' })).toEqual({})
149+
})
150+
151+
test('WEB_AUTH_SCHEME="" strips the scheme prefix (bare key only)', () => {
152+
process.env.WEB_KEY = 'sk-test-123'
153+
process.env.WEB_AUTH_SCHEME = ''
154+
delete process.env.WEB_AUTH_HEADER
155+
const { buildAuthHeadersForPreset } = require('./custom.js')
156+
const result = buildAuthHeadersForPreset({ urlTemplate: '', queryParam: 'q', authHeader: 'X-Api-Key' })
157+
// scheme is '' so the header value should be just the key (trimmed)
158+
expect(result).toEqual({ 'X-Api-Key': 'sk-test-123' })
159+
})
160+
161+
test('uses preset authHeader and authScheme when no env overrides', () => {
162+
process.env.WEB_KEY = 'tok-abc'
163+
delete process.env.WEB_AUTH_HEADER
164+
delete process.env.WEB_AUTH_SCHEME
165+
const { buildAuthHeadersForPreset } = require('./custom.js')
166+
const result = buildAuthHeadersForPreset({ urlTemplate: '', queryParam: 'q', authHeader: 'Authorization', authScheme: 'Bearer' })
167+
expect(result).toEqual({ 'Authorization': 'Bearer tok-abc' })
168+
})
169+
170+
test('returns empty when WEB_KEY is not set', () => {
171+
delete process.env.WEB_KEY
172+
delete process.env.WEB_AUTH_HEADER
173+
delete process.env.WEB_AUTH_SCHEME
174+
const { buildAuthHeadersForPreset } = require('./custom.js')
175+
expect(buildAuthHeadersForPreset({ urlTemplate: '', queryParam: 'q', authHeader: 'Authorization' })).toEqual({})
176+
})
177+
})

src/tools/WebSearchTool/providers/custom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ function auditLogCustomSearch(url: string): void {
221221
// Auth — preset overrides for built-in providers
222222
// ---------------------------------------------------------------------------
223223

224-
function buildAuthHeadersForPreset(preset?: ProviderPreset): Record<string, string> {
224+
export function buildAuthHeadersForPreset(preset?: ProviderPreset): Record<string, string> {
225225
const apiKey = process.env.WEB_KEY
226226
if (!apiKey) return {}
227227

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { describe, expect, test } from 'bun:test'
2+
3+
describe('DuckDuckGo SafeSearchType', () => {
4+
test('SafeSearchType.STRICT === 0 (matches previous raw value)', async () => {
5+
const { SafeSearchType } = await import('duck-duck-scrape')
6+
expect(SafeSearchType.STRICT).toBe(0)
7+
})
8+
9+
test('SafeSearchType enum values are sane', async () => {
10+
const { SafeSearchType } = await import('duck-duck-scrape')
11+
expect(SafeSearchType.STRICT).toBe(0)
12+
expect(SafeSearchType.MODERATE).toBe(-1)
13+
expect(SafeSearchType.OFF).toBe(-2)
14+
})
15+
})

0 commit comments

Comments
 (0)