onItemClick(items[0].credentials[0])}>
diff --git a/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/authorized-item.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/__tests__/authorized-item.spec.tsx
similarity index 95%
rename from web/app/components/header/account-setting/model-provider-page/model-auth/authorized/authorized-item.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-auth/authorized/__tests__/authorized-item.spec.tsx
index 1445c9e212..57e80fa989 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/authorized-item.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/__tests__/authorized-item.spec.tsx
@@ -1,13 +1,13 @@
-import type { Credential, CustomModelCredential, ModelProvider } from '../../declarations'
+import type { Credential, CustomModelCredential, ModelProvider } from '../../../declarations'
import { render, screen } from '@testing-library/react'
-import { ModelTypeEnum } from '../../declarations'
-import { AuthorizedItem } from './authorized-item'
+import { ModelTypeEnum } from '../../../declarations'
+import { AuthorizedItem } from '../authorized-item'
-vi.mock('../../model-icon', () => ({
+vi.mock('../../../model-icon', () => ({
default: ({ modelName }: { modelName: string }) =>
{modelName}
,
}))
-vi.mock('./credential-item', () => ({
+vi.mock('../credential-item', () => ({
default: ({ credential, onEdit, onDelete, onItemClick }: {
credential: Credential
onEdit?: (credential: Credential) => void
diff --git a/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/credential-item.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/__tests__/credential-item.spec.tsx
similarity index 97%
rename from web/app/components/header/account-setting/model-provider-page/model-auth/authorized/credential-item.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-auth/authorized/__tests__/credential-item.spec.tsx
index 115ae98d76..1083b17c28 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/credential-item.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/__tests__/credential-item.spec.tsx
@@ -1,6 +1,6 @@
-import type { Credential } from '../../declarations'
+import type { Credential } from '../../../declarations'
import { fireEvent, render, screen } from '@testing-library/react'
-import CredentialItem from './credential-item'
+import CredentialItem from '../credential-item'
vi.mock('@remixicon/react', () => ({
RiCheckLine: () =>
,
diff --git a/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/index.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/__tests__/index.spec.tsx
similarity index 96%
rename from web/app/components/header/account-setting/model-provider-page/model-auth/authorized/index.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-auth/authorized/__tests__/index.spec.tsx
index 7147bf058e..17597fa343 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/index.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-auth/authorized/__tests__/index.spec.tsx
@@ -1,7 +1,7 @@
-import type { Credential, CustomModel, ModelProvider } from '../../declarations'
+import type { Credential, CustomModel, ModelProvider } from '../../../declarations'
import { fireEvent, render, screen } from '@testing-library/react'
-import { ConfigurationMethodEnum, ModelTypeEnum } from '../../declarations'
-import Authorized from './index'
+import { ConfigurationMethodEnum, ModelTypeEnum } from '../../../declarations'
+import Authorized from '../index'
const mockHandleOpenModal = vi.fn()
const mockHandleActiveCredential = vi.fn()
@@ -12,7 +12,7 @@ const mockHandleConfirmDelete = vi.fn()
let mockDeleteCredentialId: string | null = null
let mockDoingAction = false
-vi.mock('../hooks', () => ({
+vi.mock('../../hooks', () => ({
useAuth: () => ({
openConfirmDelete: mockOpenConfirmDelete,
closeConfirmDelete: mockCloseConfirmDelete,
@@ -24,7 +24,7 @@ vi.mock('../hooks', () => ({
}),
}))
-vi.mock('./authorized-item', () => ({
+vi.mock('../authorized-item', () => ({
default: ({ credentials, model, onEdit, onDelete, onItemClick }: {
credentials: Credential[]
model?: CustomModel
diff --git a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-auth-service..spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-auth-service.spec.tsx
similarity index 96%
rename from web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-auth-service..spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-auth-service.spec.tsx
index b9f76d1c3f..bd4f857047 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-auth-service..spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-auth-service.spec.tsx
@@ -1,8 +1,8 @@
-import type { CustomModel } from '../../declarations'
+import type { CustomModel } from '../../../declarations'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { renderHook } from '@testing-library/react'
-import { ModelTypeEnum } from '../../declarations'
-import { useAuthService, useGetCredential } from './use-auth-service'
+import { ModelTypeEnum } from '../../../declarations'
+import { useAuthService, useGetCredential } from '../use-auth-service'
vi.mock('@/service/use-models', () => ({
useGetProviderCredential: vi.fn(),
diff --git a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-auth.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-auth.spec.tsx
similarity index 98%
rename from web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-auth.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-auth.spec.tsx
index 454cbfbfa6..7da7b424db 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-auth.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-auth.spec.tsx
@@ -3,11 +3,11 @@ import type {
Credential,
CustomModel,
ModelProvider,
-} from '../../declarations'
+} from '../../../declarations'
import { act, renderHook } from '@testing-library/react'
import { ToastContext } from '@/app/components/base/toast/context'
-import { ConfigurationMethodEnum, ModelModalModeEnum, ModelTypeEnum } from '../../declarations'
-import { useAuth } from './use-auth'
+import { ConfigurationMethodEnum, ModelModalModeEnum, ModelTypeEnum } from '../../../declarations'
+import { useAuth } from '../use-auth'
const mockNotify = vi.fn()
const mockHandleRefreshModel = vi.fn()
@@ -39,7 +39,7 @@ vi.mock('@/service/use-models', () => ({
useDeleteModel: () => ({ mutateAsync: mockDeleteModelService }),
}))
-vi.mock('./use-auth-service', () => ({
+vi.mock('../use-auth-service', () => ({
useAuthService: () => ({
getDeleteCredentialService: (isModel: boolean) => (isModel ? mockDeleteModelCredential : mockDeleteProviderCredential),
getActiveCredentialService: (isModel: boolean) => (isModel ? mockActiveModelCredential : mockActiveProviderCredential),
diff --git a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-credential-data.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-credential-data.spec.tsx
similarity index 93%
rename from web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-credential-data.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-credential-data.spec.tsx
index 0a61834dd0..0ab32ddddb 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-credential-data.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-credential-data.spec.tsx
@@ -1,13 +1,13 @@
-import type { Credential, CustomModelCredential, ModelProvider } from '../../declarations'
+import type { Credential, CustomModelCredential, ModelProvider } from '../../../declarations'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { renderHook } from '@testing-library/react'
-import { useCredentialData } from './use-credential-data'
+import { useCredentialData } from '../use-credential-data'
-vi.mock('./use-auth-service', () => ({
+vi.mock('../use-auth-service', () => ({
useGetCredential: vi.fn(),
}))
-const { useGetCredential } = await import('./use-auth-service')
+const { useGetCredential } = await import('../use-auth-service')
describe('useCredentialData', () => {
let queryClient: QueryClient
diff --git a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-credential-status.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-credential-status.spec.tsx
similarity index 94%
rename from web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-credential-status.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-credential-status.spec.tsx
index c84b452bb2..a58178f21e 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-credential-status.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-credential-status.spec.tsx
@@ -1,6 +1,6 @@
-import type { ModelProvider } from '../../declarations'
+import type { ModelProvider } from '../../../declarations'
import { renderHook } from '@testing-library/react'
-import { useCredentialStatus } from './use-credential-status'
+import { useCredentialStatus } from '../use-credential-status'
describe('useCredentialStatus', () => {
it('computes authorized and authRemoved status correctly', () => {
diff --git a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-custom-models.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-custom-models.spec.tsx
similarity index 91%
rename from web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-custom-models.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-custom-models.spec.tsx
index 5f7e568c51..2b5804c3f1 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-custom-models.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-custom-models.spec.tsx
@@ -1,6 +1,6 @@
-import type { ModelProvider } from '../../declarations'
+import type { ModelProvider } from '../../../declarations'
import { renderHook } from '@testing-library/react'
-import { useCanAddedModels, useCustomModels } from './use-custom-models'
+import { useCanAddedModels, useCustomModels } from '../use-custom-models'
describe('useCustomModels and useCanAddedModels', () => {
it('extracts custom models from provider correctly', () => {
diff --git a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-model-form-schemas.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-model-form-schemas.spec.tsx
similarity index 96%
rename from web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-model-form-schemas.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-model-form-schemas.spec.tsx
index a326b0c1d5..237d99c7e7 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/use-model-form-schemas.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-auth/hooks/__tests__/use-model-form-schemas.spec.tsx
@@ -2,13 +2,13 @@ import type {
Credential,
CustomModelCredential,
ModelProvider,
-} from '../../declarations'
+} from '../../../declarations'
import { renderHook } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { FormTypeEnum } from '@/app/components/base/form/types'
-import { useModelFormSchemas } from './use-model-form-schemas'
+import { useModelFormSchemas } from '../use-model-form-schemas'
-vi.mock('../../utils', () => ({
+vi.mock('../../../utils', () => ({
genModelNameFormSchema: vi.fn(() => ({
type: FormTypeEnum.textInput,
variable: '__model_name',
diff --git a/web/app/components/header/account-setting/model-provider-page/model-badge/index.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-badge/__tests__/index.spec.tsx
similarity index 95%
rename from web/app/components/header/account-setting/model-provider-page/model-badge/index.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-badge/__tests__/index.spec.tsx
index bc68d9a94d..348875e7fe 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-badge/index.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-badge/__tests__/index.spec.tsx
@@ -1,5 +1,5 @@
import { render, screen } from '@testing-library/react'
-import ModelBadge from './index'
+import ModelBadge from '../index'
describe('ModelBadge', () => {
beforeEach(() => {
diff --git a/web/app/components/header/account-setting/model-provider-page/model-icon/index.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-icon/__tests__/index.spec.tsx
similarity index 96%
rename from web/app/components/header/account-setting/model-provider-page/model-icon/index.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-icon/__tests__/index.spec.tsx
index 5a204b5b3b..24cdc438de 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-icon/index.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-icon/__tests__/index.spec.tsx
@@ -1,12 +1,12 @@
-import type { Model } from '../declarations'
+import type { Model } from '../../declarations'
import { render, screen } from '@testing-library/react'
import { Theme } from '@/types/app'
import {
ConfigurationMethodEnum,
ModelStatusEnum,
ModelTypeEnum,
-} from '../declarations'
-import ModelIcon from './index'
+} from '../../declarations'
+import ModelIcon from '../index'
type I18nText = {
en_US: string
@@ -20,7 +20,7 @@ vi.mock('@/hooks/use-theme', () => ({
default: () => ({ theme: mockTheme }),
}))
-vi.mock('../hooks', () => ({
+vi.mock('../../hooks', () => ({
useLanguage: () => mockLanguage,
}))
diff --git a/web/app/components/header/account-setting/model-provider-page/model-modal/Input.test.tsx b/web/app/components/header/account-setting/model-provider-page/model-modal/Input.test.tsx
deleted file mode 100644
index 9772be79b4..0000000000
--- a/web/app/components/header/account-setting/model-provider-page/model-modal/Input.test.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { render } from '@testing-library/react'
-import Input from './Input'
-
-it('Input renders correctly as password type with no autocomplete', () => {
- const { asFragment, getByPlaceholderText } = render(
-
,
- )
- const input = getByPlaceholderText('API Key')
- expect(input).toHaveAttribute('type', 'password')
- expect(input).not.toHaveAttribute('autocomplete')
- expect(asFragment()).toMatchSnapshot()
-})
diff --git a/web/app/components/header/account-setting/model-provider-page/model-modal/__snapshots__/Input.test.tsx.snap b/web/app/components/header/account-setting/model-provider-page/model-modal/__snapshots__/Input.test.tsx.snap
deleted file mode 100644
index 7cf93a68fc..0000000000
--- a/web/app/components/header/account-setting/model-provider-page/model-modal/__snapshots__/Input.test.tsx.snap
+++ /dev/null
@@ -1,24 +0,0 @@
-// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-
-exports[`Input renders correctly as password type with no autocomplete 1`] = `
-
-
-
-
-
-`;
diff --git a/web/app/components/header/account-setting/model-provider-page/model-modal/Form.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-modal/__tests__/Form.spec.tsx
similarity index 98%
rename from web/app/components/header/account-setting/model-provider-page/model-modal/Form.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-modal/__tests__/Form.spec.tsx
index 153f052796..14120ec08c 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-modal/Form.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-modal/__tests__/Form.spec.tsx
@@ -7,11 +7,11 @@ import type {
CredentialFormSchemaSelect,
CredentialFormSchemaTextInput,
FormValue,
-} from '../declarations'
+} from '../../declarations'
import type { NodeOutPutVar } from '@/app/components/workflow/types'
-import { fireEvent, render, screen } from '@testing-library/react'
-import { FormTypeEnum } from '../declarations'
-import Form from './Form'
+import { fireEvent, render, screen, waitFor } from '@testing-library/react'
+import { FormTypeEnum } from '../../declarations'
+import Form from '../Form'
type CustomSchema = Omit
& { type: 'custom-type' }
@@ -23,7 +23,7 @@ const modelSelectorPropsSpy = vi.hoisted(() => vi.fn())
const toolSelectorPropsSpy = vi.hoisted(() => vi.fn())
const mockLanguageRef = { value: 'en_US' }
-vi.mock('../hooks', () => ({
+vi.mock('../../hooks', () => ({
useLanguage: () => mockLanguageRef.value,
}))
@@ -84,7 +84,7 @@ vi.mock('@/app/components/workflow/nodes/_base/components/variable/var-reference
},
}))
-vi.mock('../../key-validator/ValidateStatus', () => ({
+vi.mock('../../../key-validator/ValidateStatus', () => ({
ValidatingTip: () => Validating...
,
}))
@@ -202,7 +202,7 @@ describe('Form', () => {
// Interaction updates
describe('Interactions', () => {
- it('should update values and clear dependent fields when a field changes', () => {
+ it('should update values and clear dependent fields when a field changes', async () => {
const formSchemas: AnyFormSchema[] = [
createTextSchema({
variable: 'api_key',
@@ -232,8 +232,10 @@ describe('Form', () => {
fireEvent.change(screen.getByPlaceholderText('API Key'), { target: { value: 'new-key' } })
- expect(onChange).toHaveBeenCalledWith({ api_key: 'new-key', dependent: 'reset' })
- expect(screen.getByText('Validating...')).toBeInTheDocument()
+ await waitFor(() => {
+ expect(onChange).toHaveBeenCalledWith({ api_key: 'new-key', dependent: 'reset' })
+ expect(screen.getByText('Validating...')).toBeInTheDocument()
+ })
})
it('should render radio options based on show conditions and ignore edit-locked changes', () => {
@@ -447,9 +449,9 @@ describe('Form', () => {
showOnVariableMap={{}}
isEditMode={false}
fieldMoreInfo={() => Extra Info
}
- override={[[FormTypeEnum.textInput], () => Override Field
]}
+ override={[[FormTypeEnum.textInput], () => Override Field
]}
customRenderField={schema => (
-
+
Custom Render:
{schema.variable}
diff --git a/web/app/components/header/account-setting/model-provider-page/model-modal/Input.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-modal/__tests__/Input.spec.tsx
similarity index 91%
rename from web/app/components/header/account-setting/model-provider-page/model-modal/Input.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-modal/__tests__/Input.spec.tsx
index 66db50d976..44fdf389f4 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-modal/Input.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-modal/__tests__/Input.spec.tsx
@@ -1,5 +1,5 @@
import { fireEvent, render, screen } from '@testing-library/react'
-import Input from './Input'
+import Input from '../Input'
describe('Input', () => {
beforeEach(() => {
@@ -19,6 +19,21 @@ describe('Input', () => {
expect(screen.getByPlaceholderText('API Key')).toHaveValue('hello')
})
+ it('should render password inputs without autocomplete attributes', () => {
+ render(
+
,
+ )
+
+ const input = screen.getByPlaceholderText('Secret')
+
+ expect(input).toHaveAttribute('type', 'password')
+ expect(input).not.toHaveAttribute('autocomplete')
+ })
+
// User interaction
it('should call onChange when the user types', () => {
const onChange = vi.fn()
diff --git a/web/app/components/header/account-setting/model-provider-page/model-modal/index.spec.tsx b/web/app/components/header/account-setting/model-provider-page/model-modal/__tests__/index.spec.tsx
similarity index 98%
rename from web/app/components/header/account-setting/model-provider-page/model-modal/index.spec.tsx
rename to web/app/components/header/account-setting/model-provider-page/model-modal/__tests__/index.spec.tsx
index 07d3c820cf..8118db6dea 100644
--- a/web/app/components/header/account-setting/model-provider-page/model-modal/index.spec.tsx
+++ b/web/app/components/header/account-setting/model-provider-page/model-modal/__tests__/index.spec.tsx
@@ -1,5 +1,5 @@
import type { ComponentProps } from 'react'
-import type { Credential, CredentialFormSchema, CustomModel, ModelProvider } from '../declarations'
+import type { Credential, CredentialFormSchema, CustomModel, ModelProvider } from '../../declarations'
import { fireEvent, render, screen, waitFor } from '@testing-library/react'
import * as React from 'react'
import {
@@ -10,8 +10,8 @@ import {
ModelTypeEnum,
PreferredProviderTypeEnum,
QuotaUnitEnum,
-} from '../declarations'
-import ModelModal from './index'
+} from '../../declarations'
+import ModelModal from '../index'
type CredentialData = {
credentials: Record
@@ -45,7 +45,7 @@ const mockHandlers = vi.hoisted(() => ({
handleActiveCredential: vi.fn(),
}))
-vi.mock('../model-auth/hooks', () => ({
+vi.mock('../../model-auth/hooks', () => ({
useCredentialData: () => ({
isLoading: mockState.isLoading,
credentialData: mockState.credentialData,
@@ -75,7 +75,7 @@ vi.mock('@/hooks/use-i18n', () => ({
useRenderI18nObject: () => (value: { en_US: string }) => value.en_US,
}))
-vi.mock('../hooks', () => ({
+vi.mock('../../hooks', () => ({
useLanguage: () => 'en_US',
}))
@@ -164,7 +164,7 @@ vi.mock('@/app/components/base/form/form-scenarios/auth', () => ({
}),
}))
-vi.mock('../model-auth', () => ({
+vi.mock('../../model-auth', () => ({
CredentialSelector: ({ onSelect }: { onSelect: (val: unknown) => void }) => (