Skip to content

Commit a4dcf09

Browse files
authored
test: verify streak formulas for Sunday vs Monday week formats (JhaSourav07#2041)
1 parent d60efee commit a4dcf09

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

lib/calculate.test.ts

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,6 +875,84 @@ describe('calculateStreak', () => {
875875
expect(resultMonday.longestStreak).toBe(2);
876876
});
877877
});
878+
it('calculates streaks identically when weeks start on Sunday vs Monday formats', () => {
879+
const datePattern = [
880+
{ date: '2026-05-24', count: 1 },
881+
{ date: '2026-05-25', count: 1 },
882+
{ date: '2026-05-26', count: 1 },
883+
{ date: '2026-05-27', count: 1 },
884+
{ date: '2026-05-28', count: 1 },
885+
{ date: '2026-05-29', count: 1 },
886+
{ date: '2026-05-30', count: 1 },
887+
{ date: '2026-05-31', count: 1 },
888+
{ date: '2026-06-01', count: 1 },
889+
{ date: '2026-06-02', count: 1 },
890+
];
891+
892+
const sundayStartCalendar = {
893+
totalContributions: 10,
894+
weeks: [
895+
{
896+
contributionDays: datePattern.slice(0, 7).map((d) => ({
897+
contributionCount: d.count,
898+
date: d.date,
899+
})),
900+
},
901+
{
902+
contributionDays: datePattern.slice(7).map((d) => ({
903+
contributionCount: d.count,
904+
date: d.date,
905+
})),
906+
},
907+
],
908+
};
909+
910+
const mondayStartCalendar = {
911+
totalContributions: 10,
912+
weeks: [
913+
{
914+
contributionDays: [
915+
{
916+
contributionCount: datePattern[0].count,
917+
date: datePattern[0].date,
918+
},
919+
],
920+
},
921+
{
922+
contributionDays: datePattern.slice(1, 8).map((d) => ({
923+
contributionCount: d.count,
924+
date: d.date,
925+
})),
926+
},
927+
{
928+
contributionDays: datePattern.slice(8).map((d) => ({
929+
contributionCount: d.count,
930+
date: d.date,
931+
})),
932+
},
933+
],
934+
};
935+
936+
const evalDate = new Date('2026-06-02T12:00:00Z');
937+
938+
const resultSunday = calculateStreak(
939+
sundayStartCalendar as ContributionCalendar,
940+
'UTC',
941+
evalDate
942+
);
943+
944+
const resultMonday = calculateStreak(
945+
mondayStartCalendar as ContributionCalendar,
946+
'UTC',
947+
evalDate
948+
);
949+
950+
expect(resultSunday.currentStreak).toBe(10);
951+
expect(resultSunday.longestStreak).toBe(10);
952+
953+
expect(resultMonday.currentStreak).toBe(10);
954+
expect(resultMonday.longestStreak).toBe(10);
955+
});
878956

879957
describe('calculateStreak — timezone awareness', () => {
880958
const tzCalendar = {

0 commit comments

Comments
 (0)