mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 12:37:56 +00:00
- Switch to pnpm based build - Switch circleci from docker to machine to have more memory - Fix frontend and backend tests Fixes https://linear.app/chatwoot/issue/CW-3610/fix-circle-ci-for-vite-build --------- Co-authored-by: Shivam Mishra <scm.mymail@gmail.com> Co-authored-by: Pranav <pranavrajs@gmail.com> Co-authored-by: Pranav <pranav@chatwoot.com>
123 lines
3.6 KiB
JavaScript
123 lines
3.6 KiB
JavaScript
import { useAI } from '../useAI';
|
|
import {
|
|
useStore,
|
|
useStoreGetters,
|
|
useMapGetter,
|
|
} from 'dashboard/composables/store';
|
|
import { useI18n } from 'vue-i18n';
|
|
import OpenAPI from 'dashboard/api/integrations/openapi';
|
|
import analyticsHelper from 'dashboard/helper/AnalyticsHelper/index';
|
|
|
|
vi.mock('dashboard/composables/store');
|
|
vi.mock('vue-i18n');
|
|
vi.mock('dashboard/api/integrations/openapi');
|
|
vi.mock('dashboard/helper/AnalyticsHelper/index', async importOriginal => {
|
|
const actual = await importOriginal();
|
|
actual.default = {
|
|
track: vi.fn(),
|
|
};
|
|
return actual;
|
|
});
|
|
vi.mock('dashboard/helper/AnalyticsHelper/events', () => ({
|
|
OPEN_AI_EVENTS: {
|
|
TEST_EVENT: 'open_ai_test_event',
|
|
},
|
|
}));
|
|
|
|
describe('useAI', () => {
|
|
const mockStore = {
|
|
dispatch: vi.fn(),
|
|
};
|
|
|
|
const mockGetters = {
|
|
'integrations/getUIFlags': { value: { isFetching: false } },
|
|
'draftMessages/get': { value: () => 'Draft message' },
|
|
};
|
|
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
useStore.mockReturnValue(mockStore);
|
|
useStoreGetters.mockReturnValue(mockGetters);
|
|
useMapGetter.mockImplementation(getter => {
|
|
const mockValues = {
|
|
'integrations/getAppIntegrations': [],
|
|
getSelectedChat: { id: '123' },
|
|
'draftMessages/getReplyEditorMode': 'reply',
|
|
};
|
|
return { value: mockValues[getter] };
|
|
});
|
|
useI18n.mockReturnValue({ t: vi.fn() });
|
|
});
|
|
|
|
it('initializes computed properties correctly', async () => {
|
|
const { uiFlags, appIntegrations, currentChat, replyMode, draftMessage } =
|
|
useAI();
|
|
|
|
expect(uiFlags.value).toEqual({ isFetching: false });
|
|
expect(appIntegrations.value).toEqual([]);
|
|
expect(currentChat.value).toEqual({ id: '123' });
|
|
expect(replyMode.value).toBe('reply');
|
|
expect(draftMessage.value).toBe('Draft message');
|
|
});
|
|
|
|
it('fetches integrations if required', async () => {
|
|
const { fetchIntegrationsIfRequired } = useAI();
|
|
await fetchIntegrationsIfRequired();
|
|
expect(mockStore.dispatch).toHaveBeenCalledWith('integrations/get');
|
|
});
|
|
|
|
it('does not fetch integrations if already loaded', async () => {
|
|
useMapGetter.mockImplementation(getter => {
|
|
const mockValues = {
|
|
'integrations/getAppIntegrations': [{ id: 'openai' }],
|
|
getSelectedChat: { id: '123' },
|
|
'draftMessages/getReplyEditorMode': 'reply',
|
|
};
|
|
return { value: mockValues[getter] };
|
|
});
|
|
|
|
const { fetchIntegrationsIfRequired } = useAI();
|
|
await fetchIntegrationsIfRequired();
|
|
expect(mockStore.dispatch).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('records analytics correctly', async () => {
|
|
// const mockTrack = analyticsHelper.track;
|
|
const { recordAnalytics } = useAI();
|
|
|
|
await recordAnalytics('TEST_EVENT', { data: 'test' });
|
|
|
|
expect(analyticsHelper.track).toHaveBeenCalledWith('open_ai_test_event', {
|
|
type: 'TEST_EVENT',
|
|
data: 'test',
|
|
});
|
|
});
|
|
|
|
it('fetches label suggestions', async () => {
|
|
OpenAPI.processEvent.mockResolvedValue({
|
|
data: { message: 'label1, label2' },
|
|
});
|
|
|
|
useMapGetter.mockImplementation(getter => {
|
|
const mockValues = {
|
|
'integrations/getAppIntegrations': [
|
|
{ id: 'openai', hooks: [{ id: 'hook1' }] },
|
|
],
|
|
getSelectedChat: { id: '123' },
|
|
};
|
|
return { value: mockValues[getter] };
|
|
});
|
|
|
|
const { fetchLabelSuggestions } = useAI();
|
|
const result = await fetchLabelSuggestions();
|
|
|
|
expect(OpenAPI.processEvent).toHaveBeenCalledWith({
|
|
type: 'label_suggestion',
|
|
hookId: 'hook1',
|
|
conversationId: '123',
|
|
});
|
|
|
|
expect(result).toEqual(['label1', 'label2']);
|
|
});
|
|
});
|