@@ -46,18 +46,62 @@ describe('<Rating />', () => {
46
46
stub ( container . firstChild , 'getBoundingClientRect' ) . callsFake ( ( ) => ( {
47
47
left : 0 ,
48
48
right : 100 ,
49
+ width : 100 ,
49
50
} ) ) ;
50
- stub ( container . firstChild . firstChild , 'getBoundingClientRect' ) . callsFake ( ( ) => ( {
51
- width : 20 ,
51
+ fireEvent . mouseMove ( container . firstChild , {
52
+ clientX : 19 ,
53
+ } ) ;
54
+ expect ( container . querySelectorAll ( `.${ classes . iconHover } ` ) . length ) . to . equal ( 1 ) ;
55
+ fireEvent . mouseMove ( container . firstChild , {
56
+ clientX : 21 ,
57
+ } ) ;
58
+ expect ( container . querySelectorAll ( `.${ classes . iconHover } ` ) . length ) . to . equal ( 2 ) ;
59
+ } ) ;
60
+
61
+ it ( 'should handle mouse hover correctly for icons with spacing' , ( ) => {
62
+ const { container } = render (
63
+ < Rating
64
+ sx = { {
65
+ [ `.${ classes . decimal } ` ] : { marginRight : 2 } ,
66
+ } }
67
+ precision = { 0.5 }
68
+ /> ,
69
+ ) ;
70
+ stub ( container . firstChild , 'getBoundingClientRect' ) . callsFake ( ( ) => ( {
71
+ left : 0 ,
72
+ right : 200 ,
73
+ width : 200 ,
52
74
} ) ) ;
75
+
53
76
fireEvent . mouseMove ( container . firstChild , {
54
77
clientX : 19 ,
55
78
} ) ;
79
+ // half star highlighted
56
80
expect ( container . querySelectorAll ( `.${ classes . iconHover } ` ) . length ) . to . equal ( 1 ) ;
81
+
57
82
fireEvent . mouseMove ( container . firstChild , {
58
83
clientX : 21 ,
59
84
} ) ;
85
+ // one full star highlighted
86
+ expect ( container . querySelectorAll ( `.${ classes . iconHover } ` ) . length ) . to . equal ( 2 ) ;
87
+
88
+ fireEvent . mouseMove ( container . firstChild , {
89
+ clientX : 39 ,
90
+ } ) ;
91
+ // Still one star remains highlighted as the total item width (40px) has not been reached yet, considering 24px for the icon width and 16px for margin-right.
60
92
expect ( container . querySelectorAll ( `.${ classes . iconHover } ` ) . length ) . to . equal ( 2 ) ;
93
+
94
+ fireEvent . mouseMove ( container . firstChild , {
95
+ clientX : 41 ,
96
+ } ) ;
97
+ // one and half star highlighted
98
+ expect ( container . querySelectorAll ( `.${ classes . iconHover } ` ) . length ) . to . equal ( 3 ) ;
99
+
100
+ fireEvent . mouseMove ( container . firstChild , {
101
+ clientX : 60 ,
102
+ } ) ;
103
+ // two full stars highlighted
104
+ expect ( container . querySelectorAll ( `.${ classes . iconHover } ` ) . length ) . to . equal ( 4 ) ;
61
105
} ) ;
62
106
63
107
it ( 'should clear the rating' , ( ) => {
0 commit comments