@@ -42,11 +42,135 @@ test('Create a blueprint with Systemd customization', async ({
4242 await test . step ( 'Navigate to optional steps in Wizard' , async ( ) => {
4343 await fillInImageOutput ( frame ) ;
4444 await registerLater ( frame ) ;
45+ await frame . getByRole ( 'button' , { name : 'Systemd services' } ) . click ( ) ;
4546 } ) ;
4647
47- await test . step ( 'Select and correctly fill all of the service fields' , async ( ) => {
48- await frame . getByRole ( 'button' , { name : 'Systemd services' } ) . click ( ) ;
48+ await test . step ( 'Enabled services: shows all chips when 4 or fewer' , async ( ) => {
49+ const enabledInput = frame . getByPlaceholder ( 'Add enabled service' ) ;
50+ for ( const service of [
51+ 'sshd.service' ,
52+ 'httpd.service' ,
53+ 'nginx.service' ,
54+ 'crond.service' ,
55+ ] ) {
56+ await enabledInput . fill ( service ) ;
57+ await page . keyboard . press ( 'Enter' ) ;
58+ }
59+
60+ await expect ( frame . getByText ( 'sshd.service' ) ) . toBeVisible ( ) ;
61+ await expect ( frame . getByText ( 'httpd.service' ) ) . toBeVisible ( ) ;
62+ await expect ( frame . getByText ( 'nginx.service' ) ) . toBeVisible ( ) ;
63+ await expect ( frame . getByText ( 'crond.service' ) ) . toBeVisible ( ) ;
64+ await expect ( frame . getByText ( / ^ \d + m o r e $ / ) ) . toBeHidden ( ) ;
65+ } ) ;
66+
67+ await test . step ( 'Enabled services: collapses and shows "X more" when more than 4' , async ( ) => {
68+ const enabledInput = frame . getByPlaceholder ( 'Add enabled service' ) ;
69+ for ( const service of [ 'rsyslog.service' , 'chronyd.service' ] ) {
70+ await enabledInput . fill ( service ) ;
71+ await page . keyboard . press ( 'Enter' ) ;
72+ }
73+
74+ await expect ( frame . getByText ( 'sshd.service' ) ) . toBeVisible ( ) ;
75+ await expect ( frame . getByText ( 'rsyslog.service' ) ) . toBeHidden ( ) ;
76+ await expect ( frame . getByText ( 'chronyd.service' ) ) . toBeHidden ( ) ;
77+ await expect ( frame . getByText ( '2 more' ) . first ( ) ) . toBeVisible ( ) ;
78+ } ) ;
79+
80+ await test . step ( 'Enabled services: expands and collapses' , async ( ) => {
81+ await frame . getByText ( '2 more' ) . first ( ) . click ( ) ;
82+ await expect ( frame . getByText ( 'rsyslog.service' ) ) . toBeVisible ( ) ;
83+ await expect ( frame . getByText ( 'chronyd.service' ) ) . toBeVisible ( ) ;
84+ await expect ( frame . getByText ( 'Show less' ) . first ( ) ) . toBeVisible ( ) ;
85+
86+ await frame . getByText ( 'Show less' ) . first ( ) . click ( ) ;
87+ await expect ( frame . getByText ( 'rsyslog.service' ) ) . toBeHidden ( ) ;
88+ await expect ( frame . getByText ( 'chronyd.service' ) ) . toBeHidden ( ) ;
89+ await expect ( frame . getByText ( '2 more' ) . first ( ) ) . toBeVisible ( ) ;
90+ } ) ;
4991
92+ await test . step ( 'Disabled services: collapses and shows "X more" when more than 4' , async ( ) => {
93+ const disabledInput = frame . getByPlaceholder ( 'Add disabled service' ) ;
94+ for ( const service of [
95+ 'cups.service' ,
96+ 'avahi-daemon.service' ,
97+ 'bluetooth.service' ,
98+ 'ModemManager.service' ,
99+ 'postfix.service' ,
100+ ] ) {
101+ await disabledInput . fill ( service ) ;
102+ await page . keyboard . press ( 'Enter' ) ;
103+ }
104+
105+ await expect ( frame . getByText ( 'cups.service' ) ) . toBeVisible ( ) ;
106+ await expect ( frame . getByText ( 'avahi-daemon.service' ) ) . toBeVisible ( ) ;
107+ await expect ( frame . getByText ( 'bluetooth.service' ) ) . toBeVisible ( ) ;
108+ await expect ( frame . getByText ( 'ModemManager.service' ) ) . toBeVisible ( ) ;
109+ await expect ( frame . getByText ( 'postfix.service' ) ) . toBeHidden ( ) ;
110+ await expect ( frame . getByText ( '1 more' ) . first ( ) ) . toBeVisible ( ) ;
111+ } ) ;
112+
113+ await test . step ( 'Masked services: collapses and shows "X more" when more than 4' , async ( ) => {
114+ const maskedInput = frame . getByPlaceholder ( 'Add masked service' ) ;
115+ for ( const service of [
116+ 'firewalld.service' ,
117+ 'iptables.service' ,
118+ 'nftables.service' ,
119+ 'ip6tables.service' ,
120+ 'ebtables.service' ,
121+ ] ) {
122+ await maskedInput . fill ( service ) ;
123+ await page . keyboard . press ( 'Enter' ) ;
124+ }
125+
126+ await expect ( frame . getByText ( 'firewalld.service' ) ) . toBeVisible ( ) ;
127+ await expect ( frame . getByText ( 'iptables.service' ) ) . toBeVisible ( ) ;
128+ await expect ( frame . getByText ( 'nftables.service' ) ) . toBeVisible ( ) ;
129+ await expect ( frame . getByText ( 'ip6tables.service' ) ) . toBeVisible ( ) ;
130+ await expect ( frame . getByText ( 'ebtables.service' ) ) . toBeHidden ( ) ;
131+ await expect ( frame . getByText ( '1 more' ) . nth ( 1 ) ) . toBeVisible ( ) ;
132+ } ) ;
133+
134+ await test . step ( 'Clean up chip collapse test chips' , async ( ) => {
135+ // Clean up enabled services
136+ await frame . getByText ( '2 more' ) . first ( ) . click ( ) ;
137+ for ( const service of [
138+ 'chronyd.service' ,
139+ 'rsyslog.service' ,
140+ 'crond.service' ,
141+ 'nginx.service' ,
142+ 'httpd.service' ,
143+ 'sshd.service' ,
144+ ] ) {
145+ await frame . getByRole ( 'button' , { name : `Close ${ service } ` } ) . click ( ) ;
146+ }
147+
148+ // Clean up disabled services
149+ await frame . getByText ( '1 more' ) . first ( ) . click ( ) ;
150+ for ( const service of [
151+ 'postfix.service' ,
152+ 'ModemManager.service' ,
153+ 'bluetooth.service' ,
154+ 'avahi-daemon.service' ,
155+ 'cups.service' ,
156+ ] ) {
157+ await frame . getByRole ( 'button' , { name : `Close ${ service } ` } ) . click ( ) ;
158+ }
159+
160+ // Clean up masked services
161+ await frame . getByText ( '1 more' ) . first ( ) . click ( ) ;
162+ for ( const service of [
163+ 'ebtables.service' ,
164+ 'ip6tables.service' ,
165+ 'nftables.service' ,
166+ 'iptables.service' ,
167+ 'firewalld.service' ,
168+ ] ) {
169+ await frame . getByRole ( 'button' , { name : `Close ${ service } ` } ) . click ( ) ;
170+ }
171+ } ) ;
172+
173+ await test . step ( 'Select and correctly fill all of the service fields' , async ( ) => {
50174 await frame
51175 . getByPlaceholder ( 'Add disabled service' )
52176 . fill ( 'systemd-dis.service' ) ;
0 commit comments