Skip to content

Commit 3d3e2eb

Browse files
committed
Merge branch 'master' into feature/add-workdays-selector
2 parents dfb9eae + efaf9da commit 3d3e2eb

File tree

5 files changed

+50
-9
lines changed

5 files changed

+50
-9
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
name: Run Unit Tests
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- master
7+
8+
jobs:
9+
test:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Checkout code
13+
uses: actions/checkout@v4
14+
15+
- name: Set up Node.js
16+
uses: actions/setup-node@v4
17+
with:
18+
node-version: '20'
19+
20+
- name: Install dependencies
21+
run: npm ci
22+
23+
- name: Run unit tests
24+
run: npm test
25+

src/App.vue

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,4 @@ onMounted(() => {
9393
h1, h2 {
9494
font-weight: normal;
9595
}
96-
97-
ul {
98-
list-style-type: none;
99-
padding: 0;
100-
}
10196
</style>

src/App.vue.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ describe('App.vue', () => {
2121
afterEach(() => {
2222
wrapper.unmount();
2323
vi.clearAllMocks();
24+
selectedYearSpy.mockClear();
2425
});
2526

2627
it('renders the title and year selector', async () => {

src/components/MonthCard.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</h5>
1010
<div class="card-body">
1111
<p v-if="holidays.length == 0">No chagim in {{ month }}!</p>
12-
<ul class="days">
12+
<ul class="days list-unstyled">
1313
<li v-for="holiday in holidays" :key="holiday.date" :class="{yt: holiday.yomtov}">
1414
<label>
1515
<input type="checkbox" :checked="selectedHolidays[holiday.date]" @change="(e) => selectedHolidays[holiday.date] = e.target.checked" />

src/useHmcState.test.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ describe('createHmcState', () => {
5252

5353
it('loads holidays and sets selectedHolidays when selectedYear changes', async () => {
5454
const state = createHmcState();
55-
55+
5656
state.selectedYear.value = 1900;
5757
await nextTick();
5858

@@ -76,7 +76,7 @@ describe('createHmcState', () => {
7676
expect(state.totalWeekends.value).toBe(1); // Sunday
7777

7878
// Change workdays to Sun-Thu (0-4)
79-
state.workdays.value = [0,1,2,3,4];
79+
state.workdays.value = [0, 1, 2, 3, 4];
8080
await nextTick();
8181
expect(state.totalWeekdays.value).toBe(3); // Sunday, Monday, Tuesday
8282
expect(state.totalWeekends.value).toBe(0);
@@ -87,4 +87,24 @@ describe('createHmcState', () => {
8787
expect(state.totalWeekdays.value).toBe(0);
8888
expect(state.totalWeekends.value).toBe(3);
8989
});
90-
});
90+
91+
it('does not double count different holidays with the same date', async () => {
92+
const state = createHmcState();
93+
const weekendHoliday = createMockHmcHoliday({ subcat: 'major', date: new Date(2025, 3, 13), title: 'Weekend Holiday', isWeekend: true, isYomTov: true });
94+
const weekendDupe = { ...weekendHoliday, title: 'Weekend Holiday - Duplicate' };
95+
const weekdayHoliday = createMockHmcHoliday({ subcat: 'major', date: new Date(2025, 3, 14), title: 'Weekday', isWeekend: false, isYomTov: true });
96+
const weekdayDupe = { ...weekdayHoliday, title: 'Weekday - Duplicate' };
97+
state.holidays.value.all.push(weekendHoliday, weekendDupe, weekdayHoliday, weekdayDupe);
98+
state.holidays.value.holidaysByMonth.April = [weekendHoliday, weekendDupe, weekdayHoliday, weekdayDupe];
99+
await nextTick();
100+
101+
state.selectedHolidays.value[weekendHoliday.date] = true;
102+
state.selectedHolidays.value[weekendDupe.date] = true;
103+
state.selectedHolidays.value[weekdayHoliday.date] = true;
104+
state.selectedHolidays.value[weekdayDupe.date] = true;
105+
await nextTick();
106+
107+
expect(state.totalWeekdays.value).toBe(1);
108+
expect(state.totalWeekends.value).toBe(1);
109+
});
110+
});

0 commit comments

Comments
 (0)