Skip to content

Commit 92e8d74

Browse files
committed
Add Login Selector functional tests.
1 parent 3cbb849 commit 92e8d74

20 files changed

Lines changed: 526 additions & 131 deletions

File tree

test/functional/page_objects/common_page.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export function CommonPageProvider({ getService, getPageObjects }: FtrProviderCo
3434
const find = getService('find');
3535
const globalNav = getService('globalNav');
3636
const testSubjects = getService('testSubjects');
37-
const PageObjects = getPageObjects(['shield']);
37+
const PageObjects = getPageObjects(['login']);
3838

3939
const defaultTryTimeout = config.get('timeouts.try');
4040
const defaultFindTimeout = config.get('timeouts.find');
@@ -76,12 +76,12 @@ export function CommonPageProvider({ getService, getPageObjects }: FtrProviderCo
7676
if (loginPage && !wantedLoginPage) {
7777
log.debug('Found login page');
7878
if (config.get('security.disableTestUser')) {
79-
await PageObjects.shield.login(
79+
await PageObjects.login.login(
8080
config.get('servers.kibana.username'),
8181
config.get('servers.kibana.password')
8282
);
8383
} else {
84-
await PageObjects.shield.login('test_user', 'changeme');
84+
await PageObjects.login.login('test_user', 'changeme');
8585
}
8686

8787
await find.byCssSelector(

test/functional/page_objects/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { HomePageProvider } from './home_page';
2828
import { NewsfeedPageProvider } from './newsfeed_page';
2929
import { SettingsPageProvider } from './settings_page';
3030
import { SharePageProvider } from './share_page';
31-
import { ShieldPageProvider } from './shield_page';
31+
import { LoginPageProvider } from './login_page';
3232
import { TimePickerProvider } from './time_picker';
3333
import { TimelionPageProvider } from './timelion_page';
3434
import { VisualBuilderPageProvider } from './visual_builder_page';
@@ -51,7 +51,7 @@ export const pageObjects = {
5151
newsfeed: NewsfeedPageProvider,
5252
settings: SettingsPageProvider,
5353
share: SharePageProvider,
54-
shield: ShieldPageProvider,
54+
login: LoginPageProvider,
5555
timelion: TimelionPageProvider,
5656
timePicker: TimePickerProvider,
5757
visualBuilder: VisualBuilderPageProvider,

test/functional/page_objects/shield_page.ts renamed to test/functional/page_objects/login_page.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@
1919

2020
import { FtrProviderContext } from '../ftr_provider_context';
2121

22-
export function ShieldPageProvider({ getService }: FtrProviderContext) {
22+
export function LoginPageProvider({ getService }: FtrProviderContext) {
2323
const testSubjects = getService('testSubjects');
2424

25-
class ShieldPage {
25+
class LoginPage {
2626
async login(user: string, pwd: string) {
2727
await testSubjects.setValue('loginUsername', user);
2828
await testSubjects.setValue('loginPassword', pwd);
2929
await testSubjects.click('loginSubmit');
3030
}
3131
}
3232

33-
return new ShieldPage();
33+
return new LoginPage();
3434
}

x-pack/plugins/security/public/authentication/login/components/login_form/login_form.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ export class LoginForm extends Component<Props, State> {
262262
{this.props.selector.providers.map(provider => (
263263
<button
264264
key={provider.name}
265+
data-test-subj={`loginCard-${provider.type}/${provider.name}`}
265266
disabled={!this.isLoadingState(LoadingStateType.None)}
266267
onClick={() =>
267268
provider.usesLoginForm

x-pack/scripts/functional_tests.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ const alwaysImportedTests = [
99
require.resolve('../test/functional_endpoint_ingest_failure/config.ts'),
1010
require.resolve('../test/functional_endpoint/config.ts'),
1111
require.resolve('../test/functional_with_es_ssl/config.ts'),
12-
require.resolve('../test/functional/config_security_basic.js'),
12+
require.resolve('../test/functional/config_security_basic.ts'),
13+
require.resolve('../test/functional/config_security_trial.ts'),
1314
require.resolve('../test/plugin_functional/config.ts'),
1415
];
1516
const onlyNotInCoverageTests = [

x-pack/test/functional/apps/security/security.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export default function({ getService, getPageObjects }: FtrProviderContext) {
6767
});
6868

6969
it('logging out of a non-default space redirects to the login page at the server root', async () => {
70-
await PageObjects.security.login(null, null, {
70+
await PageObjects.security.login(undefined, undefined, {
7171
expectSpaceSelector: true,
7272
});
7373

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License;
4+
* you may not use this file except in compliance with the Elastic License.
5+
*/
6+
7+
import { FtrProviderContext } from '../../../ftr_provider_context';
8+
9+
export default function({ loadTestFile }: FtrProviderContext) {
10+
describe('security app - login selector - trial license', function() {
11+
this.tags('ciGroup4');
12+
13+
loadTestFile(require.resolve('./login_selector'));
14+
});
15+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License;
4+
* you may not use this file except in compliance with the Elastic License.
5+
*/
6+
7+
import expect from '@kbn/expect';
8+
import { FtrProviderContext } from '../../../ftr_provider_context';
9+
10+
export default function({ getService, getPageObjects }: FtrProviderContext) {
11+
const esArchiver = getService('esArchiver');
12+
const testSubjects = getService('testSubjects');
13+
const browser = getService('browser');
14+
const PageObjects = getPageObjects(['security', 'common']);
15+
16+
describe('Login Selector', function() {
17+
this.tags('includeFirefox');
18+
19+
before(async () => {
20+
await getService('esSupertest')
21+
.post('/_security/role_mapping/saml1')
22+
.send({ roles: ['superuser'], enabled: true, rules: { field: { 'realm.name': 'saml1' } } })
23+
.expect(200);
24+
25+
await esArchiver.load('empty_kibana');
26+
await PageObjects.security.forceLogout();
27+
});
28+
29+
after(async () => {
30+
await esArchiver.unload('empty_kibana');
31+
});
32+
33+
beforeEach(async () => {
34+
await browser.get(`${PageObjects.common.getHostPort()}/login`);
35+
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible();
36+
});
37+
38+
afterEach(async () => {
39+
await PageObjects.security.forceLogout();
40+
});
41+
42+
it('can login with Login Form', async () => {
43+
await PageObjects.security.loginSelector.login('basic', 'basic1');
44+
});
45+
46+
it('can login with SSO', async () => {
47+
await PageObjects.security.loginSelector.login('saml', 'saml1');
48+
});
49+
50+
it('should show toast with error if SSO fails', async () => {
51+
await PageObjects.security.loginSelector.selectLoginMethod('saml', 'unknown_saml');
52+
53+
const toastTitle = await PageObjects.common.closeToast();
54+
expect(toastTitle).to.eql('Could not perform login.');
55+
56+
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible();
57+
});
58+
59+
it('can go to Login Form and return back to Selector', async () => {
60+
await PageObjects.security.loginSelector.selectLoginMethod('basic', 'basic1');
61+
await PageObjects.security.loginSelector.verifyLoginFormIsVisible();
62+
63+
await testSubjects.click('loginBackToSelector');
64+
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible();
65+
66+
await PageObjects.security.loginSelector.login('saml', 'saml1');
67+
});
68+
69+
it('can show Login Help from both Login Selector and Login Form', async () => {
70+
// Show Login Help from Login Selector.
71+
await testSubjects.click('loginHelpLink');
72+
await PageObjects.security.loginSelector.verifyLoginHelpIsVisible('Some-login-help.');
73+
74+
// Go back to Login Selector.
75+
await testSubjects.click('loginBackToLoginLink');
76+
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible();
77+
78+
// Go to Login Form and show Login Help there.
79+
await PageObjects.security.loginSelector.selectLoginMethod('basic', 'basic1');
80+
await PageObjects.security.loginSelector.verifyLoginFormIsVisible();
81+
await testSubjects.click('loginHelpLink');
82+
await PageObjects.security.loginSelector.verifyLoginHelpIsVisible('Some-login-help.');
83+
84+
// Go back to Login Form.
85+
await testSubjects.click('loginBackToLoginLink');
86+
await PageObjects.security.loginSelector.verifyLoginFormIsVisible();
87+
88+
// Go back to Login Selector and show Login Help there again.
89+
await testSubjects.click('loginBackToSelector');
90+
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible();
91+
await testSubjects.click('loginHelpLink');
92+
await PageObjects.security.loginSelector.verifyLoginHelpIsVisible('Some-login-help.');
93+
94+
// Go back to Login Selector.
95+
await testSubjects.click('loginBackToLoginLink');
96+
await PageObjects.security.loginSelector.verifyLoginSelectorIsVisible();
97+
});
98+
});
99+
}

x-pack/test/functional/apps/spaces/copy_saved_objects.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export default function spaceSelectorFunctonalTests({
3232
disabledFeatures: [],
3333
});
3434

35-
await PageObjects.security.login(null, null, {
35+
await PageObjects.security.login(undefined, undefined, {
3636
expectSpaceSelector: true,
3737
});
3838

x-pack/test/functional/apps/spaces/enter_space.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default function enterSpaceFunctonalTests({
2727
it('falls back to the default home page when the configured default route is malformed', async () => {
2828
const spaceId = 'default';
2929

30-
await PageObjects.security.login(null, null, {
30+
await PageObjects.security.login(undefined, undefined, {
3131
expectSpaceSelector: true,
3232
});
3333

@@ -39,7 +39,7 @@ export default function enterSpaceFunctonalTests({
3939
it('allows user to navigate to different spaces, respecting the configured default route', async () => {
4040
const spaceId = 'another-space';
4141

42-
await PageObjects.security.login(null, null, {
42+
await PageObjects.security.login(undefined, undefined, {
4343
expectSpaceSelector: true,
4444
});
4545

0 commit comments

Comments
 (0)