11import MultiInput from "../../src/MultiInput.js" ;
2- import ResponsivePopover from "../../src/ResponsivePopover.js" ;
2+ import Token from "../../src/Token.js" ;
3+ import SuggestionItem from "../../src/SuggestionItem.js" ;
4+ import Button from "../../src/Button.js" ;
35import "../../src/features/InputSuggestions.js" ;
6+ import type ResponsivePopover from "@ui5/webcomponents/dist/ResponsivePopover.js" ;
7+
8+ const createTokenFromText = ( text : string ) : HTMLElement => {
9+ const token = document . createElement ( "ui5-token" ) ;
10+ token . setAttribute ( "text" , text ) ;
11+ token . setAttribute ( "slot" , "tokens" ) ;
12+ return token ;
13+ } ;
14+
15+ const addTokenToMI = ( token : HTMLElement , id : string ) => {
16+ document . getElementById ( id ) ?. appendChild ( token ) ;
17+ } ;
18+
19+ const handleTokenDelete = ( event ) => {
20+ const mi = event . target ;
21+ event . detail . tokens . forEach ( token => {
22+ mi . removeChild ( token ) ;
23+ } ) ;
24+ } ;
425
526describe ( "Multi Input on mobile device" , ( ) => {
627 beforeEach ( ( ) => {
@@ -18,6 +39,8 @@ describe("Multi Input on mobile device", () => {
1839 . as ( "multiInput" ) ;
1940
2041 cy . get ( "@multiInput" )
42+ . shadow ( )
43+ . find ( ".ui5-input-inner" )
2144 . realClick ( ) ;
2245
2346 cy . get ( "@multiInput" )
@@ -44,4 +67,149 @@ describe("Multi Input on mobile device", () => {
4467 . should ( "have.value" , "test" ) ;
4568 cy . get ( "@onChange" ) . should ( "not.have.been.called" ) ;
4669 } ) ;
70+
71+ describe ( "Filter-Selected Button" , ( ) => {
72+ it ( "Filter-selected button state changes when tokens are added/removed" , ( ) => {
73+ cy . mount (
74+ < >
75+ < MultiInput id = "test-multi-input" showSuggestions >
76+ < SuggestionItem text = "Argentina" > </ SuggestionItem >
77+ < SuggestionItem text = "Brazil" > </ SuggestionItem >
78+ < SuggestionItem text = "Canada" > </ SuggestionItem >
79+ </ MultiInput >
80+ < Button id = "add-token" > Add Token</ Button >
81+ </ >
82+ ) ;
83+
84+ cy . get ( "#add-token" ) . then ( button => {
85+ button [ 0 ] . addEventListener ( "click" , ( ) => {
86+ addTokenToMI ( createTokenFromText ( "Test Token" ) , "test-multi-input" ) ;
87+ } ) ;
88+ } ) ;
89+
90+ cy . get ( "#test-multi-input" ) . then ( multiInput => {
91+ multiInput [ 0 ] . addEventListener ( "ui5-token-delete" , handleTokenDelete ) ;
92+ } ) ;
93+
94+ cy . get ( "#test-multi-input" )
95+ . shadow ( )
96+ . find ( ".ui5-input-inner" )
97+ . realClick ( ) ;
98+
99+ cy . get ( "#test-multi-input" )
100+ . shadow ( )
101+ . find < ResponsivePopover > ( "[ui5-responsive-popover]" )
102+ . as ( "popover" )
103+ . ui5ResponsivePopoverOpened ( ) ;
104+
105+ // Assert: Button should be initially disabled (no tokens)
106+ cy . get ( "@popover" )
107+ . find ( "[ui5-toggle-button]" )
108+ . as ( "filterButton" )
109+ . should ( "have.attr" , "disabled" ) ;
110+
111+ cy . get ( "#test-multi-input" )
112+ . shadow ( )
113+ . find ( ".ui5-responsive-popover-close-btn" )
114+ . realClick ( ) ;
115+
116+ cy . get ( "#add-token" ) . realClick ( ) ;
117+
118+ cy . get ( "#test-multi-input" )
119+ . find ( "[ui5-token]" )
120+ . should ( "have.length" , 1 ) ;
121+
122+ cy . get ( "#test-multi-input" )
123+ . shadow ( )
124+ . find ( ".ui5-input-inner" )
125+ . realClick ( ) ;
126+
127+ cy . get < ResponsivePopover > ( "@popover" )
128+ . ui5ResponsivePopoverOpened ( ) ;
129+
130+ // Assert: Button should be enabled after adding a token
131+ cy . get ( "@filterButton" )
132+ . should ( "not.have.attr" , "disabled" )
133+ cy . get ( "@filterButton" )
134+ . should ( "have.attr" , "pressed" ) ;
135+
136+ cy . get ( "@popover" )
137+ . find ( "[ui5-li].ui5-suggestion-token-item" )
138+ . first ( )
139+ . shadow ( )
140+ . find ( "[ui5-button]" )
141+ . realClick ( ) ;
142+
143+ cy . get ( "#test-multi-input" )
144+ . find ( "[ui5-token]" )
145+ . should ( "have.length" , 0 ) ;
146+
147+ // Assert: Button should be disabled after removing all tokens
148+ cy . get ( "@filterButton" )
149+ . should ( "have.attr" , "disabled" ) ;
150+ } ) ;
151+
152+ it ( "Filter-selected button affects list content display" , ( ) => {
153+ cy . mount (
154+ < MultiInput id = "test-multi-input" showSuggestions >
155+ < Token slot = "tokens" text = "Token 1" > </ Token >
156+ < Token slot = "tokens" text = "Token 2" > </ Token >
157+ < Token slot = "tokens" text = "Token 3" > </ Token >
158+ < SuggestionItem text = "Argentina" > </ SuggestionItem >
159+ < SuggestionItem text = "Brazil" > </ SuggestionItem >
160+ </ MultiInput >
161+ ) ;
162+
163+ cy . get ( "#test-multi-input" )
164+ . shadow ( )
165+ . find ( ".ui5-input-inner" )
166+ . click ( ) ;
167+
168+ cy . get ( "#test-multi-input" )
169+ . shadow ( )
170+ . find ( "[ui5-responsive-popover]" )
171+ . as ( "popover" )
172+
173+ cy . get ( "@popover" )
174+ . find ( "[ui5-toggle-button]" )
175+ . as ( "filterButton" ) ;
176+
177+ // Assert: Initially showing tokens (button pressed)
178+ cy . get ( "@filterButton" )
179+ . should ( "have.attr" , "pressed" ) ;
180+
181+ // Assert: Should see token list items
182+ cy . get ( "@popover" )
183+ . find ( "[ui5-list].ui5-tokenizer-list" )
184+ . should ( "exist" ) ;
185+
186+ cy . get ( "@popover" )
187+ . find ( "[ui5-li].ui5-suggestion-token-item" )
188+ . should ( "have.length" , 3 ) ;
189+
190+ // Act: Toggle to hide tokens
191+ cy . get ( "@filterButton" ) . realClick ( ) ;
192+
193+ // Assert: Should see suggestion items instead
194+ cy . get ( "@popover" )
195+ . find ( "[ui5-list]:not(.ui5-tokenizer-list)" )
196+ . should ( "exist" ) ;
197+
198+ cy . get ( "#test-multi-input" )
199+ . find ( "[ui5-suggestion-item]" )
200+ . should ( "have.length" , 2 ) ;
201+
202+ // Act: Toggle back to show tokens
203+ cy . get ( "@filterButton" ) . realClick ( ) ;
204+
205+ // Assert: Should see token list items again
206+ cy . get ( "@popover" )
207+ . find ( "[ui5-list].ui5-tokenizer-list" )
208+ . should ( "exist" ) ;
209+
210+ cy . get ( "@popover" )
211+ . find ( "[ui5-li].ui5-suggestion-token-item" )
212+ . should ( "have.length" , 3 ) ;
213+ } ) ;
214+ } ) ;
47215} ) ;
0 commit comments