Skip to content

Commit

Permalink
clean
Browse files Browse the repository at this point in the history
  • Loading branch information
cpcramer committed Feb 8, 2025
1 parent 26499c6 commit 8253299
Show file tree
Hide file tree
Showing 3 changed files with 133 additions and 165 deletions.
117 changes: 49 additions & 68 deletions src/core/analytics/hooks/useAnalytics.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { WalletEvent } from '@/core/analytics/types';
import { ANALYTICS_API_URL } from '@/core/analytics/constants';
import { type AnalyticsEventData, WalletEvent } from '@/core/analytics/types';
import { sendAnalytics } from '@/core/analytics/utils/sendAnalytics';
import { useOnchainKit } from '@/useOnchainKit';
import { cleanup, renderHook } from '@testing-library/react';
Expand All @@ -9,20 +10,25 @@ vi.mock('@/useOnchainKit', () => ({
useOnchainKit: vi.fn(),
}));

vi.mock('@/core/network/sendAnalytics', () => ({
vi.mock('@/core/analytics/utils/sendAnalytics', () => ({
sendAnalytics: vi.fn(),
}));

describe('useAnalytics', () => {
const mockApiKey = 'test-api-key';
const mocksessionId = 'test-interaction-id';
const mockSessionId = 'test-interaction-id';
const mockAnalyticsUrl = 'https://custom-analytics.example.com';

beforeEach(() => {
vi.clearAllMocks();

(useOnchainKit as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
apiKey: mockApiKey,
sessionId: mocksessionId,
sessionId: mockSessionId,
config: {
analytics: true,
analyticsUrl: mockAnalyticsUrl,
},
});
});

Expand All @@ -36,101 +42,76 @@ describe('useAnalytics', () => {
expect(result.current.sendAnalytics).toBeDefined();
});

it('should call sendAnalytics with correct parameters', () => {
const { result } = renderHook(() => useAnalytics());
const event = WalletEvent.Connection;
const data = { address: '0x0000000000000000000000000000000000000000' };

result.current.sendAnalytics(event, data);

expect(sendAnalytics).toHaveBeenCalledWith(
expect.objectContaining({
event,
data,
appName: expect.any(String),
apiKey: mockApiKey,
sessionId: mocksessionId,
}),
);
});

it('should use document.title as appName in browser environment', () => {
it('should call sendAnalytics with correct payload structure', () => {
const mockTitle = 'Test App';
Object.defineProperty(global.document, 'title', {
value: mockTitle,
writable: true,
});

const { result } = renderHook(() => useAnalytics());
const event = WalletEvent.Connection;
const data = { address: '0x0000000000000000000000000000000000000000' };
const event = WalletEvent.ConnectSuccess;
const data = {
address: '0x0000000000000000000000000000000000000000',
} as AnalyticsEventData[typeof event];

result.current.sendAnalytics(event, data);

expect(sendAnalytics).toHaveBeenCalledWith(
expect.objectContaining({
event,
data,
appName: mockTitle,
expect(sendAnalytics).toHaveBeenCalledWith({
url: mockAnalyticsUrl,
headers: {
'OnchainKit-App-Name': mockTitle,
},
body: {
apiKey: mockApiKey,
sessionId: mocksessionId,
}),
);
});

it('should handle analyticsUrl from config correctly', () => {
const mockTitle = 'Test App';
const customAnalyticsUrl = 'https://custom-analytics.example.com';

Object.defineProperty(global.document, 'title', {
value: mockTitle,
writable: true,
sessionId: mockSessionId,
timestamp: expect.any(Number),
eventType: event,
data,
},
});
});

it('should not send analytics when disabled in config', () => {
(useOnchainKit as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
apiKey: mockApiKey,
sessionId: mocksessionId,
sessionId: mockSessionId,
config: {
analyticsUrl: customAnalyticsUrl,
analytics: false,
},
});

const { result: resultWithUrl } = renderHook(() => useAnalytics());
const event = WalletEvent.Connection;
const data = { address: '0x0000000000000000000000000000000000000000' };
const { result } = renderHook(() => useAnalytics());
const event = WalletEvent.ConnectSuccess;
const data = {
address: '0x0000000000000000000000000000000000000000',
} as AnalyticsEventData[typeof event];

resultWithUrl.current.sendAnalytics(event, data);
result.current.sendAnalytics(event, data);

expect(sendAnalytics).toHaveBeenCalledWith(
expect.objectContaining({
analyticsUrl: customAnalyticsUrl,
event,
data,
appName: mockTitle,
apiKey: mockApiKey,
sessionId: mocksessionId,
}),
);
expect(sendAnalytics).not.toHaveBeenCalled();
});

it('should use default analytics URL when not provided in config', () => {
(useOnchainKit as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
apiKey: mockApiKey,
sessionId: mocksessionId,
sessionId: mockSessionId,
config: {
analyticsUrl: null,
analytics: true,
},
});

const { result: resultWithNull } = renderHook(() => useAnalytics());
resultWithNull.current.sendAnalytics(event, data);
const { result } = renderHook(() => useAnalytics());
const event = WalletEvent.ConnectSuccess;
const data = {
address: '0x0000000000000000000000000000000000000000',
} as AnalyticsEventData[typeof event];

result.current.sendAnalytics(event, data);

expect(sendAnalytics).toHaveBeenCalledWith(
expect.objectContaining({
analyticsUrl: undefined,
event,
data,
appName: mockTitle,
apiKey: mockApiKey,
sessionId: mocksessionId,
url: ANALYTICS_API_URL,
}),
);
});
Expand Down
Loading

0 comments on commit 8253299

Please sign in to comment.