Skip to content

Commit b18f498

Browse files
authored
#769: Do not allow user create job/template with Shell type via UI (#770)
#769: Do not allow user create job/template with Shell type via UI (#770)
1 parent 41fd8f0 commit b18f498

File tree

6 files changed

+62
-4
lines changed

6 files changed

+62
-4
lines changed

ui/src/app/components/admin/job-templates/job-templates-form/job-templates-form.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
[name]="'Job type'"
8686
[value]="jobTemplate?.jobParameters?.jobType"
8787
(valueChange)="jobTypeChange($event)"
88-
[options]="jobTypesMap"
88+
[options]="getJobTypes(jobTemplate?.jobParameters?.jobType)"
8989
[isRequired]="true">
9090
</app-select-part>
9191
</div>

ui/src/app/components/admin/job-templates/job-templates-form/job-templates-form.component.spec.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import {
3434
UpdateJobTemplate,
3535
} from '../../../../stores/job-templates/job-templates.actions';
3636
import { absoluteRoutes } from '../../../../constants/routes.constants';
37-
import { jobTypes } from '../../../../constants/jobTypes.constants';
37+
import { jobTypes, jobTypesMap } from '../../../../constants/jobTypes.constants';
3838
import { ShellTemplateParametersModel } from '../../../../models/jobTemplateParameters.model';
3939

4040
describe('JobTemplatesFormComponent', () => {
@@ -327,4 +327,26 @@ describe('JobTemplatesFormComponent', () => {
327327
underTest.toggleJobTemplateParametersAccordion();
328328
expect(underTest.isJobTemplateParametersHidden).toBeTrue();
329329
});
330+
331+
it(
332+
'getJobTypes() should return all job types if input type is shell',
333+
waitForAsync(() => {
334+
fixture.detectChanges();
335+
fixture.whenStable().then(() => {
336+
const result = underTest.getJobTypes(jobTypes.SHELL);
337+
expect(result).toEqual(jobTypesMap);
338+
});
339+
}),
340+
);
341+
342+
it(
343+
'getJobTypes() should return job types without shell if input type is not shell',
344+
waitForAsync(() => {
345+
fixture.detectChanges();
346+
fixture.whenStable().then(() => {
347+
const result = underTest.getJobTypes(jobTypes.SPARK);
348+
expect(result.size).toEqual(jobTypesMap.size - 1);
349+
});
350+
}),
351+
);
330352
});

ui/src/app/components/admin/job-templates/job-templates-form/job-templates-form.component.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,13 @@ export class JobTemplatesFormComponent implements OnDestroy {
164164
return this.mode == jobTemplateModes.SHOW || this.mode == jobTemplateModes.COMPARISON;
165165
}
166166

167+
getJobTypes(value: string): Map<string, string> {
168+
if (value == this.jobTypes.SHELL) {
169+
return this.jobTypesMap;
170+
}
171+
return new Map([...this.jobTypesMap.entries()].filter(([k, v]) => v !== this.jobTypes.SHELL));
172+
}
173+
167174
ngOnDestroy(): void {
168175
!!this.confirmationDialogServiceSubscription && this.confirmationDialogServiceSubscription.unsubscribe();
169176
}

ui/src/app/components/workflows/workflow-form/jobs/job/job.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
[isShow]="isShow"
2727
[name]="'Job type'"
2828
[value]="job?.jobParameters?.jobType"
29-
[options]="jobTypesMap"
29+
[options]="getJobTypes(job?.jobParameters?.jobType)"
3030
(valueChange)="jobTypeChange($event)"
3131
[isRequired]="true">
3232
</app-select-part>

ui/src/app/components/workflows/workflow-form/jobs/job/job.component.spec.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
ShellTemplateParametersModel,
2323
SparkTemplateParametersModel,
2424
} from '../../../../../models/jobTemplateParameters.model';
25-
import { jobTypes } from '../../../../../constants/jobTypes.constants';
25+
import { jobTypes, jobTypesMap } from '../../../../../constants/jobTypes.constants';
2626
import { JobDefinitionModelFactory } from '../../../../../models/jobDefinition.model';
2727
import { ShellDefinitionParametersModel } from '../../../../../models/jobDefinitionParameters.model';
2828
import { JobTemplateChangeEventModel } from '../../../../../models/jobTemplateChangeEvent';
@@ -123,6 +123,28 @@ describe('JobComponent', () => {
123123
}),
124124
);
125125

126+
it(
127+
'getJobTypes() should return all job types if input type is shell',
128+
waitForAsync(() => {
129+
fixture.detectChanges();
130+
fixture.whenStable().then(() => {
131+
const result = underTest.getJobTypes(jobTypes.SHELL);
132+
expect(result).toEqual(jobTypesMap);
133+
});
134+
}),
135+
);
136+
137+
it(
138+
'getJobTypes() should return job types without shell if input type is not shell',
139+
waitForAsync(() => {
140+
fixture.detectChanges();
141+
fixture.whenStable().then(() => {
142+
const result = underTest.getJobTypes(jobTypes.SPARK);
143+
expect(result.size).toEqual(jobTypesMap.size - 1);
144+
});
145+
}),
146+
);
147+
126148
it('should return selected template parameters when getSelectedJobTemplateParameters() is called and template is selected', () => {
127149
underTest.job = { ...underTest.job, jobTemplateId: sparkTemplate.id.toString() };
128150
const result = underTest.getSelectedJobTemplateParameters();

ui/src/app/components/workflows/workflow-form/jobs/job/job.component.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,13 @@ export class JobComponent {
9191
);
9292
}
9393

94+
getJobTypes(value: string): Map<string, string> {
95+
if (value == this.jobTypes.SHELL) {
96+
return this.jobTypesMap;
97+
}
98+
return new Map([...this.jobTypesMap.entries()].filter(([k, v]) => v !== this.jobTypes.SHELL));
99+
}
100+
94101
getSelectedJobTemplateParameters(): JobTemplateParameters {
95102
return this.jobTemplates.find((jobTemplate) => jobTemplate.id.toString() == this.job.jobTemplateId)?.jobParameters;
96103
}

0 commit comments

Comments
 (0)