@@ -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
879957describe ( 'calculateStreak — timezone awareness' , ( ) => {
880958 const tzCalendar = {
0 commit comments