📎 fix: Respect fileConfig.disabled for Agents Endpoint Upload Button (#12238)

* fix: respect fileConfig.disabled for agents endpoint upload button

The isAgents check was OR'd without the !isUploadDisabled guard,
bypassing the fileConfig.endpoints.agents.disabled setting and
always rendering the attach file menu for agents.

* test: add regression tests for fileConfig.disabled upload guard

Cover the isUploadDisabled rendering gate for agents and assistants
endpoints, preventing silent reintroduction of the bypass bug.

* test: cover disabled fallback chain in useAgentFileConfig

Verify agents-disabled propagates when no provider is set,
when provider has no specific config (agents as fallback),
and that provider-specific enabled overrides agents disabled.
This commit is contained in:
Danny Avila 2026-03-15 10:35:44 -04:00 committed by GitHub
parent 0c27ad2d55
commit 93a628d7a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 103 additions and 5 deletions

View file

@ -18,7 +18,7 @@ const mockEndpointsConfig: TEndpointsConfig = {
'Some Endpoint': { type: EModelEndpoint.custom, userProvide: false, order: 9999 },
};
let mockFileConfig = mergeFileConfig({
const defaultFileConfig = mergeFileConfig({
endpoints: {
Moonshot: { fileLimit: 5 },
[EModelEndpoint.agents]: { fileLimit: 20 },
@ -26,6 +26,8 @@ let mockFileConfig = mergeFileConfig({
},
});
let mockFileConfig = defaultFileConfig;
jest.mock('~/data-provider', () => ({
useGetEndpointsQuery: () => ({ data: mockEndpointsConfig }),
useGetFileConfig: ({ select }: { select?: (data: unknown) => unknown }) => ({
@ -118,13 +120,16 @@ describe('AgentPanel file config resolution (useAgentFileConfig)', () => {
});
describe('disabled state', () => {
beforeEach(() => {
mockFileConfig = defaultFileConfig;
});
it('reports not disabled for standard config', () => {
render(<TestWrapper provider="Moonshot" />);
expect(screen.getByTestId('disabled').textContent).toBe('false');
});
it('reports disabled when provider-specific config is disabled', () => {
const original = mockFileConfig;
mockFileConfig = mergeFileConfig({
endpoints: {
Moonshot: { disabled: true },
@ -135,8 +140,44 @@ describe('AgentPanel file config resolution (useAgentFileConfig)', () => {
render(<TestWrapper provider="Moonshot" />);
expect(screen.getByTestId('disabled').textContent).toBe('true');
});
mockFileConfig = original;
it('reports disabled when agents config is disabled and no provider set', () => {
mockFileConfig = mergeFileConfig({
endpoints: {
[EModelEndpoint.agents]: { disabled: true },
default: { fileLimit: 10 },
},
});
render(<TestWrapper />);
expect(screen.getByTestId('disabled').textContent).toBe('true');
});
it('reports disabled when agents is disabled and provider has no specific config', () => {
mockFileConfig = mergeFileConfig({
endpoints: {
[EModelEndpoint.agents]: { disabled: true },
default: { fileLimit: 10 },
},
});
render(<TestWrapper provider="Some Endpoint" />);
expect(screen.getByTestId('disabled').textContent).toBe('true');
});
it('provider-specific enabled overrides agents disabled', () => {
mockFileConfig = mergeFileConfig({
endpoints: {
Moonshot: { disabled: false, fileLimit: 5 },
[EModelEndpoint.agents]: { disabled: true },
default: { fileLimit: 10 },
},
});
render(<TestWrapper provider="Moonshot" />);
expect(screen.getByTestId('disabled').textContent).toBe('false');
expect(screen.getByTestId('fileLimit').textContent).toBe('5');
});
});