open-vault/ui/tests/unit/machines/secrets-machine-test.js

1071 lines
28 KiB
JavaScript
Raw Normal View History

import { module, test } from 'qunit';
import { Machine } from 'xstate';
import SecretsMachineConfig from 'vault/machines/secrets-machine';
module('Unit | Machine | secrets-machine', function() {
const secretsMachine = Machine(SecretsMachineConfig);
const testCases = [
{
currentState: secretsMachine.initialState,
event: 'CONTINUE',
params: null,
expectedResults: {
value: 'enable',
actions: [
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
{ component: 'wizard/secrets-enable', level: 'step', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'aws',
expectedResults: {
value: 'details',
actions: [
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
{ component: 'wizard/secrets-details', level: 'step', type: 'render' },
],
},
},
{
currentState: 'details',
event: 'CONTINUE',
params: 'aws',
expectedResults: {
value: 'role',
actions: [
{ component: 'wizard/secrets-role', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'role',
event: 'CONTINUE',
params: 'aws',
expectedResults: {
value: 'displayRole',
actions: [
{ component: 'wizard/secrets-display-role', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'displayRole',
event: 'CONTINUE',
params: 'aws',
expectedResults: {
value: 'credentials',
actions: [
{ component: 'wizard/secrets-credentials', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'credentials',
event: 'CONTINUE',
params: 'aws',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'REPEAT',
params: 'aws',
expectedResults: {
value: 'role',
actions: [
{
params: ['vault.cluster.secrets.backend.create-root'],
type: 'routeTransition',
},
{ component: 'wizard/secrets-role', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'aws',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'aws',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'aws',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'pki',
expectedResults: {
value: 'details',
actions: [
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
{ component: 'wizard/secrets-details', level: 'step', type: 'render' },
],
},
},
{
currentState: 'details',
event: 'CONTINUE',
params: 'pki',
expectedResults: {
value: 'role',
actions: [
{ component: 'wizard/secrets-role', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'role',
event: 'CONTINUE',
params: 'pki',
expectedResults: {
value: 'displayRole',
actions: [
{ component: 'wizard/secrets-display-role', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'displayRole',
event: 'CONTINUE',
params: 'pki',
expectedResults: {
value: 'credentials',
actions: [
{ component: 'wizard/secrets-credentials', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'credentials',
event: 'CONTINUE',
params: 'pki',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'REPEAT',
params: 'pki',
expectedResults: {
value: 'role',
actions: [
{
params: ['vault.cluster.secrets.backend.create-root'],
type: 'routeTransition',
},
{ component: 'wizard/secrets-role', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'pki',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'pki',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'pki',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'ssh',
expectedResults: {
value: 'details',
actions: [
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
{ component: 'wizard/secrets-details', level: 'step', type: 'render' },
],
},
},
{
currentState: 'details',
event: 'CONTINUE',
params: 'ssh',
expectedResults: {
value: 'role',
actions: [
{ component: 'wizard/secrets-role', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'role',
event: 'CONTINUE',
params: 'ssh',
expectedResults: {
value: 'displayRole',
actions: [
{ component: 'wizard/secrets-display-role', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'displayRole',
event: 'CONTINUE',
params: 'ssh',
expectedResults: {
value: 'credentials',
actions: [
{ component: 'wizard/secrets-credentials', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'credentials',
event: 'CONTINUE',
params: 'ssh',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'REPEAT',
params: 'ssh',
expectedResults: {
value: 'role',
actions: [
{
params: ['vault.cluster.secrets.backend.create-root'],
type: 'routeTransition',
},
{ component: 'wizard/secrets-role', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'ssh',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'ssh',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'ssh',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'ad',
expectedResults: {
value: 'list',
actions: [
{ type: 'render', level: 'step', component: 'wizard/secrets-list' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
},
},
{
currentState: 'list',
event: 'CONTINUE',
params: 'ad',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'ad',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'ad',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'ad',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'consul',
expectedResults: {
value: 'list',
actions: [
{ type: 'render', level: 'step', component: 'wizard/secrets-list' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
},
},
{
currentState: 'list',
event: 'CONTINUE',
params: 'consul',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'consul',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'consul',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'consul',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'database',
expectedResults: {
UI Database Secrets Engine (MongoDB) (#10655) * move the ttls on enable for db to default and not as options * refactor form field to angle brackets * add database to supported backend * initial setup of components and models * setup selectable cards, need to make own component * styling setup * subtext and links * number styling * search select put in place and button, all pretty things * search label text * messy but closer to data configuration. making models and fetching those models on routes * connection adapter and serializer that is pulled in by the overview route * clean up and add new model params connections and roles to overview route hbs * setting up overview as route with SecretHeader component. TODO, show Overview tab, but have link to route. It's going be on the secret header list component * setup overview tab on secret-list-header to go to overview page * setup id in overview route * Correct link on secrets engine list for database and others * Roles tab on database fetches correct model * Update options for backend with hasOverview param so overview tab is rendered conditionally on secret list header * create new getCrendentialsComponent * Rename database connection parent component and start working on display * setup routing to credentials route for database from overview page * setup network request for the credentials of role * setup serializer for credentials * redirect previous route * fix border color on button disable * add margin to back button * change to glimmer component * glimmerize and clean up the get-credentials-card * Begin database connection show and create form * add component test for the get-credentials-card * Database connection model and field groups * add static roles to searhSelect * add staticRoles on overview page * Toolbar and tabs on database connection show view looks correct * combine static and dynamic role models for pagination * Update database-list-item with real link to connection * Add support for optionalText edit type on form-field * handle situation when no static and/or dynamic roles * turn partial into component so can handle computed and eventually click actions, similar to transform * glimmerize database-list-item * use lazy capabilities on list role and static-role actions * Create connection works and redirects to show page * creds request based on dynamic or static and unload the store by record creds when they transition away. * dynamcially add in backend for queries * fixes on overview page for get credentials with hardcoded backend and layout for static creds * Rotate and Reset connection actions working on connection * get credentials set the query params * setup async for handling permission errors on overivew * Move query logic to store for getting both types of role * Filtering works on combined role models * cleanup * Fix no meta on connections list * better handle the situation where you don't have access to list roles but do to generate * implment updated empty state component and add to credentials page when roleType is noRoleType * glimmerize the input search component * move logic for generate credentials urlto the generate creds component * remove query param for role type * handle permissions on the overview page * permissions for role list * New roles route for backends * handle different permissions for empty return on 404 vs 403 on overview page * fix links on overview page * Connetions WIP * setup lazy caps for the connections model and list * add computed to role and static role models to clean up permissions * setup actions for connections list * Update form-field to show password type and update json input to angle bracket syntax with optional theme option * setup capabilities on overview for empty state * fix hardcoded on the backend * toggle inner label has width 100% * Add custom update password togglable input on database connection edit form, and only submit defined attrs * Add updateRecord to connection adapter * glimmerize secret list header and make new component which either shows or does not show the tab based on permissions * Remove tabs on show connection * add peek record * Update database role to get both models on a single model, remove static-role model and adapter, remove roles route * fix creds permissions on database-list-item * add component info and rename for secret-list-header-tab * fix issues on overview page * Add path to individual role on serializer * add accetpance test for testing the engine * fix transform test * test fix * Update connection before role created, disable button with tooltip if user cannot update path * Add add-to-array and remove-from-array helpers with tests * Clean up connection update on delete or create role, cleanup logs, role create link works * Database role create and edit forms with readonly fields and validation. Add readonly-form-field * Add field div around ttl picker for correct spacing on form-field * fix the breadcrumbs * PLaceholder test for readonly form field * create new helper to format time duration * tooltip and formatting on static role * more on static roles time stuff * clean up * clean up * fixes on the test and addition of another helper test * fix secrets machine test * Add modal to connection creation flow * fix issue with readonly form field test * Add is-empty-object helper and tests * Role error handling * Remove Atlas option from connection list, add defaults to db role form * clean up stuff though might have made it uglier * clean up * Add capabilities checks on connection actions * Fix jsdocs on readonly-form-field * Fix json editor height on form field * Readonly form has notallowed cursor, readonly form field updates * Add blank field rendering to info-table-row * Start writing readonly form field tests * Address some PR comments * fix fallback action on search select * cleanup per comments * fix readonly form field test and lint * Cleanup string helpers * Replace renderBlank with alwaysRender logic * re-humanize label on readonly form field * Show defaultShown value on info-table-row if no value and always render * Show default on role and connection show table * Add changelog Co-authored-by: Chelsea Shaw <chelshaw.dev@gmail.com>
2021-02-18 16:36:31 +00:00
value: 'details',
actions: [
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
UI Database Secrets Engine (MongoDB) (#10655) * move the ttls on enable for db to default and not as options * refactor form field to angle brackets * add database to supported backend * initial setup of components and models * setup selectable cards, need to make own component * styling setup * subtext and links * number styling * search select put in place and button, all pretty things * search label text * messy but closer to data configuration. making models and fetching those models on routes * connection adapter and serializer that is pulled in by the overview route * clean up and add new model params connections and roles to overview route hbs * setting up overview as route with SecretHeader component. TODO, show Overview tab, but have link to route. It's going be on the secret header list component * setup overview tab on secret-list-header to go to overview page * setup id in overview route * Correct link on secrets engine list for database and others * Roles tab on database fetches correct model * Update options for backend with hasOverview param so overview tab is rendered conditionally on secret list header * create new getCrendentialsComponent * Rename database connection parent component and start working on display * setup routing to credentials route for database from overview page * setup network request for the credentials of role * setup serializer for credentials * redirect previous route * fix border color on button disable * add margin to back button * change to glimmer component * glimmerize and clean up the get-credentials-card * Begin database connection show and create form * add component test for the get-credentials-card * Database connection model and field groups * add static roles to searhSelect * add staticRoles on overview page * Toolbar and tabs on database connection show view looks correct * combine static and dynamic role models for pagination * Update database-list-item with real link to connection * Add support for optionalText edit type on form-field * handle situation when no static and/or dynamic roles * turn partial into component so can handle computed and eventually click actions, similar to transform * glimmerize database-list-item * use lazy capabilities on list role and static-role actions * Create connection works and redirects to show page * creds request based on dynamic or static and unload the store by record creds when they transition away. * dynamcially add in backend for queries * fixes on overview page for get credentials with hardcoded backend and layout for static creds * Rotate and Reset connection actions working on connection * get credentials set the query params * setup async for handling permission errors on overivew * Move query logic to store for getting both types of role * Filtering works on combined role models * cleanup * Fix no meta on connections list * better handle the situation where you don't have access to list roles but do to generate * implment updated empty state component and add to credentials page when roleType is noRoleType * glimmerize the input search component * move logic for generate credentials urlto the generate creds component * remove query param for role type * handle permissions on the overview page * permissions for role list * New roles route for backends * handle different permissions for empty return on 404 vs 403 on overview page * fix links on overview page * Connetions WIP * setup lazy caps for the connections model and list * add computed to role and static role models to clean up permissions * setup actions for connections list * Update form-field to show password type and update json input to angle bracket syntax with optional theme option * setup capabilities on overview for empty state * fix hardcoded on the backend * toggle inner label has width 100% * Add custom update password togglable input on database connection edit form, and only submit defined attrs * Add updateRecord to connection adapter * glimmerize secret list header and make new component which either shows or does not show the tab based on permissions * Remove tabs on show connection * add peek record * Update database role to get both models on a single model, remove static-role model and adapter, remove roles route * fix creds permissions on database-list-item * add component info and rename for secret-list-header-tab * fix issues on overview page * Add path to individual role on serializer * add accetpance test for testing the engine * fix transform test * test fix * Update connection before role created, disable button with tooltip if user cannot update path * Add add-to-array and remove-from-array helpers with tests * Clean up connection update on delete or create role, cleanup logs, role create link works * Database role create and edit forms with readonly fields and validation. Add readonly-form-field * Add field div around ttl picker for correct spacing on form-field * fix the breadcrumbs * PLaceholder test for readonly form field * create new helper to format time duration * tooltip and formatting on static role * more on static roles time stuff * clean up * clean up * fixes on the test and addition of another helper test * fix secrets machine test * Add modal to connection creation flow * fix issue with readonly form field test * Add is-empty-object helper and tests * Role error handling * Remove Atlas option from connection list, add defaults to db role form * clean up stuff though might have made it uglier * clean up * Add capabilities checks on connection actions * Fix jsdocs on readonly-form-field * Fix json editor height on form field * Readonly form has notallowed cursor, readonly form field updates * Add blank field rendering to info-table-row * Start writing readonly form field tests * Address some PR comments * fix fallback action on search select * cleanup per comments * fix readonly form field test and lint * Cleanup string helpers * Replace renderBlank with alwaysRender logic * re-humanize label on readonly form field * Show defaultShown value on info-table-row if no value and always render * Show default on role and connection show table * Add changelog Co-authored-by: Chelsea Shaw <chelshaw.dev@gmail.com>
2021-02-18 16:36:31 +00:00
{ type: 'render', level: 'step', component: 'wizard/secrets-details' },
],
},
},
{
currentState: 'list',
event: 'CONTINUE',
params: 'database',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'database',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'database',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'database',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'gcp',
expectedResults: {
value: 'list',
actions: [
{ type: 'render', level: 'step', component: 'wizard/secrets-list' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
},
},
{
currentState: 'list',
event: 'CONTINUE',
params: 'gcp',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'gcp',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'gcp',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'gcp',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'nomad',
expectedResults: {
value: 'list',
actions: [
{ type: 'render', level: 'step', component: 'wizard/secrets-list' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
},
},
{
currentState: 'list',
event: 'CONTINUE',
params: 'nomad',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'nomad',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'nomad',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'nomad',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'rabbitmq',
expectedResults: {
value: 'list',
actions: [
{ type: 'render', level: 'step', component: 'wizard/secrets-list' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
},
},
{
currentState: 'list',
event: 'CONTINUE',
params: 'rabbitmq',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'rabbitmq',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'rabbitmq',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'rabbitmq',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'totp',
expectedResults: {
value: 'list',
actions: [
{ type: 'render', level: 'step', component: 'wizard/secrets-list' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
},
},
{
currentState: 'list',
event: 'CONTINUE',
params: 'totp',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'totp',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'totp',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'totp',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'kv',
expectedResults: {
value: 'details',
actions: [
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
{ component: 'wizard/secrets-details', level: 'step', type: 'render' },
],
},
},
{
currentState: 'details',
event: 'CONTINUE',
params: 'kv',
expectedResults: {
value: 'secret',
actions: [
{ component: 'wizard/secrets-secret', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'secret',
event: 'CONTINUE',
params: 'kv',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'REPEAT',
params: 'kv',
expectedResults: {
value: 'secret',
actions: [
{
params: ['vault.cluster.secrets.backend.create-root'],
type: 'routeTransition',
},
{ component: 'wizard/secrets-secret', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'kv',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'kv',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'kv',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'enable',
event: 'CONTINUE',
params: 'transit',
expectedResults: {
value: 'details',
actions: [
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
{ component: 'wizard/secrets-details', level: 'step', type: 'render' },
],
},
},
{
currentState: 'details',
event: 'CONTINUE',
params: 'transit',
expectedResults: {
value: 'encryption',
actions: [
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
{ component: 'wizard/secrets-encryption', level: 'step', type: 'render' },
],
},
},
{
currentState: 'encryption',
event: 'CONTINUE',
params: 'transit',
expectedResults: {
value: 'display',
actions: [
{ component: 'wizard/secrets-display', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'REPEAT',
params: 'transit',
expectedResults: {
value: 'encryption',
actions: [
{
params: ['vault.cluster.secrets.backend.create-root'],
type: 'routeTransition',
},
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
{ component: 'wizard/secrets-encryption', level: 'step', type: 'render' },
],
},
},
{
currentState: 'display',
event: 'RESET',
params: 'transit',
expectedResults: {
value: 'idle',
actions: [
{
params: ['vault.cluster.settings.mount-secret-backend'],
type: 'routeTransition',
},
{
component: 'wizard/mounts-wizard',
level: 'feature',
type: 'render',
},
{
component: 'wizard/secrets-idle',
level: 'step',
type: 'render',
},
],
},
},
{
currentState: 'display',
event: 'DONE',
params: 'transit',
expectedResults: {
value: 'complete',
actions: ['completeFeature'],
},
},
{
currentState: 'display',
event: 'ERROR',
params: 'transit',
expectedResults: {
value: 'error',
actions: [
{ component: 'wizard/tutorial-error', level: 'step', type: 'render' },
{ component: 'wizard/mounts-wizard', level: 'feature', type: 'render' },
],
},
},
];
testCases.forEach(testCase => {
Update ui dependencies (#7244) * be more specific about node version, and specify a yarn version * update ember, ember-cli, ember-data, ember-data-model-fragments * use router handlers to access transition information * fix shadowing of component helper * update ivy-codemirror, ember-cli-inject-live-reload * remove custom router service * don't use transition.queryParams * update ember-cli-deprecation-workflow * refactor kv v1 to use 'path' instead of 'id' on creation * fix auth-jwt-test and toolbar-link-test * update ember composable helpers * remove Ember.copy from test file * no more deprecations in the workflow * fix more secret tests * fix remaining failed tests * move select component to core because it's used by ttl-picker * generate new model class for each test instead of reusing an existing one * fix selectors on kmip tests * refactor how control groups construct urls from the new transition objects * add router service override back in, and have it be evented so that we can trigger router events on it * move stories and markdown files to core if the component lives in core * update ember-cli, ember-cli-babel, ember-auto-import * update base64js, date-fns, deepmerge, codemirror, broccoli-asset-rev * update linting rules * fix test selectors * update ember-api-actions, ember-concurrency, ember-load-initializers, escape-string-regexp, normalize.css, prettier-eslint-cli, jsdoc-to-markdown * remove test-results dir * update base64js, ember-cli-clipboard, ember-cli-sass, ember-cli-string-helpers, ember-cli-template-lint, ember-cli-uglify, ember-link-action * fix linting * run yarn install without restoring from cache * refactor how tests are run and handle the vault server subprocess * update makefile for new test task names * update circle config to use the new yarn task * fix writing the seal keys when starting the dev server * remove optional deps from the lockfile * don't ignore-optional on yarn install * remove errant console.log * update ember-basic-dropdown-hover, jsonlint, yargs-parser * update ember-cli-flash * add back optionalDeps * update @babel/core@7.5.5, ember-basic-dropdown@1.1.3, eslint-plugin-ember@6.8.2 * update storybook to the latest release * add a babel config with targets so that the ember babel plugin works properly * update ember-resolver, move ember-cli-storybook to devDependencies * revert normalize.css upgrade * silence fetchadapter warning for now * exclude 3rd party array helper now that ember includes one * fix switch and entity lookup styling * only add -root suffix if it's not in versions mode * make sure drop always has an array on the aws role form * fix labels like we did with the backport * update eslintignore * update the yarn version in the docker build file * update eslint ignore
2019-08-19 20:45:39 +00:00
test(`transition: ${testCase.event} for currentState ${testCase.currentState} and componentState ${testCase.params}`, function(assert) {
let result = secretsMachine.transition(testCase.currentState, testCase.event, testCase.params);
assert.equal(result.value, testCase.expectedResults.value);
assert.deepEqual(result.actions, testCase.expectedResults.actions);
});
});
});