LibreChat/api/test/__mocks__/fetchEventSource.js
Danny Avila 0958db3825
fix: Enhance Test Coverage and Fix Compatibility Issues 👷‍♂️ (#1363)
* refactor: only remove conversation states from localStorage on login/logout but not on refresh

* chore: add debugging log for azure completion url

* chore: add api-key to redact regex

* fix: do not show endpoint selector if endpoint is falsy

* chore: remove logger from genAzureChatCompletion

* feat(ci): mock fetchEventSource

* refactor(ci): mock all model methods in BaseClient.test, as well as mock the implementation for getCompletion in FakeClient

* fix(OpenAIClient): consider chatCompletion if model name includes `gpt` as opposed to `gpt-`

* fix(ChatGPTClient/azureOpenAI): Remove 'model' option for Azure compatibility (cannot be sent in payload body)

* feat(ci): write new test suite that significantly increase test coverage for OpenAIClient and BaseClient by covering most of the real implementation of the `sendMessage` method
- test for the azure edge case where model option is appended to modelOptions, ensuring removal before sent to the azure endpoint
- test for expected azure url being passed to SSE POST request
- test for AZURE_OPENAI_DEFAULT_MODEL being set, but is not included in the URL deployment name as expected
- test getCompletion method to have correct payload
fix(ci/OpenAIClient.test.js): correctly mock hanging/async methods

* refactor(addTitle): allow azure to title as it aborts signal on completion
2023-12-15 13:27:13 -05:00

27 lines
924 B
JavaScript

jest.mock('@waylaidwanderer/fetch-event-source', () => ({
fetchEventSource: jest
.fn()
.mockImplementation((url, { onopen, onmessage, onclose, onerror, error }) => {
// Simulating the onopen event
onopen && onopen({ status: 200 });
// Simulating a few onmessage events
onmessage &&
onmessage({ data: JSON.stringify({ message: 'First message' }), event: 'message' });
onmessage &&
onmessage({ data: JSON.stringify({ message: 'Second message' }), event: 'message' });
onmessage &&
onmessage({ data: JSON.stringify({ message: 'Third message' }), event: 'message' });
// Simulate the onclose event
onclose && onclose();
if (error) {
// Simulate the onerror event
onerror && onerror({ status: 500 });
}
// Return a Promise that resolves to simulate async behavior
return Promise.resolve();
}),
}));