open-nomad/ui/tests/pages/allocations/detail.js
Luiz Aoqui 31ab7964bd
ui: task lifecycle restart all tasks (#14223)
Now that tasks that have finished running can be restarted, the UI needs
to use the actual task state to determine which CSS class to use when
rendering the task lifecycle chart element.
2022-08-24 18:43:44 -04:00

121 lines
3.7 KiB
JavaScript

import {
attribute,
clickable,
create,
collection,
isPresent,
text,
visitable,
} from 'ember-cli-page-object';
import allocations from 'nomad-ui/tests/pages/components/allocations';
import twoStepButton from 'nomad-ui/tests/pages/components/two-step-button';
import LifecycleChart from 'nomad-ui/tests/pages/components/lifecycle-chart';
export default create({
visit: visitable('/allocations/:id'),
title: text('[data-test-title]'),
stop: twoStepButton('[data-test-stop]'),
restart: twoStepButton('[data-test-restart]'),
restartAll: twoStepButton('[data-test-restart-all]'),
execButton: {
scope: '[data-test-exec-button]',
},
details: {
scope: '[data-test-allocation-details]',
job: text('[data-test-job-link]'),
visitJob: clickable('[data-test-job-link]'),
client: text('[data-test-client-link]'),
visitClient: clickable('[data-test-client-link]'),
},
resourceCharts: collection('[data-test-primary-metric]', {
name: text('[data-test-primary-metric-title]'),
chartClass: attribute('class', '[data-test-percentage-chart] progress'),
}),
resourceEmptyMessage: text('[data-test-resource-error-headline]'),
lifecycleChart: LifecycleChart,
tasks: collection('[data-test-task-row]', {
name: text('[data-test-name]'),
state: text('[data-test-state]'),
message: text('[data-test-message]'),
time: text('[data-test-time]'),
volumes: text('[data-test-volumes]'),
hasCpuMetrics: isPresent('[data-test-cpu] .inline-chart progress'),
hasMemoryMetrics: isPresent('[data-test-mem] .inline-chart progress'),
hasUnhealthyDriver: isPresent('[data-test-icon="unhealthy-driver"]'),
hasProxyTag: isPresent('[data-test-proxy-tag]'),
clickLink: clickable('[data-test-name] a'),
clickRow: clickable('[data-test-name]'),
}),
firstUnhealthyTask() {
return this.tasks.toArray().findBy('hasUnhealthyDriver');
},
hasRescheduleEvents: isPresent('[data-test-reschedule-events]'),
isEmpty: isPresent('[data-test-empty-tasks-list]'),
wasPreempted: isPresent('[data-test-was-preempted]'),
preempter: {
scope: '[data-test-was-preempted]',
status: text('[data-test-allocation-status]'),
name: text('[data-test-allocation-name]'),
priority: text('[data-test-job-priority]'),
reservedCPU: text('[data-test-allocation-cpu]'),
reservedMemory: text('[data-test-allocation-memory]'),
visit: clickable('[data-test-allocation-id]'),
visitJob: clickable('[data-test-job-link]'),
visitClient: clickable('[data-test-client-link]'),
},
preempted: isPresent('[data-test-preemptions]'),
...allocations(
'[data-test-preemptions] [data-test-allocation]',
'preemptions'
),
ports: collection('[data-test-allocation-port]', {
name: text('[data-test-allocation-port-name]'),
address: text('[data-test-allocation-port-address]'),
to: text('[data-test-allocation-port-to]'),
}),
services: collection('[data-test-service]', {
name: text('[data-test-service-name]'),
port: text('[data-test-service-port]'),
tags: text('[data-test-service-tags]'),
onUpdate: text('[data-test-service-onupdate]'),
connect: text('[data-test-service-connect]'),
upstreams: text('[data-test-service-upstreams]'),
}),
error: {
isShown: isPresent('[data-test-error]'),
title: text('[data-test-error-title]'),
message: text('[data-test-error-message]'),
seekHelp: clickable('[data-test-error-message] a'),
},
inlineError: {
isShown: isPresent('[data-test-inline-error]'),
title: text('[data-test-inline-error-title]'),
message: text('[data-test-inline-error-body]'),
dismiss: clickable('[data-test-inline-error-close]'),
},
});