cy.goToPath(`/collections/${this.testCollection.uuid}`);
['subdir', 'G%C3%BCnter\'s%20file', 'table%&?*2'].forEach((subdir) => {
- cy.get('[data-cy=collection-files-panel]')
+ cy.waitForDom().get('[data-cy=collection-files-panel]')
.contains('bar').rightclick();
cy.get('[data-cy=context-menu]')
.contains('Rename')
.contains(projName).and('contain', testProject.uuid);
// Double check that the collection is in the project
cy.goToPath(`/projects/${testProject.uuid}`);
- cy.get('[data-cy=project-panel]').should('contain', collName);
+ cy.waitForDom().get('[data-cy=project-panel]').should('contain', collName);
});
});
.should('contain', 'Free disk space is low')
.and('contain', 'No additional warning details available');
});
+
+
+ // Force container_count for testing
+ let containerCount = 2;
+ cy.intercept({method: 'GET', url: '**/arvados/v1/container_requests/*'}, (req) => {
+ req.reply((res) => {
+ res.body.container_count = containerCount;
+ });
+ });
+
+ cy.getAll('@containerRequest').then(function([containerRequest]) {
+ cy.goToPath(`/processes/${containerRequest.uuid}`);
+ cy.get('[data-cy=process-runtime-status-retry-warning]')
+ .should('contain', 'Process retried 1 time');
+ });
+
+ cy.getAll('@containerRequest').then(function([containerRequest]) {
+ containerCount = 3;
+ cy.goToPath(`/processes/${containerRequest.uuid}`);
+ cy.get('[data-cy=process-runtime-status-retry-warning]')
+ .should('contain', 'Process retried 2 times');
+ });
});
});
ExpansionPanel,
ExpansionPanelDetails,
ExpansionPanelSummary,
+ Paper,
StyleRulesCallback,
Typography,
withStyles,
| 'error'
| 'errorColor'
| 'warning'
- | 'warningColor';
+ | 'warningColor'
+ | 'paperRoot';
const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
root: {
warningColor: {
color: theme.customs.colors.yellow900,
},
+ paperRoot: {
+ minHeight: theme.spacing.unit * 6,
+ display: 'flex',
+ alignItems: 'center',
+ },
});
export interface ProcessRuntimeStatusDataProps {
runtimeStatus: RuntimeStatus | undefined;
+ containerCount: number;
}
type ProcessRuntimeStatusProps = ProcessRuntimeStatusDataProps & WithStyles<CssRules>;
export const ProcessRuntimeStatus = withStyles(styles)(
- ({ runtimeStatus, classes }: ProcessRuntimeStatusProps) => {
+ ({ runtimeStatus, containerCount, classes }: ProcessRuntimeStatusProps) => {
return <div className={classes.root}>
{ runtimeStatus?.error &&
<div data-cy='process-runtime-status-error'><ExpansionPanel className={classes.error} elevation={0}>
</ExpansionPanelDetails>
</ExpansionPanel></div>
}
+ { containerCount > 1 &&
+ <div data-cy='process-runtime-status-retry-warning' >
+ <Paper className={classNames(classes.warning, classes.paperRoot)} elevation={0}>
+ <Typography className={classNames(classes.heading, classes.summary, classes.warningColor)}>
+ {`Warning: Process retried ${containerCount - 1} time${containerCount > 2 ? 's' : ''} due to failure.`}
+ </Typography>
+ </Paper>
+ </div>
+ }
</div>
-});
\ No newline at end of file
+});
const mdSize = props.twoCol ? 6 : 12;
return <Grid container>
<Grid item xs={12}>
- <ProcessRuntimeStatus runtimeStatus={container?.runtimeStatus} />
+ <ProcessRuntimeStatus runtimeStatus={container?.runtimeStatus} containerCount={containerRequest.containerCount} />
</Grid>
{!props.hideProcessPanelRedundantFields && <Grid item xs={12} md={mdSize}>
<DetailsAttribute label='Type' value={resourceLabel(ResourceKind.PROCESS)} />