Keep and validate project type selection when creating/editing application periods #47

Merged
niat8586 merged 3 commits from project-type-lost-application-period-creation into develop 2024-12-16 13:23:38 +01:00
4 changed files with 25 additions and 8 deletions
Showing only changes of commit d387e8002e - Show all commits

View File

@ -17,6 +17,7 @@
<fieldset class="mb-3"> <fieldset class="mb-3">
<legend><wicket:message key="projectTypes"/></legend> <legend><wicket:message key="projectTypes"/></legend>
<div wicket:id="projectTypes"></div> <div wicket:id="projectTypes"></div>
<div wicket:id="projectTypesFeedback"></div>
</fieldset> </fieldset>
<div class="form-row"> <div class="form-row">

View File

@ -58,14 +58,15 @@ public class AdminEditApplicationPeriodPage
); );
add(new ComponentFeedbackPanel(TITLE_FEEDBACK, title)); add(new ComponentFeedbackPanel(TITLE_FEEDBACK, title));
add(title); add(title);
add( BootstrapCheckBoxMultipleChoice<ProjectType> projectTypeChoice = new BootstrapCheckBoxMultipleChoice<>(
new BootstrapCheckBoxMultipleChoice<>( PROJECT_TYPES,
PROJECT_TYPES, LambdaModel.of(getModel(), ApplicationPeriod::getProjectTypes, ApplicationPeriod::setProjectTypes),
LambdaModel.of(getModel(), ApplicationPeriod::getProjectTypes, ApplicationPeriod::setProjectTypes), availableProjectTypes(),
availableProjectTypes(), new LambdaChoiceRenderer<>(ProjectType::getName, ProjectType::getId)
new LambdaChoiceRenderer<>(ProjectType::getName, ProjectType::getId)
)
); );
projectTypeChoice.setRequired(true);
add(projectTypeChoice);
add(new FencedFeedbackPanel("projectTypesFeedback", projectTypeChoice));
final FormComponent<LocalDate> startDate = addDateField( final FormComponent<LocalDate> startDate = addDateField(
START_DATE, START_DATE,
LambdaModel.of(getModel(), ApplicationPeriod::getStartDate, ApplicationPeriod::setStartDate) LambdaModel.of(getModel(), ApplicationPeriod::getStartDate, ApplicationPeriod::setStartDate)

View File

@ -14,4 +14,5 @@ success= Application period saved.
overlapping= Overlapping application period already exists. overlapping= Overlapping application period already exists.
date.Required= You need to specify a valid date. date.Required= You need to specify a valid date.
hours.Required= Hours field is required. hours.Required= Hours field is required.
minutes.Required= Minutes field is required. minutes.Required= Minutes field is required.
projectTypes.Required=You must select at least one project type.

View File

@ -120,12 +120,25 @@ public class AdminEditApplicationPeriodPageTest extends SciProTest {
MatcherAssert.assertThat(captor.getValue().getProjectTypes(), Matchers.hasItem(bachelor)); MatcherAssert.assertThat(captor.getValue().getProjectTypes(), Matchers.hasItem(bachelor));
} }
@Test
public void requires_at_least_one_project_type_to_be_selected() {
FormTester formTester = tester.newFormTester(FORM);
fillInFormWithValidValues(formTester);
formTester.setValue(path(PROJECT_TYPES), "");
formTester.submit();
tester.assertErrorMessages(tester.getLastRenderedPage().getString("projectTypes.Required"));
}
private void submitForm(String title, int startDate, int endDate, int courseStartDate) { private void submitForm(String title, int startDate, int endDate, int courseStartDate) {
FormTester formTester = tester.newFormTester(FORM); FormTester formTester = tester.newFormTester(FORM);
fillInForm(title, startDate, endDate, courseStartDate, formTester); fillInForm(title, startDate, endDate, courseStartDate, formTester);
formTester.submit(); formTester.submit();
} }
private void fillInFormWithValidValues(FormTester formTester) {
fillInForm("Title", 0, 1, 2, formTester);
}
private void fillInForm(String title, int startDate, int endDate, int courseStartDate, FormTester formTester) { private void fillInForm(String title, int startDate, int endDate, int courseStartDate, FormTester formTester) {
formTester.setValue(TITLE, title); formTester.setValue(TITLE, title);
final LocalDate now = LocalDate.now(); final LocalDate now = LocalDate.now();
@ -133,6 +146,7 @@ public class AdminEditApplicationPeriodPageTest extends SciProTest {
formTester.setValue(END_DATE, now.plusDays(endDate).toString()); formTester.setValue(END_DATE, now.plusDays(endDate).toString());
formTester.setValue(COURSE_START_DATE, now.plusDays(courseStartDate).toString()); formTester.setValue(COURSE_START_DATE, now.plusDays(courseStartDate).toString());
formTester.setValue("courseStartTime", "08:00"); formTester.setValue("courseStartTime", "08:00");
formTester.setValue(PROJECT_TYPES, String.valueOf(bachelor.getId()));
} }
private void startPage() { private void startPage() {