Update Ids for Job Details page

Update Ids for job details page to ease testing.

Also, distinguish between Project and Inventory Source Project.

See: https://github.com/ansible/awx/issues/10786#issuecomment-893658516
This commit is contained in:
nixocio 2021-08-09 16:53:32 -04:00
parent 1173dca900
commit 100c1cbbce
2 changed files with 83 additions and 17 deletions

View File

@ -73,12 +73,13 @@ const getLaunchedByDetails = ({ summary_fields = {}, launch_type }) => {
return { link, value };
};
export default function LaunchedByDetail({ job }) {
export default function LaunchedByDetail({ job, dataCy = null }) {
const { value: launchedByValue, link: launchedByLink } =
getLaunchedByDetails(job) || {};
return (
<Detail
dataCy={dataCy}
label={t`Launched By`}
value={
launchedByLink ? (

View File

@ -120,8 +120,9 @@ function JobDetail({ job }) {
return (
<CardBody>
<DetailList>
<Detail label={t`Job ID`} value={job.id} />
<Detail dataCy="job-id" label={t`Job ID`} value={job.id} />
<Detail
dataCy="job-status"
fullWidth={Boolean(job.job_explanation)}
label={t`Status`}
value={
@ -133,10 +134,19 @@ function JobDetail({ job }) {
</StatusDetailValue>
}
/>
<Detail label={t`Started`} value={formatDateString(job.started)} />
<Detail label={t`Finished`} value={formatDateString(job.finished)} />
<Detail
dataCy="job-started-date"
label={t`Started`}
value={formatDateString(job.started)}
/>
<Detail
dataCy="job-finished-date"
label={t`Finished`}
value={formatDateString(job.finished)}
/>
{jobTemplate && (
<Detail
dataCy="job-template"
label={t`Job Template`}
value={
<Link to={`/templates/job_template/${jobTemplate.id}`}>
@ -147,6 +157,7 @@ function JobDetail({ job }) {
)}
{workflowJobTemplate && (
<Detail
dataCy="workflow-job-template"
label={t`Workflow Job Template`}
value={
<Link
@ -159,6 +170,7 @@ function JobDetail({ job }) {
)}
{source_workflow_job && (
<Detail
dataCy="source-workflow-job"
label={t`Source Workflow Job`}
value={
<Link to={`/jobs/workflow/${source_workflow_job.id}`}>
@ -167,10 +179,15 @@ function JobDetail({ job }) {
}
/>
)}
<Detail label={t`Job Type`} value={jobTypes[job.type]} />
<LaunchedByDetail job={job} />
<Detail
dataCy="job-type"
label={t`Job Type`}
value={jobTypes[job.type]}
/>
<LaunchedByDetail dataCy="job-launched-by" job={job} />
{inventory && (
<Detail
dataCy="job-inventory"
label={t`Inventory`}
value={
<Link
@ -187,6 +204,7 @@ function JobDetail({ job }) {
)}
{inventory_source && (
<Detail
dataCy="job-inventory-source"
label={t`Inventory Source`}
value={
<Link
@ -199,7 +217,8 @@ function JobDetail({ job }) {
)}
{inventory_source && inventory_source.source === 'scm' && (
<Detail
label={t`Project`}
dataCy="job-inventory-source-project"
label={t`Inventory Source Project`}
value={
<StatusDetailValue>
{source_project.status && (
@ -213,7 +232,11 @@ function JobDetail({ job }) {
/>
)}
{project && (
<Detail label={t`Project`} value={buildProjectDetailValue()} />
<Detail
dataCy="job-project"
label={t`Project`}
value={buildProjectDetailValue()}
/>
)}
{scmBranch && (
<Detail
@ -222,25 +245,44 @@ function JobDetail({ job }) {
value={scmBranch}
/>
)}
<Detail label={t`Revision`} value={job.scm_revision} />
<Detail label={t`Playbook`} value={job.playbook} />
<Detail label={t`Limit`} value={job.limit} />
<Detail label={t`Verbosity`} value={VERBOSITY[job.verbosity]} />
<Detail
dataCy="job-scm-revision"
label={t`Revision`}
value={job.scm_revision}
/>
<Detail
dataCy="job-playbook"
label={t`Playbook`}
value={job.playbook}
/>
<Detail dataCy="job-limit" label={t`Limit`} value={job.limit} />
<Detail
dataCy="job-verbosity"
label={t`Verbosity`}
value={VERBOSITY[job.verbosity]}
/>
{job.type !== 'workflow_job' && !isJobRunning(job.status) && (
<ExecutionEnvironmentDetail
dataCy="job-execution-environment"
executionEnvironment={executionEnvironment}
verifyMissingVirtualEnv={false}
/>
)}
<Detail label={t`Execution Node`} value={job.execution_node} />
<Detail
dataCy="job-execution-node"
label={t`Execution Node`}
value={job.execution_node}
/>
{instanceGroup && !instanceGroup?.is_container_group && (
<Detail
dataCy="job-instance-group"
label={t`Instance Group`}
value={buildInstanceGroupLink(instanceGroup)}
/>
)}
{instanceGroup && instanceGroup?.is_container_group && (
<Detail
dataCy="job-container-group"
label={t`Container Group`}
value={buildContainerGroupLink(instanceGroup)}
/>
@ -248,16 +290,22 @@ function JobDetail({ job }) {
{typeof job.job_slice_number === 'number' &&
typeof job.job_slice_count === 'number' && (
<Detail
dataCy="job-slice"
label={t`Job Slice`}
value={`${job.job_slice_number}/${job.job_slice_count}`}
/>
)}
{job.type === 'workflow_job' && job.is_sliced_job && (
<Detail label={t`Job Slice Parent`} value={t`True`} />
<Detail
dataCy="job-slice-parent"
label={t`Job Slice Parent`}
value={t`True`}
/>
)}
{credential && (
<Detail
dataCy="job-machine-credential"
label={t`Machine Credential`}
value={
<ChipGroup numChips={5} totalChips={1}>
@ -272,6 +320,7 @@ function JobDetail({ job }) {
)}
{credentials && credentials.length > 0 && (
<Detail
dataCy="job-credentials"
fullWidth
label={t`Credentials`}
value={
@ -285,6 +334,7 @@ function JobDetail({ job }) {
)}
{labels && labels.count > 0 && (
<Detail
dataCy="job-labels"
fullWidth
label={t`Labels`}
value={
@ -300,6 +350,7 @@ function JobDetail({ job }) {
)}
{job.job_tags && job.job_tags.length > 0 && (
<Detail
dataCy="job-tags"
fullWidth
label={t`Job Tags`}
value={
@ -318,6 +369,7 @@ function JobDetail({ job }) {
)}
{job.skip_tags && job.skip_tags.length > 0 && (
<Detail
dataCy="job-skip-tags"
fullWidth
label={t`Skip Tags`}
value={
@ -334,14 +386,27 @@ function JobDetail({ job }) {
}
/>
)}
<Detail label={t`Module Name`} value={job.module_name} />
<Detail label={t`Module Arguments`} value={job.module_args} />
<Detail
dataCy="job-module-name"
label={t`Module Name`}
value={job.module_name}
/>
<Detail
dataCy="job-module-arguments"
label={t`Module Arguments`}
value={job.module_args}
/>
<UserDateDetail
dataCy="job-created"
label={t`Created`}
date={job.created}
user={created_by}
/>
<UserDateDetail label={t`Last Modified`} date={job.modified} />
<UserDateDetail
dataCy="job-last-modified"
label={t`Last Modified`}
date={job.modified}
/>
</DetailList>
{job.extra_vars && (
<VariablesInput