@@ -7,7 +7,7 @@ export class AddRedisDatabasePage {
7
7
//*Target any element/component via data-id, if possible!
8
8
//*The following categories are ordered alphabetically (Alerts, Buttons, Checkboxes, etc.).
9
9
//-------------------------------------------------------------------------------------------
10
- //BUTTONS
10
+ // BUTTONS
11
11
addDatabaseButton = Selector ( '[data-testid=add-redis-database]' ) ;
12
12
addRedisDatabaseButton = Selector ( '[data-testid=btn-submit]' ) ;
13
13
addDatabaseManually = Selector ( '[data-testid=add-manual]' ) ;
@@ -29,7 +29,7 @@ export class AddRedisDatabasePage {
29
29
cloneSentinelDatabaseNavigation = Selector ( '[data-testid=database-nav-group-clone]' ) ;
30
30
cancelButton = Selector ( '[data-testid=btn-cancel]' ) ;
31
31
showPasswordBtn = Selector ( '[aria-label^="Show password"]' ) ;
32
- //TEXT INPUTS (also referred to as 'Text fields')
32
+ // TEXT INPUTS (also referred to as 'Text fields')
33
33
hostInput = Selector ( '[data-testid=host]' ) ;
34
34
portInput = Selector ( '[data-testid=port]' ) ;
35
35
databaseAliasInput = Selector ( '[data-testid=name]' ) ;
@@ -45,13 +45,24 @@ export class AddRedisDatabasePage {
45
45
masterGroupPassword = Selector ( '[data-testid=sentinel-master-password]' ) ;
46
46
connectionType = Selector ( '[data-testid=connection-type]' ) ;
47
47
sentinelForm = Selector ( '[data-testid=form]' ) ;
48
- //Links
48
+ sshHostInput = Selector ( '[data-testid=sshHost]' ) ;
49
+ sshPortInput = Selector ( '[data-testid=sshPort]' ) ;
50
+ sshUsernameInput = Selector ( '[data-testid=sshUsername]' ) ;
51
+ sshPasswordInput = Selector ( '[data-testid=sshPassword]' ) ;
52
+ sshPrivateKeyInput = Selector ( '[data-testid=sshPrivateKey]' ) ;
53
+ sshPassphraseInput = Selector ( '[data-testid=sshPassphrase]' ) ;
54
+ // Links
49
55
buildFromSource = Selector ( 'a' ) . withExactText ( 'Build from source' ) ;
50
56
buildFromDocker = Selector ( 'a' ) . withExactText ( 'Docker' ) ;
51
57
buildFromHomebrew = Selector ( 'a' ) . withExactText ( 'Homebrew' ) ;
52
58
// DROPDOWNS
53
59
caCertField = Selector ( '[data-testid=select-ca-cert]' , { timeout : 500 } ) ;
54
60
clientCertField = Selector ( '[data-testid=select-cert]' , { timeout : 500 } ) ;
61
+ // CHECKBOXES
62
+ useSSHCheckbox = Selector ( '[data-testid=use-ssh]~div' , { timeout : 500 } ) ;
63
+ // RADIO BUTTONS
64
+ sshPasswordRadioBtn = Selector ( '#password~div' , { timeout : 500 } ) ;
65
+ sshPrivateKeyRadioBtn = Selector ( '#privateKey~div' , { timeout : 500 } ) ;
55
66
56
67
/**
57
68
* Adding a new redis database
@@ -99,6 +110,50 @@ export class AddRedisDatabasePage {
99
110
// Click for saving
100
111
await t . click ( this . addRedisDatabaseButton ) ;
101
112
}
113
+
114
+ /**
115
+ * Adding a new standalone database with SSH
116
+ * @param databaseParameters the parameters of the database
117
+ * @param sshParameters the parameters of ssh
118
+ */
119
+ async addStandaloneSSHDatabase ( databaseParameters : AddNewDatabaseParameters , sshParameters : SSHParameters ) : Promise < void > {
120
+ await t
121
+ . click ( this . addDatabaseButton )
122
+ . click ( this . addDatabaseManually ) ;
123
+ await t
124
+ . typeText ( this . hostInput , databaseParameters . host , { replace : true , paste : true } )
125
+ . typeText ( this . portInput , databaseParameters . port , { replace : true , paste : true } )
126
+ . typeText ( this . databaseAliasInput , databaseParameters . databaseName ! , { replace : true , paste : true } ) ;
127
+ if ( ! ! databaseParameters . databaseUsername ) {
128
+ await t . typeText ( this . usernameInput , databaseParameters . databaseUsername , { replace : true , paste : true } ) ;
129
+ }
130
+ if ( ! ! databaseParameters . databasePassword ) {
131
+ await t . typeText ( this . passwordInput , databaseParameters . databasePassword , { replace : true , paste : true } ) ;
132
+ }
133
+ // Select SSH Tunnel checkbox
134
+ await t . click ( this . useSSHCheckbox ) ;
135
+ // Enter SSH fields
136
+ await t
137
+ . typeText ( this . sshHostInput , sshParameters . sshHost , { replace : true , paste : true } )
138
+ . typeText ( this . sshPortInput , sshParameters . sshPort , { replace : true , paste : true } )
139
+ . typeText ( this . sshUsernameInput , sshParameters . sshUsername , { replace : true , paste : true } ) ;
140
+ if ( ! ! sshParameters . sshPassword ) {
141
+ await t . typeText ( this . sshPasswordInput , sshParameters . sshPassword , { replace : true , paste : true } ) ;
142
+ }
143
+ if ( ! ! sshParameters . sshPrivateKey ) {
144
+ await t
145
+ . click ( this . sshPrivateKeyRadioBtn )
146
+ . typeText ( this . sshPrivateKeyInput , sshParameters . sshPrivateKey , { replace : true , paste : true } ) ;
147
+ }
148
+ if ( ! ! sshParameters . sshPassphrase ) {
149
+ await t
150
+ . click ( this . sshPrivateKeyRadioBtn )
151
+ . typeText ( this . sshPrivateKeyInput , sshParameters . sshPrivateKey ! , { replace : true , paste : true } )
152
+ . typeText ( this . sshPassphraseInput , sshParameters . sshPassphrase , { replace : true , paste : true } ) ;
153
+ }
154
+ // Click for saving
155
+ await t . click ( this . addRedisDatabaseButton ) ;
156
+ }
102
157
103
158
/**
104
159
* Auto-discover Master Groups from Sentinel
@@ -240,3 +295,21 @@ export type ClusterNodes = {
240
295
host : string ,
241
296
port : string
242
297
} ;
298
+
299
+ /**
300
+ * SSH parameters
301
+ * @param sshHost The hostname of ssh
302
+ * @param sshPort The port of ssh
303
+ * @param sshUsername The username of ssh
304
+ * @param sshPassword The password of ssh
305
+ * @param sshPrivateKey The private key of ssh
306
+ * @param sshPassphrase The passphrase of ssh
307
+ */
308
+ export type SSHParameters = {
309
+ sshHost : string ,
310
+ sshPort : string ,
311
+ sshUsername : string ,
312
+ sshPassword ?: string ,
313
+ sshPrivateKey ?: string ,
314
+ sshPassphrase ?: string
315
+ } ;
0 commit comments