Skip to content

Commit a69c0bd

Browse files
committed
refactor: export functions to be used for testing
1 parent 2224bc1 commit a69c0bd

2 files changed

Lines changed: 13 additions & 46 deletions

File tree

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,23 @@ import { promises as fs } from 'node:fs';
33
import test from 'node:test';
44

55
const TEST_TRACKER_FILE = 'test-advent-tracker.json';
6+
process.env.ADVENT_OF_CODE_TRACKER_PATH = TEST_TRACKER_FILE;
67

7-
/**
8-
* Helper function to load tracker data
9-
*/
10-
async function loadTracker(filename) {
11-
try {
12-
const data = await fs.readFile(filename, 'utf-8');
13-
return JSON.parse(data);
14-
} catch (error) {
15-
return {};
16-
}
17-
}
18-
19-
/**
20-
* Helper function to save tracker data
21-
*/
22-
async function saveTracker(filename, data) {
23-
await fs.writeFile(filename, JSON.stringify(data, null, 2), 'utf-8');
24-
}
8+
// Import after setting env var
9+
const { loadTracker, saveTracker } = await import('./advent-scheduler.js');
2510

26-
/**
27-
* Helper function to clean up test tracker file
28-
*/
2911
async function cleanupTestTracker() {
3012
try {
3113
await fs.unlink(TEST_TRACKER_FILE);
32-
} catch (error) {
14+
} catch (_error) {
3315
// File might not exist, that's fine
3416
}
3517
}
3618

3719
test('advent scheduler: tracker file operations', async (t) => {
3820
await t.test('should create empty tracker if file does not exist', async () => {
3921
await cleanupTestTracker();
40-
const tracker = await loadTracker(TEST_TRACKER_FILE);
22+
const tracker = await loadTracker();
4123
assert.deepEqual(tracker, {});
4224
});
4325

@@ -46,17 +28,17 @@ test('advent scheduler: tracker file operations', async (t) => {
4628
'2025': [1, 2, 3],
4729
'2026': [1],
4830
};
49-
await saveTracker(TEST_TRACKER_FILE, testData);
50-
const loaded = await loadTracker(TEST_TRACKER_FILE);
31+
await saveTracker(testData);
32+
const loaded = await loadTracker();
5133
assert.deepEqual(loaded, testData);
5234
});
5335

5436
await t.test('should track multiple days per year', async () => {
5537
const tracker = {
5638
'2025': [1, 5, 10, 15, 20, 25],
5739
};
58-
await saveTracker(TEST_TRACKER_FILE, tracker);
59-
const loaded = await loadTracker(TEST_TRACKER_FILE);
40+
await saveTracker(tracker);
41+
const loaded = await loadTracker();
6042
assert.equal(loaded['2025'].length, 6);
6143
assert.ok(loaded['2025'].includes(1));
6244
assert.ok(loaded['2025'].includes(25));

src/util/advent-scheduler.ts

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ChannelType, type Client, type ForumChannel } from 'discord.js';
1+
import { ChannelType, type Client } from 'discord.js';
22
import * as cron from 'node-cron';
33
import { promises as fs } from 'node:fs';
44
import { config } from '../env.js';
@@ -9,10 +9,7 @@ type TrackerData = {
99
[year: string]: number[];
1010
};
1111

12-
/**
13-
* Load the tracker file to see which days have already been posted
14-
*/
15-
async function loadTracker(): Promise<TrackerData> {
12+
export async function loadTracker(): Promise<TrackerData> {
1613
try {
1714
const data = await fs.readFile(TRACKER_FILE, 'utf-8');
1815
return JSON.parse(data);
@@ -22,25 +19,16 @@ async function loadTracker(): Promise<TrackerData> {
2219
}
2320
}
2421

25-
/**
26-
* Save the tracker file with updated data
27-
*/
28-
async function saveTracker(data: TrackerData): Promise<void> {
22+
export async function saveTracker(data: TrackerData): Promise<void> {
2923
await fs.writeFile(TRACKER_FILE, JSON.stringify(data, null, 2), 'utf-8');
3024
}
3125

32-
/**
33-
* Check if a specific day has already been posted for a given year
34-
*/
3526
async function isDayPosted(year: number, day: number): Promise<boolean> {
3627
const tracker = await loadTracker();
3728
const yearData = tracker[year.toString()];
3829
return yearData ? yearData.includes(day) : false;
3930
}
4031

41-
/**
42-
* Mark a day as posted for a given year
43-
*/
4432
async function markDayAsPosted(year: number, day: number): Promise<void> {
4533
const tracker = await loadTracker();
4634
const yearKey = year.toString();
@@ -56,9 +44,6 @@ async function markDayAsPosted(year: number, day: number): Promise<void> {
5644
}
5745
}
5846

59-
/**
60-
* Create a forum post for a specific Advent of Code day
61-
*/
6247
async function createAdventPost(
6348
client: Client,
6449
channelId: string,
@@ -78,7 +63,7 @@ async function createAdventPost(
7863
return false;
7964
}
8065

81-
const forumChannel = channel as ForumChannel;
66+
const forumChannel = channel;
8267
const title = `Day ${day}, ${year}`;
8368
const content = `https://adventofcode.com/${year}/day/${day}`;
8469

0 commit comments

Comments
 (0)