takt/src/__tests__/updateNotifier.test.ts
2026-02-02 17:11:42 +09:00

71 lines
1.5 KiB
TypeScript

/**
* Tests for checkForUpdates (update-notifier integration)
*/
import { describe, it, expect, vi, beforeEach } from 'vitest';
const { mockNotify, mockUpdateNotifier } = vi.hoisted(() => {
const mockNotify = vi.fn();
const mockUpdateNotifier = vi.fn(() => ({ notify: mockNotify }));
return { mockNotify, mockUpdateNotifier };
});
vi.mock('update-notifier', () => ({
default: mockUpdateNotifier,
}));
vi.mock('node:module', () => {
const mockRequire = vi.fn(() => ({
name: 'takt',
version: '0.2.4',
}));
return {
createRequire: () => mockRequire,
};
});
import { checkForUpdates } from '../shared/utils/updateNotifier.js';
beforeEach(() => {
vi.clearAllMocks();
});
describe('checkForUpdates', () => {
it('should call updateNotifier with package info from package.json', () => {
// When
checkForUpdates();
// Then
expect(mockUpdateNotifier).toHaveBeenCalledWith({
pkg: { name: 'takt', version: '0.2.4' },
});
});
it('should call notify on the notifier instance', () => {
// When
checkForUpdates();
// Then
expect(mockNotify).toHaveBeenCalled();
});
it('should call updateNotifier before notify', () => {
// Given
const callOrder: string[] = [];
mockUpdateNotifier.mockImplementation(() => {
callOrder.push('updateNotifier');
return {
notify: () => {
callOrder.push('notify');
},
};
});
// When
checkForUpdates();
// Then
expect(callOrder).toEqual(['updateNotifier', 'notify']);
});
});