Files
wehub-resource-sync e115934061
Publish `@librechat/data-schemas` to NPM / pack (push) Failing after 8s
Publish `@librechat/client` to NPM / pack (push) Failing after 0s
GitNexus Index / index (push) Failing after 1s
Sync Locize Translations & Create Translation PR / Create Translation PR on Version Published (push) Has been skipped
Sync Helm Chart Tags / Sync chart tags (push) Failing after 2s
Publish `librechat-data-provider` to NPM / pack (push) Failing after 1s
Docker Dev Images Build / build (Dockerfile, librechat-dev, node) (push) Failing after 1s
Docker Dev Images Build / build (Dockerfile.multi, librechat-dev-api, api-build) (push) Failing after 0s
Sync Helm Chart Tags / Ignore non-main push (push) Has been skipped
Sync Locize Translations & Create Translation PR / Sync Translation Keys with Locize (push) Failing after 1s
Publish `@librechat/client` to NPM / publish-npm (push) Has been cancelled
Publish `librechat-data-provider` to NPM / publish-npm (push) Has been cancelled
GitNexus Index / post-index (push) Has been cancelled
Publish `@librechat/data-schemas` to NPM / publish-npm (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:08:12 +08:00

73 lines
2.0 KiB
JavaScript

jest.mock('~/models', () => ({
findBalanceByUser: jest.fn(),
}));
const { findBalanceByUser } = require('~/models');
const balanceController = require('./Balance');
describe('balanceController', () => {
const createResponse = () => ({
locals: {},
status: jest.fn().mockReturnThis(),
json: jest.fn().mockReturnThis(),
sendStatus: jest.fn().mockReturnThis(),
});
beforeEach(() => {
jest.clearAllMocks();
});
it('returns no content without reading balance when balance config is disabled', async () => {
const req = {
user: { id: 'user-1' },
};
const res = createResponse();
res.locals.balanceConfigEnabled = false;
await balanceController(req, res);
expect(findBalanceByUser).not.toHaveBeenCalled();
expect(res.sendStatus).toHaveBeenCalledWith(204);
expect(res.status).not.toHaveBeenCalled();
});
it('uses balance data attached by middleware without a second read', async () => {
const req = {
user: { id: 'user-1' },
};
const res = createResponse();
res.locals.balanceConfigEnabled = true;
res.locals.balanceData = {
_id: 'balance-1',
user: 'user-1',
tokenCredits: 100,
autoRefillEnabled: false,
};
await balanceController(req, res);
expect(findBalanceByUser).not.toHaveBeenCalled();
expect(res.status).toHaveBeenCalledWith(200);
expect(res.json).toHaveBeenCalledWith({
user: 'user-1',
tokenCredits: 100,
autoRefillEnabled: false,
});
});
it('returns not found when balance is enabled and no record exists', async () => {
findBalanceByUser.mockResolvedValue(null);
const req = {
user: { id: 'user-1' },
};
const res = createResponse();
res.locals.balanceConfigEnabled = true;
await balanceController(req, res);
expect(findBalanceByUser).toHaveBeenCalledWith('user-1');
expect(res.status).toHaveBeenCalledWith(404);
expect(res.json).toHaveBeenCalledWith({ error: 'Balance not found' });
});
});