UNPKG

track-dev-time

Version:

CLI tool to track your coding sessions with start, pause and stop commands. Outputs session data to a JSON file.

82 lines (69 loc) 1.89 kB
import fs from "fs"; import { nanoid } from "nanoid"; import path from "path"; import { getCurrentSession, saveSession } from "../lib/storage"; import { vi } from "vitest"; export const TEST_PATH = path.resolve("test_data", "sessions.json"); export let currentSession = { id: `session-${nanoid()}`, start: new Date().toISOString(), pauses: [], end: null, duration: null, }; export const cleanupTestData = () => { if (fs.existsSync(TEST_PATH)) { fs.unlinkSync(TEST_PATH); } const dir = path.dirname(TEST_PATH); if (fs.existsSync(dir)) { fs.rmSync(dir, { recursive: true, force: true }); } }; export const makeCurrentSession = () => ({ id: `session-${nanoid()}`, start: new Date().toISOString(), pauses: [], end: null, duration: null, }); export const createAndSaveSession = () => { const session = makeCurrentSession(); saveSession(session, "START", TEST_PATH); return getCurrentSession(TEST_PATH); }; export const createPause = (startOffsetMinutes = 15) => ({ id: nanoid(5), start: new Date(Date.now() + startOffsetMinutes * 60 * 1000).toISOString(), end: null, }); export const setupTestEnvironment = ( TEST_DIR, TEST_PACKAGE_JSON, TEST_GITIGNORE ) => { if (!fs.existsSync(TEST_DIR)) { fs.mkdirSync(TEST_DIR, { recursive: true }); } const packageJson = { name: "test-project", scripts: { dev: "next dev", }, }; fs.writeFileSync( TEST_PACKAGE_JSON, JSON.stringify(packageJson, null, 2), "utf-8" ); fs.writeFileSync(TEST_GITIGNORE, "", "utf-8"); }; export const mockLog = () => { const logSpy = vi.spyOn(console, "log").mockImplementation(() => {}); const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {}); return { logSpy, errorSpy }; }; export const restoreMockLog = (logSpy, errorSpy) => { logSpy?.mockRestore(); errorSpy?.mockRestore(); };