mirror of
https://github.com/langgenius/dify.git
synced 2026-05-11 23:18:39 +08:00
Signed-off-by: majiayu000 <1835304752@qq.com> Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com> Signed-off-by: -LAN- <laipz8200@outlook.com> Signed-off-by: yihong0618 <zouzou0208@gmail.com> Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com> Co-authored-by: 盐粒 Yanli <yanli@dify.ai> Co-authored-by: wangxiaolei <fatelei@gmail.com> Co-authored-by: Stephen Zhou <38493346+hyoban@users.noreply.github.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Cursx <33718736+Cursx@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: lif <1835304752@qq.com> Co-authored-by: 非法操作 <hjlarry@163.com> Co-authored-by: Asuka Minato <i@asukaminato.eu.org> Co-authored-by: fenglin <790872612@qq.com> Co-authored-by: qiaofenglin <qiaofenglin@baidu.com> Co-authored-by: -LAN- <laipz8200@outlook.com> Co-authored-by: TomoOkuyama <49631611+TomoOkuyama@users.noreply.github.com> Co-authored-by: Tomo Okuyama <tomo.okuyama@intersystems.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: zyssyz123 <916125788@qq.com> Co-authored-by: hj24 <mambahj24@gmail.com> Co-authored-by: Coding On Star <447357187@qq.com> Co-authored-by: CodingOnStar <hanxujiang@dify.ai> Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com> Co-authored-by: Xiangxuan Qu <fghpdf@outlook.com> Co-authored-by: fghpdf <fghpdf@users.noreply.github.com> Co-authored-by: coopercoder <whitetiger0127@163.com> Co-authored-by: zhaiguangpeng <zhaiguangpeng@didiglobal.com> Co-authored-by: Junyan Qin (Chin) <rockchinq@gmail.com> Co-authored-by: E.G <146701565+GlobalStar117@users.noreply.github.com> Co-authored-by: GlobalStar117 <GlobalStar117@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: CodingOnStar <hanxujiang@dify.com> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> Co-authored-by: heyszt <270985384@qq.com> Co-authored-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com> Co-authored-by: Yeuoly <45712896+Yeuoly@users.noreply.github.com> Co-authored-by: zxhlyh <jasonapring2015@outlook.com> Co-authored-by: moonpanda <chuanzegao@163.com> Co-authored-by: warlocgao <warlocgao@tencent.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: KVOJJJin <jzongcode@gmail.com> Co-authored-by: eux <euxx@users.noreply.github.com> Co-authored-by: bangjiehan <bangjiehan@gmail.com> Co-authored-by: FFXN <31929997+FFXN@users.noreply.github.com> Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com> Co-authored-by: Nie Ronghua <nieronghua@sf-express.com> Co-authored-by: JQSevenMiao <141806521+JQSevenMiao@users.noreply.github.com> Co-authored-by: jiasiqi <jiasiqi3@tal.com> Co-authored-by: Seokrin Taron Sung <sungsjade@gmail.com> Co-authored-by: CrabSAMA <40541269+CrabSAMA@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: yihong <zouzou0208@gmail.com> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com> Co-authored-by: yessenia <yessenia.contact@gmail.com> Co-authored-by: Jax <anobaka@qq.com> Co-authored-by: niveshdandyan <155956228+niveshdandyan@users.noreply.github.com> Co-authored-by: OSS Contributor <oss-contributor@example.com> Co-authored-by: niveshdandyan <niveshdandyan@users.noreply.github.com> Co-authored-by: Sean Kenneth Doherty <Smaster7772@gmail.com>
81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
const loadGetBaseURL = async (isClientValue: boolean) => {
|
|
vi.resetModules()
|
|
vi.doMock('@/utils/client', () => ({ isClient: isClientValue }))
|
|
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
// eslint-disable-next-line next/no-assign-module-variable
|
|
const module = await import('./client')
|
|
warnSpy.mockClear()
|
|
return { getBaseURL: module.getBaseURL, warnSpy }
|
|
}
|
|
|
|
// Scenario: base URL selection and warnings.
|
|
describe('getBaseURL', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
})
|
|
|
|
afterEach(() => {
|
|
vi.restoreAllMocks()
|
|
})
|
|
|
|
// Scenario: client environment uses window origin.
|
|
it('should use window origin when running on the client', async () => {
|
|
// Arrange
|
|
const { origin } = window.location
|
|
const { getBaseURL, warnSpy } = await loadGetBaseURL(true)
|
|
|
|
// Act
|
|
const url = getBaseURL('/api')
|
|
|
|
// Assert
|
|
expect(url.href).toBe(`${origin}/api`)
|
|
expect(warnSpy).not.toHaveBeenCalled()
|
|
})
|
|
|
|
// Scenario: server environment falls back to localhost with warning.
|
|
it('should fall back to localhost and warn on the server', async () => {
|
|
// Arrange
|
|
const { getBaseURL, warnSpy } = await loadGetBaseURL(false)
|
|
|
|
// Act
|
|
const url = getBaseURL('/api')
|
|
|
|
// Assert
|
|
expect(url.href).toBe('http://localhost/api')
|
|
expect(warnSpy).toHaveBeenCalledTimes(1)
|
|
expect(warnSpy).toHaveBeenCalledWith('Using localhost as base URL in server environment, please configure accordingly.')
|
|
})
|
|
|
|
// Scenario: non-http protocols surface warnings.
|
|
it('should warn when protocol is not http or https', async () => {
|
|
// Arrange
|
|
const { getBaseURL, warnSpy } = await loadGetBaseURL(true)
|
|
|
|
// Act
|
|
const url = getBaseURL('localhost:5001/console/api')
|
|
|
|
// Assert
|
|
expect(url.protocol).toBe('localhost:')
|
|
expect(url.href).toBe('localhost:5001/console/api')
|
|
expect(warnSpy).toHaveBeenCalledTimes(1)
|
|
expect(warnSpy).toHaveBeenCalledWith(
|
|
'Unexpected protocol for API requests, expected http or https. Current protocol: localhost:. Please configure accordingly.',
|
|
)
|
|
})
|
|
|
|
// Scenario: absolute http URLs are preserved.
|
|
it('should keep absolute http URLs intact', async () => {
|
|
// Arrange
|
|
const { getBaseURL, warnSpy } = await loadGetBaseURL(true)
|
|
|
|
// Act
|
|
const url = getBaseURL('https://api.example.com/console/api')
|
|
|
|
// Assert
|
|
expect(url.href).toBe('https://api.example.com/console/api')
|
|
expect(warnSpy).not.toHaveBeenCalled()
|
|
})
|
|
})
|