mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-07-01 07:37:24 +00:00
Add UI E2E tests for the login page for OIDC being enabled and when it is disabled
This commit is contained in:
@ -10,6 +10,13 @@
|
||||
//
|
||||
|
||||
import 'cypress-wait-until';
|
||||
import {
|
||||
DEFAULT_ADMIN_EMAIL,
|
||||
DEFAULT_ADMIN_PASSWORD,
|
||||
TEST_USER_EMAIL,
|
||||
TEST_USER_NAME,
|
||||
TEST_USER_NICKNAME, TEST_USER_PASSWORD
|
||||
} from "./constants";
|
||||
|
||||
Cypress.Commands.add('randomString', (length) => {
|
||||
var result = '';
|
||||
@ -40,13 +47,118 @@ Cypress.Commands.add('validateSwaggerSchema', (method, code, path, data) => {
|
||||
}).should('equal', null);
|
||||
});
|
||||
|
||||
/**
|
||||
* Configure OIDC settings in the backend, so we can test scenarios around OIDC being enabled or disabled.
|
||||
*/
|
||||
Cypress.Commands.add('configureOidc', (enabled) => {
|
||||
cy.getToken().then((token) => {
|
||||
if (enabled) {
|
||||
cy.task('backendApiPut', {
|
||||
token: token,
|
||||
path: '/api/settings/oidc-config',
|
||||
data: {
|
||||
meta: {
|
||||
name: 'ACME OIDC Provider',
|
||||
clientID: 'clientID',
|
||||
clientSecret: 'clientSecret',
|
||||
// TODO: Create dummy OIDC provider for testing
|
||||
issuerURL: 'https://oidc.example.com',
|
||||
redirectURL: 'https://redirect.example.com/api/oidc/callback',
|
||||
enabled: true,
|
||||
}
|
||||
},
|
||||
})
|
||||
} else {
|
||||
cy.task('backendApiPut', {
|
||||
token: token,
|
||||
path: '/api/settings/oidc-config',
|
||||
data: {
|
||||
meta: {
|
||||
name: '',
|
||||
clientID: '',
|
||||
clientSecret: '',
|
||||
issuerURL: '',
|
||||
redirectURL: '',
|
||||
enabled: false,
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Create a new user in the backend for testing purposes.
|
||||
*
|
||||
* The created user will have a name, nickname, email, and password as defined in the constants file (TEST_USER_*).
|
||||
*
|
||||
* @param {boolean} withPassword Whether to create the user with a password or not (default: true)
|
||||
*/
|
||||
Cypress.Commands.add('createTestUser', (withPassword) => {
|
||||
if (withPassword === undefined) {
|
||||
withPassword = true;
|
||||
}
|
||||
|
||||
cy.getToken().then((token) => {
|
||||
cy.task('backendApiPost', {
|
||||
token: token,
|
||||
path: '/api/users',
|
||||
data: {
|
||||
name: TEST_USER_NAME,
|
||||
nickname: TEST_USER_NICKNAME,
|
||||
email: TEST_USER_EMAIL,
|
||||
roles: ['admin'],
|
||||
is_disabled: false,
|
||||
auth: withPassword ? {
|
||||
type: 'password',
|
||||
secret: TEST_USER_PASSWORD
|
||||
} : {}
|
||||
}
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Delete the test user from the backend.
|
||||
* The test user is identified by the email address defined in the constants file (TEST_USER_EMAIL).
|
||||
*
|
||||
* This command will only attempt to delete the test user if it exists.
|
||||
*/
|
||||
Cypress.Commands.add('deleteTestUser', () => {
|
||||
cy.getToken().then((token) => {
|
||||
cy.task('backendApiGet', {
|
||||
token: token,
|
||||
path: '/api/users',
|
||||
}).then((data) => {
|
||||
// Find the test user
|
||||
const testUser = data.find(user => user.email === TEST_USER_EMAIL);
|
||||
|
||||
// If the test user doesn't exist, we don't need to delete it
|
||||
if (!testUser) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Delete the test user
|
||||
cy.task('backendApiDelete', {
|
||||
token: token,
|
||||
path: `/api/users/${testUser.id}`,
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Get a new token from the backend.
|
||||
* The token will be created using the default admin email and password defined in the constants file (DEFAULT_ADMIN_*).
|
||||
*/
|
||||
Cypress.Commands.add('getToken', () => {
|
||||
// login with existing user
|
||||
cy.task('backendApiPost', {
|
||||
path: '/api/tokens',
|
||||
data: {
|
||||
identity: 'admin@example.com',
|
||||
secret: 'changeme'
|
||||
identity: DEFAULT_ADMIN_EMAIL,
|
||||
secret: DEFAULT_ADMIN_PASSWORD
|
||||
}
|
||||
}).then(res => {
|
||||
cy.wrap(res.token);
|
||||
|
16
test/cypress/support/constants.js
Normal file
16
test/cypress/support/constants.js
Normal file
@ -0,0 +1,16 @@
|
||||
// Description: Constants used in the tests.
|
||||
|
||||
/**
|
||||
* The default admin user is used to get tokens from the backend API to make requests.
|
||||
* It is also used to create the test user.
|
||||
*/
|
||||
export const DEFAULT_ADMIN_EMAIL = Cypress.env('DEFAULT_ADMIN_EMAIL') || 'admin@example.com';
|
||||
export const DEFAULT_ADMIN_PASSWORD = Cypress.env('DEFAULT_ADMIN_PASSWORD') || 'changeme';
|
||||
|
||||
/**
|
||||
* The test user is created and deleted by the tests using `cy.createTestUser()` and `cy.deleteTestUser()`.
|
||||
*/
|
||||
export const TEST_USER_NAME = 'Robert Ross';
|
||||
export const TEST_USER_NICKNAME = 'Bob';
|
||||
export const TEST_USER_EMAIL = 'bob@ross.com';
|
||||
export const TEST_USER_PASSWORD = 'changeme';
|
Reference in New Issue
Block a user