@@ -660,4 +660,162 @@ describe("CoreChart: tooltip", () => {
660660 expect ( wrapper . findTooltip ( ) ) . not . toBe ( null ) ;
661661 } ) ;
662662 } ) ;
663+
664+ describe ( "series sorting" , ( ) => {
665+ const lineSeries : Highcharts . SeriesOptionsType [ ] = [
666+ {
667+ type : "line" ,
668+ name : "Line series 1" ,
669+ data : [
670+ { x : 1 , y : 11 } ,
671+ { x : 2 , y : 23 } ,
672+ ] ,
673+ } ,
674+ {
675+ type : "line" ,
676+ name : "Line series 2" ,
677+ data : [
678+ { x : 1 , y : 21 } ,
679+ { x : 2 , y : 11 } ,
680+ ] ,
681+ } ,
682+ ] ;
683+
684+ test ( "maintains series order when explicitly set to 'as-added'" , ( ) => {
685+ const { wrapper } = renderChart ( {
686+ highcharts,
687+ options : {
688+ series : lineSeries ,
689+ } ,
690+ tooltip : { seriesSorting : "as-added" } ,
691+ getTooltipContent : ( ) => ( {
692+ header : ( ) => "Header" ,
693+ body : ( { items } ) => (
694+ < div >
695+ { items . map ( ( item , i ) => (
696+ < div key = { i } data-testid = { `series-${ i } ` } >
697+ { item . point . series . name } : { item . point . y }
698+ </ div >
699+ ) ) }
700+ </ div >
701+ ) ,
702+ } ) ,
703+ } ) ;
704+
705+ act ( ( ) => hc . highlightChartPoint ( 0 , 0 ) ) ;
706+
707+ expect ( wrapper . findTooltip ( ) ) . not . toBe ( null ) ;
708+ const series0 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-0"]' ) ;
709+ const series1 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-1"]' ) ;
710+
711+ expect ( series0 ! . getElement ( ) . textContent ) . toBe ( "Line series 1: 11" ) ;
712+ expect ( series1 ! . getElement ( ) . textContent ) . toBe ( "Line series 2: 21" ) ;
713+ } ) ;
714+
715+ test ( "maintains series order when not explicitly provided" , ( ) => {
716+ const { wrapper } = renderChart ( {
717+ highcharts,
718+ options : {
719+ series : lineSeries ,
720+ } ,
721+ getTooltipContent : ( ) => ( {
722+ header : ( ) => "Header" ,
723+ body : ( { items } ) => (
724+ < div >
725+ { items . map ( ( item , i ) => (
726+ < div key = { i } data-testid = { `series-${ i } ` } >
727+ { item . point . series . name } : { item . point . y }
728+ </ div >
729+ ) ) }
730+ </ div >
731+ ) ,
732+ } ) ,
733+ } ) ;
734+
735+ act ( ( ) => hc . highlightChartPoint ( 0 , 0 ) ) ;
736+
737+ expect ( wrapper . findTooltip ( ) ) . not . toBe ( null ) ;
738+ const series0 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-0"]' ) ;
739+ const series1 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-1"]' ) ;
740+
741+ expect ( series0 ! . getElement ( ) . textContent ) . toBe ( "Line series 1: 11" ) ;
742+ expect ( series1 ! . getElement ( ) . textContent ) . toBe ( "Line series 2: 21" ) ;
743+ } ) ;
744+
745+ describe ( 'seriesSorting: "by-value-desc"' , ( ) => {
746+ test ( "sorts series by value in descending order" , ( ) => {
747+ const { wrapper } = renderChart ( {
748+ highcharts,
749+ options : {
750+ series : lineSeries ,
751+ } ,
752+ tooltip : { seriesSorting : "by-value-desc" } ,
753+ getTooltipContent : ( ) => ( {
754+ header : ( ) => "Header" ,
755+ body : ( { items } ) => (
756+ < div >
757+ { items . map ( ( item , i ) => (
758+ < div key = { i } data-testid = { `series-${ i } ` } >
759+ { item . point . series . name } : { item . point . y }
760+ </ div >
761+ ) ) }
762+ </ div >
763+ ) ,
764+ } ) ,
765+ } ) ;
766+
767+ act ( ( ) => hc . highlightChartPoint ( 0 , 0 ) ) ;
768+
769+ expect ( wrapper . findTooltip ( ) ) . not . toBe ( null ) ;
770+ const series0 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-0"]' ) ;
771+ const series1 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-1"]' ) ;
772+
773+ expect ( series0 ! . getElement ( ) . textContent ) . toBe ( "Line series 2: 21" ) ;
774+ expect ( series1 ! . getElement ( ) . textContent ) . toBe ( "Line series 1: 11" ) ;
775+ } ) ;
776+
777+ test ( "re-sorts series when hovering different x positions" , ( ) => {
778+ const { wrapper } = renderChart ( {
779+ highcharts,
780+ options : {
781+ series : lineSeries ,
782+ } ,
783+ tooltip : { seriesSorting : "by-value-desc" } ,
784+ getTooltipContent : ( ) => ( {
785+ header : ( ) => "Header" ,
786+ body : ( { items } ) => (
787+ < div >
788+ { items . map ( ( item , i ) => (
789+ < div key = { i } data-testid = { `series-${ i } ` } >
790+ { item . point . series . name } : { item . point . y }
791+ </ div >
792+ ) ) }
793+ </ div >
794+ ) ,
795+ } ) ,
796+ } ) ;
797+
798+ act ( ( ) => hc . highlightChartPoint ( 0 , 0 ) ) ;
799+
800+ {
801+ expect ( wrapper . findTooltip ( ) ) . not . toBe ( null ) ;
802+ const series0 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-0"]' ) ;
803+ const series1 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-1"]' ) ;
804+
805+ expect ( series0 ! . getElement ( ) . textContent ) . toBe ( "Line series 2: 21" ) ;
806+ expect ( series1 ! . getElement ( ) . textContent ) . toBe ( "Line series 1: 11" ) ;
807+ }
808+ act ( ( ) => hc . highlightChartPoint ( 0 , 1 ) ) ;
809+
810+ {
811+ expect ( wrapper . findTooltip ( ) ) . not . toBe ( null ) ;
812+ const series0 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-0"]' ) ;
813+ const series1 = wrapper . findTooltip ( ) ! . find ( '[data-testid="series-1"]' ) ;
814+
815+ expect ( series0 ! . getElement ( ) . textContent ) . toBe ( "Line series 1: 23" ) ;
816+ expect ( series1 ! . getElement ( ) . textContent ) . toBe ( "Line series 2: 11" ) ;
817+ }
818+ } ) ;
819+ } ) ;
820+ } ) ;
663821} ) ;
0 commit comments