Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/applications/education/22-1990n/app-entry.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'platform/polyfills';
import './sass/22-1990n.scss';

import startApp from 'platform/startup';

import routes from './routes';
import reducer from './reducers';
import manifest from './manifest.json';

startApp({
entryName: manifest.entryName,
url: manifest.rootUrl,
reducer,
routes,
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import {
yesNoUI,
yesNoSchema,
} from 'platform/forms-system/src/js/web-component-patterns';

export const activeDutyStatusUiSchema = {
serviceInformation: {
'ui:title': 'Active duty status',
isActiveDuty: yesNoUI({
title: 'Are you now on active duty?',
hint: 'Answer based on your status today.',
errorMessages: {
required: 'Please indicate whether you are on active duty.',
},
}),
isOnTerminalLeave: yesNoUI({
title: 'Are you now on terminal leave just before discharge?',
hint: 'Terminal leave is leave taken immediately before your separation from active duty.',
errorMessages: {
required:
'Please indicate whether you are on terminal leave.',
},
}),
},
};

export const activeDutyStatusSchema = {
type: 'object',
required: ['serviceInformation'],
properties: {
serviceInformation: {
type: 'object',
required: ['isActiveDuty', 'isOnTerminalLeave'],
properties: {
isActiveDuty: yesNoSchema,
isOnTerminalLeave: yesNoSchema,
},
},
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { expect } from 'chai';
import {
activeDutyStatusUiSchema,
activeDutyStatusSchema,
} from './activeDutyStatus';

describe('config/chapters/activeDutyStatus', () => {
it('uiSchema has serviceInformation.isActiveDuty', () => {
expect(activeDutyStatusUiSchema).to.have.property('serviceInformation');
expect(
activeDutyStatusUiSchema.serviceInformation,
).to.have.property('isActiveDuty');
});

it('uiSchema has serviceInformation.isOnTerminalLeave', () => {
expect(
activeDutyStatusUiSchema.serviceInformation,
).to.have.property('isOnTerminalLeave');
});

it('schema has boolean types for both fields', () => {
const props =
activeDutyStatusSchema.properties.serviceInformation.properties;
expect(props.isActiveDuty.type).to.equal('boolean');
expect(props.isOnTerminalLeave.type).to.equal('boolean');
});

it('schema requires both isActiveDuty and isOnTerminalLeave', () => {
const required =
activeDutyStatusSchema.properties.serviceInformation.required;
expect(required).to.include('isActiveDuty');
expect(required).to.include('isOnTerminalLeave');
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import {
yesNoUI,
yesNoSchema,
textUI,
textSchema,
} from 'platform/forms-system/src/js/web-component-patterns';

export const additionalAssistanceUiSchema = {
additionalAssistance: {
'ui:title': 'Additional assistance',
isSeniorROTCScholar: yesNoUI({
title:
'Are you currently participating in a Senior ROTC scholarship program which pays for your tuition, fees, books and supplies under Section 2107, Title 10, U.S. Code?',
hint: 'This includes ROTC scholarship programs that cover the costs of college attendance.',
errorMessages: {
required:
'Please indicate whether you are a Senior ROTC scholar.',
},
}),
receivingFederalTuitionAssist: {
...yesNoUI({
title:
'Are you receiving or do you anticipate receiving any money (including but not limited to Federal Tuition Assistance) from the Armed Forces or Public Health Service for the course for which you have applied to the VA for education benefits?',
hint: 'If you receive such benefits during any part of your training, select Yes. For active duty claimants only.',
errorMessages: {
required:
'Please indicate whether you are receiving Federal Tuition Assistance.',
},
}),
'ui:options': {
hideIf: formData =>
formData?.serviceInformation?.isActiveDuty !== true,
},
},
isCivilianGovEmployee: yesNoUI({
title: 'Are you a civilian employee of the U.S. Government?',
hint: 'This determines whether additional questions about agency funds apply to you.',
errorMessages: {
required:
'Please indicate whether you are a civilian government employee.',
},
}),
receivingAgencyFunds: {
...yesNoUI({
title:
'Do you expect to receive funds from your agency or department for the same course(s) for which you expect to receive VA education assistance?',
hint: 'This applies if you work as a civilian employee for the U.S. Government.',
errorMessages: {
required:
'Please indicate whether you expect to receive agency funds.',
},
}),
'ui:options': {
hideIf: formData =>
formData?.additionalAssistance?.isCivilianGovEmployee !== true,
},
},
agencyFundsSource: {
...textUI({
title: 'Source of funds',
hint: 'Show the source of these funds. Example: Department of Defense Tuition Assistance Program',
errorMessages: {
required: 'Please enter the source of agency funds.',
},
}),
'ui:options': {
hideIf: formData =>
formData?.additionalAssistance?.receivingAgencyFunds !== true,
},
},
},
};

export const additionalAssistanceSchema = {
type: 'object',
required: ['additionalAssistance'],
properties: {
additionalAssistance: {
type: 'object',
required: ['isSeniorROTCScholar'],
properties: {
isSeniorROTCScholar: yesNoSchema,
receivingFederalTuitionAssist: yesNoSchema,
isCivilianGovEmployee: yesNoSchema,
receivingAgencyFunds: yesNoSchema,
agencyFundsSource: {
type: 'string',
maxLength: 100,
},
},
},
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { expect } from 'chai';
import {
additionalAssistanceUiSchema,
additionalAssistanceSchema,
} from './additionalAssistance';

describe('config/chapters/additionalAssistance', () => {
it('uiSchema has additionalAssistance with isSeniorROTCScholar', () => {
expect(additionalAssistanceUiSchema).to.have.property(
'additionalAssistance',
);
expect(
additionalAssistanceUiSchema.additionalAssistance,
).to.have.property('isSeniorROTCScholar');
});

it('uiSchema has receivingFederalTuitionAssist with hideIf', () => {
const field =
additionalAssistanceUiSchema.additionalAssistance
.receivingFederalTuitionAssist;
expect(field['ui:options']).to.have.property('hideIf');
});

it('receivingFederalTuitionAssist hideIf returns true when not active duty', () => {
const hideIf =
additionalAssistanceUiSchema.additionalAssistance
.receivingFederalTuitionAssist['ui:options'].hideIf;
expect(
hideIf({ serviceInformation: { isActiveDuty: false } }),
).to.equal(true);
expect(
hideIf({ serviceInformation: { isActiveDuty: true } }),
).to.equal(false);
});

it('agencyFundsSource hideIf hides when receivingAgencyFunds is not true', () => {
const hideIf =
additionalAssistanceUiSchema.additionalAssistance.agencyFundsSource[
'ui:options'
].hideIf;
expect(
hideIf({ additionalAssistance: { receivingAgencyFunds: false } }),
).to.equal(true);
expect(
hideIf({ additionalAssistance: { receivingAgencyFunds: true } }),
).to.equal(false);
});

it('schema requires isSeniorROTCScholar', () => {
const required =
additionalAssistanceSchema.properties.additionalAssistance.required;
expect(required).to.include('isSeniorROTCScholar');
});

it('agencyFundsSource schema has maxLength of 100', () => {
const schema =
additionalAssistanceSchema.properties.additionalAssistance.properties
.agencyFundsSource;
expect(schema.maxLength).to.equal(100);
});
});
Loading