Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 23 additions & 0 deletions packages/compass-e2e-tests/fixtures/ca.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIIDvzCCAqegAwIBAgIUWHODQPXBJh8z9c+OvakB5EWSGykwDQYJKoZIhvcNAQEL
BQAwbzELMAkGA1UEBhMCQVUxDDAKBgNVBAgMA05TVzEVMBMGA1UECgwMT3JnYW5p
c2F0aW9uMQwwCgYDVQQLDANDQXMxDTALBgNVBAMMBHJvb3QxHjAcBgkqhkiG9w0B
CQEWD3VzZXJAZG9tYWluLmNvbTAeFw0yMjAxMTExOTAyMDhaFw0zMjAxMDkxOTAy
MDhaMG8xCzAJBgNVBAYTAkFVMQwwCgYDVQQIDANOU1cxFTATBgNVBAoMDE9yZ2Fu
aXNhdGlvbjEMMAoGA1UECwwDQ0FzMQ0wCwYDVQQDDARyb290MR4wHAYJKoZIhvcN
AQkBFg91c2VyQGRvbWFpbi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC71ot540Z/uAZDXxUUacY8nScIFOeTeUAqVi4Dct5k7+PYe1HKOCtV+Uzk
98Wjys9GIrl7IQnk9cyLfqPQzc9/fc0zGYtMeQZY3DcrGfUOEoCxNIawBIkJHrL9
2pynlyvjFV5Ve3/inwZZuuX1HbQJMm4kVrWijjxaKJjtTYxmYDQtNdbi0aa00QCm
No4dk1/z2R2xiaMBledJvUwmVObfgshrNFhCCHb0d4X5buDNIj1J7gkxkxNMq0sH
mCgsnYqsdFeRPdf63+lQ+SEraeOieV0j2sPiZUjm7bGPotjQfGGXm6hiLM6Ut0N5
G+4StcmQjs+OAw0PwQNnp2cMHTVpAgMBAAGjUzBRMB0GA1UdDgQWBBThU9SZ3NLh
NrXDgNOaI+HOLPPhojAfBgNVHSMEGDAWgBThU9SZ3NLhNrXDgNOaI+HOLPPhojAP
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC3PXkIl1sTtgU1HcMZ
RTC8rRgeSdGX2w4fQqO98s4ZC4RPNj8hf2PGTJnkyhg+sySX2IXaNJnHKaSfMRU3
1UCDdubNHXTf+JIlcmrGYa/MYgcXHfjyZWhrUcNq64NFXglaG7EAf0IPZf3zlmiH
5y6PU0A1VDqfufKAdX2/fVFhOvI1oy8sk0nBLXcTEncPkxKRxul0/0C+gqXb6T/b
1vZybGyPBZzDCrm5bkNfeNSvbjOiJvfAEBcqsVObma858sYxJ4ijUdbJ9a7KivtY
V5noXQzx2gtUM9vY/NFBRk10YmSocQVi8+5zxrfMKkbFYhRJvp9mXOfXm9ohYrNh
JFIx
-----END CERTIFICATE-----
47 changes: 47 additions & 0 deletions packages/compass-e2e-tests/fixtures/client.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAwWV9IejXo0WIzq1I9EFUsvt/3xulyC1kyKzendGFPM/sedyT
qYpuu5/jvjpZT8AiGxhlcHkdIHgZGkhsw4TgZa1F7yIbvwXzbXp61n+2Vdrbau9/
etQWh4JdHPNBtI76oRlpcZFVNOmxLG6KGoR+VZD5Ep12aGDblW9u6tO4svHju+eO
yU17K9z6dAhlutBYxWTzjH5CWXPci+ETnjKdzLDixuX6qXqWm/iFN//6m3ZNYVgZ
bikxUpfr9lixOZ6kbdumhkqEMB/g7Ff1kA94Gh2GZrhEcFRijQCTynVnxK8bMRPr
7INYYt+Cq/n5XUtZNK6MgOdo7+GNpdokKXdxiQIDAQABAoIBAEFrbEXBNtiDGAEZ
uvjs9JLK4nl9J7osKNB9MZzfGBv3Fb4vMEAElOqg7nAV2spQavkRapb+USz/kzZB
05Db7PBYCbUXq50VjT+2U8ElWG94ZgqpU00gWzKhlY/Kdap3Ry6hovqIt/L7LjSi
e9L2iKm3LZnva/No+D53gGStE+hrtaEd2uJqWj+uo3RaEdI1mpkfUEPvon6mA5g8
lEPLPBwKX/U9qyVbvTS71nWd2SJ657ke7EAT4afMzBUbr5zNXPqK8y1l5aHINViu
SSIhf+TtRWiq+sVPpivAfYi+2hdNRbZj9pF/291SBukH5vX+1i8SFS0QTmjemp6/
e8IxYYECgYEA8RoQ9ShthSoTKf3YUtdqrXVP2ScBgZ/sf8DqvBkUfewmMuyHYNP5
fcNiddUMlfkywzr00TfGk80rCBdmR1B0z4qRN3HUdqbJkupZbgzy2gkgCRTIALSZ
WpQH4MNXPs8yWz6kY2y/1kOxeqXmIf22de7/yK8vvTiAuMtRlhghqzkCgYEAzVjI
PxGN3Gq/DOEOKARrJR7j86mnf03RYVENOTnm6pHofRIjMf9GA0IM6Abgs0f45Kv2
sfdDotNDS/xTq9qUOQHS1or8RVyOofjaTnZAfufm1zgi9xx7ymVTuehQ1T+JyXRi
nKICVbsERbjiMrGDudQnktr/B6I2E42o0yZH6NECgYB6uwsg0PiXTei9enOxD+lE
7S+9WcbBhngsPDcBkz7ELv7u80qitqUNKPWpB8/FVDpL+WoASoUyXcFm+ApfiQw9
TctITxCZaaO4vsTRaZQB+50sIkEBYu2hlzM/bhCub2ix2/xwhD5PQtxIk8THTtCf
zg60yMDjcKzN5OneHuCcuQKBgEXkK/PbY69b3b7ictEH//fYdbmfStU3hUZcMeYC
YSgBlWHMZJJF0myVdJMclCoxGvOp3ANip3Cp+0PHlCrv8HceucYv9AEfqaRTcOo3
sWgAQj+Kacw1s6SFrGOgQLL0N0+L/2xUb/sB9khMzyB17uG25elEBH1ypnktRALq
CpuhAoGAYSJhJ+mKXG2xVC4mvwddFbBIKytynm2viaH1s4sOX/lNk3x9/L4+A6Wm
WibJ3UNyAJ7MmwAGgFvGHHZGW6kiGRh20bk6dQQyzRWY6TQLQELeGUkYS8qClPSq
cH0eu97Q1vnagDk/FEDnE5mSrxWIakXo1xXnYvGJlahgPZD/718=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDWTCCAkECAQMwDQYJKoZIhvcNAQELBQAwbzELMAkGA1UEBhMCQVUxDDAKBgNV
BAgMA05TVzEVMBMGA1UECgwMT3JnYW5pc2F0aW9uMQwwCgYDVQQLDANDQXMxDTAL
BgNVBAMMBHJvb3QxHjAcBgkqhkiG9w0BCQEWD3VzZXJAZG9tYWluLmNvbTAeFw0y
MjAxMTExOTAyMDhaFw0zMjAxMDkxOTAyMDhaMHYxCzAJBgNVBAYTAkFVMQwwCgYD
VQQIDANOU1cxFTATBgNVBAoMDE9yZ2FuaXNhdGlvbjEQMA4GA1UECwwHY2xpZW50
czEQMA4GA1UEAwwHY2xpZW50MTEeMBwGCSqGSIb3DQEJARYPdXNlckBkb21haW4u
Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwWV9IejXo0WIzq1I
9EFUsvt/3xulyC1kyKzendGFPM/sedyTqYpuu5/jvjpZT8AiGxhlcHkdIHgZGkhs
w4TgZa1F7yIbvwXzbXp61n+2Vdrbau9/etQWh4JdHPNBtI76oRlpcZFVNOmxLG6K
GoR+VZD5Ep12aGDblW9u6tO4svHju+eOyU17K9z6dAhlutBYxWTzjH5CWXPci+ET
njKdzLDixuX6qXqWm/iFN//6m3ZNYVgZbikxUpfr9lixOZ6kbdumhkqEMB/g7Ff1
kA94Gh2GZrhEcFRijQCTynVnxK8bMRPr7INYYt+Cq/n5XUtZNK6MgOdo7+GNpdok
KXdxiQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQATnp2hYq7dYzcIlVSWji35JNHh
VJcteLNi7OVHHYADZk46a00/pKQCf0ACTQeK2xNNkpH9RNH8q1c0L4e2JuugCe/o
PEJQUmk2b39KqjUsGTkMt9GHoPUGOxP1aknUoUYTvOXzX4XcQAJgtpK7x7qiG0yR
rds48FIXSr9TQnEN/Ag65m+VrISKZ/IsHT/GpBqT+GlwS+2CXak4Omj870mIiny/
UzoEOHywzZ7hdQj9HQiatLFFIA52N+5H+Z5beCFSzdfEUn37TI8m04jZnApJxhRU
P7ghytVx0w4RdFAy4ttU+VUPT2tsPN3o4bpFSd/IRYGgB7bh9V2WxjCw7oTF
-----END CERTIFICATE-----
10 changes: 10 additions & 0 deletions packages/compass-e2e-tests/helpers/commands/click-parent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { CompassBrowser } from '../compass-browser';

export async function clickParent(
browser: CompassBrowser,
selector: string
): Promise<void> {
const element = await browser.$(selector).parentElement();
await element.waitForExist();
await element.click();
}
1 change: 1 addition & 0 deletions packages/compass-e2e-tests/helpers/commands/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@ export * from './get-query-id';
export * from './run-find';
export * from './export-to-language';
export * from './get-active-tab-namespace';
export * from './click-parent';
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,18 @@ export async function setValueVisible(
selector: string,
value: string
): Promise<void> {
const element = await browser.$(selector);
await element.waitForDisplayed();
await element.setValue(value);
await browser.waitUntil(
async () => {
const element = await browser.$(selector);
await element.waitForDisplayed();
await element.clearValue();
await element.setValue(value);
const actualValue = await element.getValue();
if (actualValue !== value) {
console.log(actualValue, '!==', value);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trying to debug this. Some race condition where sometimes it appends the connection string on at the end rather than clearing it first. Just leaving this console.log in to keep an eye on it.

}
return actualValue === value;
},
{ timeout: 60000 }
);
}
135 changes: 134 additions & 1 deletion packages/compass-e2e-tests/helpers/selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,143 @@ export const ConnectionFormInputUsername =
'[data-testid="connection-username-input"]';
export const ConnectionFormInputPassword =
'[data-testid="connection-password-input"]';

export const ConnectionFormErrorMessage =
'[data-testid="connection-error-summary"]';

export const AdvancedOptionsTabs = '[aria-label="Advanced Options Tabs"]';
export const SelectedAdvancedOptionsTab = `${AdvancedOptionsTabs} [aria-selected="true"]`;

export const ConnectionFormSchemeRadios =
'#connection-schema-radio-box-group input[type="radio"]';
export const ConnectionFormHostInputs =
'[aria-labelledby="connection-host-input-label"]';
export const ConnectionFormDirectConnectionCheckbox =
'#direct-connection-checkbox';
export const ConnectionFormAuthenticationMethodRadios =
'#authentication-method-radio-box-group input[type="radio"]';
export const ConnectionFormInputAuthSource = '#authSourceInput';
export const ConnectionFormAuthMechanismRadios =
'#authentication-mechanism-radio-box-group input[type="radio"]';
export const ConnectionFormInputGssApiPrincipal =
'[data-testid="gssapi-principal-input"]';
export const ConnectionFormInputGssApiServiceName =
'[data-testid="gssapi-service-name-input"]';
export const ConnectionFormCanonicalizeHostNameRadios =
'#canonicalize-hostname-select input[type="radio"]';
export const ConnectionFormInputGssApiServiceRealm =
'[data-testid="gssapi-service-realm-input"]';
export const ConnectionFormGssApiPasswordCheckbox =
'[data-testid="gssapi-password-checkbox"]';
export const ConnectionFormInputGssApiPassword =
'[data-testid="gssapi-password-input"]';
export const ConnectionFormInputPlainUsername =
'[data-testid="connection-plain-username-input"]';
export const ConnectionFormInputPlainPassword =
'[data-testid="connection-plain-password-input"]';
export const ConnectionFormInputAWSAccessKeyId =
'[data-testid="connection-form-aws-access-key-id-input"]';
export const ConnectionFormInputAWSSecretAccessKey =
'[data-testid="connection-form-aws-secret-access-key-input"]';
export const ConnectionFormInputAWSSessionToken =
'[data-testid="connection-form-aws-secret-token-input"]';
export const ConnectionFormSSLConnectionRadios =
'#connection-schema-radio-box-group input[type="radio"]';
export const ConnectionFormTlsCaButton = '#tlsCAFile';
export const ConnectionFormTlsCertificateKeyButton = '#tlsCertificateKeyFile';
export const ConnectionFormTlsCaFile = '[data-testid="tlsCAFile-input"]';
export const ConnectionFormTlsCertificateKeyFile =
'[data-testid="tlsCertificateKeyFile-input"]';
export const ConnectionFormInputTlsCertificateKeyFilePassword =
'[data-testid="tlsCertificateKeyFilePassword-input"]';
export const ConnectionFormTlsInsecureCheckbox =
'[data-testid="tlsInsecure-input"]';
export const ConnectionFormTlsAllowInvalidHostnamesCheckbox =
'[data-testid="tlsAllowInvalidHostnames-input"]';
export const ConnectionFormTlsAllowInvalidCertificatesCheckbox =
'[data-testid="tlsAllowInvalidCertificates-input"]';
export const ConnectionFormProxyMethodRadios =
'#ssh-options-radio-box-group input[type="radio"]';
export const ConnectionFormInputSshPasswordHost =
'[data-testid="ssh-password-tab-content"] [data-testid="host"]';
export const ConnectionFormInputSshPasswordPort =
'[data-testid="ssh-password-tab-content"] [data-testid="port"]';
export const ConnectionFormInputSshPasswordUsername =
'[data-testid="ssh-password-tab-content"] [data-testid="username"]';
export const ConnectionFormInputSshPasswordPassword =
'[data-testid="ssh-password-tab-content"] [data-testid="password"]';
export const ConnectionFormInputSshIdentityHost =
'[data-testid="ssh-identity-tab-content"] [data-testid="host"]';
export const ConnectionFormInputSshIdentityPort =
'[data-testid="ssh-identity-tab-content"] [data-testid="port"]';
export const ConnectionFormInputSshIdentityUsername =
'[data-testid="ssh-identity-tab-content"] [data-testid="username"]';
export const ConnectionFormSshIdentityKeyButton =
'[data-testid="ssh-identity-tab-content"] #identityKeyFile';
export const ConnectionFormSshIdentityKeyFile =
'[data-testid="ssh-identity-tab-content"] [data-testid="identityKeyFile"]';
export const ConnectionFormInputSshIdentityPassword =
'[data-testid="ssh-identity-tab-content"] [data-testid="identityKeyPassphrase"]';
export const ConnectionFormInputSocksHost =
'[data-testid="socks-tab-content"] [data-testid="proxyHost"]';
export const ConnectionFormInputSocksPort =
'[data-testid="socks-tab-content"] [data-testid="proxyPort"]';
export const ConnectionFormInputSocksUsername =
'[data-testid="socks-tab-content"] [data-testid="proxyUsername"]';
export const ConnectionFormInputSocksPassword =
'[data-testid="socks-tab-content"] [data-testid="proxyPassword"]';
export const ConnectionFormReadPreferenceRadios =
'#read-preferences input[type="radio"]';
export const ConnectionFormInputReplicaset =
'[data-testid="connection-advanced-tab"] [data-testid="replica-set"]';
export const ConnectionFormInputDefaultDatabase =
'[data-testid="connection-advanced-tab"] [data-testid="default-database"]';
export const ConnectionFormUrlOptionKeys =
'[data-testid="connection-advanced-tab"] button[name="name"]';
export const ConnectionFormUrlOptionValues =
'[data-testid="connection-advanced-tab"] input[aria-labelledby="Enter value"]';

export const advancedOptionsTab = (tabName: string): string => {
return `${AdvancedOptionsTabs} button[name="${tabName}"]`;
};
export const advancedOptionsTabPanel = (tabName: string): string => {
return `[role="tabpanel"][aria-label="${tabName}"]`;
};
export const connectionFormSchemeRadio = (value: string): string => {
return `#connection-schema-radio-box-group input[value="${value}"]`;
};
export const connectionFormAuthenticationMethodRadio = (
value: string
): string => {
return `#authentication-method-radio-box-group input[value="${value}"]`;
};
export const connectionFormAuthMechanismRadio = (value: string): string => {
return `#authentication-mechanism-radio-box-group input[value="${value}"]`;
};
export const connectionFormCanonicalizeHostNameRadio = (
value: string
): string => {
return `#canonicalize-hostname-select input[value="${value}"]`;
};
export const connectionFormSSLConnectionRadio = (value: string): string => {
return `#connection-schema-radio-box-group input[value="${value}"]`;
};
export const connectionFormProxyMethodRadio = (value: string): string => {
return `#ssh-options-radio-box-group input[value="${value}"]`;
};
export const connectionFormReadPreferenceRadio = (value: string): string => {
return `#read-preferences input[value="${value}"]`;
};
export const connectionFormUrlOptionKeyButton = (index: number): string => {
return `[data-testid="url-options-table"] tr:nth-child(${
index + 1
}) button[name="name"]`;
};
export const connectionFormUrlOptionValueInput = (index: number): string => {
return `[data-testid="url-options-table"] tr:nth-child(${
index + 1
}) input[aria-labelledby="Enter value"]`;
};

// Connection Sidebar
export const SidebarTreeItems =
'[data-test-id="databases-and-collections"] [role="treeitem"]';
Expand Down
Loading