Skip to content
Snippets Groups Projects
Commit 17f95096 authored by Tore.Brede's avatar Tore.Brede
Browse files

GREG-215: Make gender required if field is showing

parent cd668d36
No related branches found
No related tags found
1 merge request!285GREG-215: Make gender required if field is showing
Pipeline #116525 passed
...@@ -121,7 +121,8 @@ ...@@ -121,7 +121,8 @@
"phoneNumberAndCountryCode": "Both country code and phone number must be set", "phoneNumberAndCountryCode": "Both country code and phone number must be set",
"passportNationalityAndNumber": "Both passport nationality and number need to be set", "passportNationalityAndNumber": "Both passport nationality and number need to be set",
"doubleIdentity": "*You have input both national ID and passport. Please choose only one.", "doubleIdentity": "*You have input both national ID and passport. Please choose only one.",
"nationalIdOrPassport": "National ID or passport information need to be entered" "nationalIdOrPassport": "National ID or passport information need to be entered",
"genderIsRequired": "Gender is required"
}, },
"button": { "button": {
"yes": "Yes", "yes": "Yes",
......
...@@ -121,7 +121,8 @@ ...@@ -121,7 +121,8 @@
"phoneNumberAndCountryCode": "Både landkode og telefonnummer må være satt", "phoneNumberAndCountryCode": "Både landkode og telefonnummer må være satt",
"passportNationalityAndNumber": "Både passnasjonalitet og nummer må være satt", "passportNationalityAndNumber": "Både passnasjonalitet og nummer må være satt",
"doubleIdentity": "*Du har fylt inn begge feltene over. Bruk kun ett av de.", "doubleIdentity": "*Du har fylt inn begge feltene over. Bruk kun ett av de.",
"nationalIdOrPassport": "Fødselsnummer/D-nummer eller passinformasjon må spesifiseres" "nationalIdOrPassport": "Fødselsnummer/D-nummer eller passinformasjon må spesifiseres",
"genderIsRequired": "Kjønn er obligatorisk"
}, },
"button": { "button": {
"yes": "Ja", "yes": "Ja",
......
...@@ -121,7 +121,8 @@ ...@@ -121,7 +121,8 @@
"phoneNumberAndCountryCode": "Både landkode og telefonnummer må vere satt", "phoneNumberAndCountryCode": "Både landkode og telefonnummer må vere satt",
"passportNationalityAndNumber": "Både passnasjonalitet og nummer må vere satt", "passportNationalityAndNumber": "Både passnasjonalitet og nummer må vere satt",
"doubleIdentity": "*Du har fylt inn begge felta over. Bruk berre eitt av dei.", "doubleIdentity": "*Du har fylt inn begge felta over. Bruk berre eitt av dei.",
"nationalIdOrPassport": "Fødselsnummer/D-nummer eller passinformasjon må spesifiserast" "nationalIdOrPassport": "Fødselsnummer/D-nummer eller passinformasjon må spesifiserast",
"genderIsRequired": "Kjønn er obligatorisk"
}, },
"button": { "button": {
"yes": "Ja", "yes": "Ja",
......
import React from 'react'
import { render, screen, waitFor } from 'test-utils' import { render, screen, waitFor } from 'test-utils'
import AdapterDateFns from '@mui/lab/AdapterDateFns' import AdapterDateFns from '@mui/lab/AdapterDateFns'
import { LocalizationProvider } from '@mui/lab' import { LocalizationProvider } from '@mui/lab'
import { addYears } from 'date-fns/fp'
import { FeatureContext } from 'contexts'
import GuestRegisterStep from './register' import GuestRegisterStep from './register'
import { GuestRegisterData } from '../enteredGuestData' import { GuestRegisterData } from '../enteredGuestData'
import AuthenticationMethod from '../authenticationMethod' import AuthenticationMethod from '../authenticationMethod'
...@@ -175,3 +176,115 @@ test('Identifier fields disabled and name fields enabled if invite is ID-porten' ...@@ -175,3 +176,115 @@ test('Identifier fields disabled and name fields enabled if invite is ID-porten'
expect(screen.queryByTestId('passport-nationality-input')).toBeEnabled() expect(screen.queryByTestId('passport-nationality-input')).toBeEnabled()
}) })
}) })
test('Gender required to be set if gender field is showing', async () => {
const nextHandler = (registerData: GuestRegisterData) => {
console.log(`Entered data: ${registerData}`)
}
const allFeaturesOn = {
displayContactAtUnit: true,
displayComment: true,
displayContactAtUnitGuestInput: true,
showGenderFieldForGuest: true,
}
const formData: GuestRegisterData = {
firstName: 'Test',
lastName: 'Test2',
mobilePhoneCountry: 'NO',
mobilePhone: '97543980',
nationalIdNumber: '',
passportNumber: '12345678',
passportNationality: 'NO',
dateOfBirth: addYears(-20)(new Date()),
gender: null,
}
const testData = getEmptyGuestData()
// Need this to be able to call on the submit-method on the form
const reference = {
current: {
doSubmit: jest.fn(),
},
}
render(
<FeatureContext.Provider value={allFeaturesOn}>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<GuestRegisterStep
nextHandler={nextHandler}
initialGuestData={testData}
registerData={formData}
ref={reference}
/>
</LocalizationProvider>
</FeatureContext.Provider>
)
reference.current?.doSubmit()
// The validation should fail for gender since to value has been set
const validationMessage = await waitFor(() =>
screen.getByText('validation.genderIsRequired')
)
expect(validationMessage).toBeInTheDocument()
})
test('Gender not required to be set if gender field is not showing', async () => {
const nextHandler = (registerData: GuestRegisterData) => {
console.log(`Entered data: ${registerData}`)
}
const showGenderFieldOff = {
displayContactAtUnit: true,
displayComment: true,
displayContactAtUnitGuestInput: true,
showGenderFieldForGuest: false,
}
const formData: GuestRegisterData = {
firstName: 'Test',
lastName: 'Test2',
mobilePhoneCountry: 'NO',
mobilePhone: '97543980',
nationalIdNumber: '',
passportNumber: '12345678',
passportNationality: 'NO',
dateOfBirth: addYears(-20)(new Date()),
gender: null,
}
const testData = getEmptyGuestData()
const reference = {
current: {
doSubmit: jest.fn(),
},
}
render(
<FeatureContext.Provider value={showGenderFieldOff}>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<GuestRegisterStep
nextHandler={nextHandler}
initialGuestData={testData}
registerData={formData}
ref={reference}
/>
</LocalizationProvider>
</FeatureContext.Provider>
)
reference.current?.doSubmit()
await waitFor(
() => {
expect(
screen.queryByText('validation.genderIsRequired')
).not.toBeInTheDocument()
},
{
timeout: 5000,
}
)
})
...@@ -68,7 +68,7 @@ const GuestRegisterStep = forwardRef( ...@@ -68,7 +68,7 @@ const GuestRegisterStep = forwardRef(
string | undefined string | undefined
>(undefined) >(undefined)
// Set suggestion for gender field is a gender is not already given in the input // Set suggestion for the gender field if gender is not already given in the input
const [gender, setGender] = useState<string>( const [gender, setGender] = useState<string>(
!initialGuestData.gender || !initialGuestData.gender.trim() !initialGuestData.gender || !initialGuestData.gender.trim()
? extractGenderOrBlank(initialGuestData.fnr) ? extractGenderOrBlank(initialGuestData.fnr)
...@@ -77,6 +77,7 @@ const GuestRegisterStep = forwardRef( ...@@ -77,6 +77,7 @@ const GuestRegisterStep = forwardRef(
const [idErrorState, setIdErrorState] = useState<string>('') const [idErrorState, setIdErrorState] = useState<string>('')
const [phoneErrorState, setPhoneErrorState] = useState<string>('') const [phoneErrorState, setPhoneErrorState] = useState<string>('')
const [genderErrorState, setGenderErrorState] = useState<string>('')
const { displayContactAtUnitGuestInput } = useContext(FeatureContext) const { displayContactAtUnitGuestInput } = useContext(FeatureContext)
console.log('register step registerData', registerData) console.log('register step registerData', registerData)
...@@ -158,6 +159,12 @@ const GuestRegisterStep = forwardRef( ...@@ -158,6 +159,12 @@ const GuestRegisterStep = forwardRef(
} }
setIdErrorState('') setIdErrorState('')
if (showGenderFieldForGuest && !gender) {
setGenderErrorState(t('validation.genderIsRequired'))
return
}
setGenderErrorState('')
console.log('register submit errors', errors) console.log('register submit errors', errors)
if (!Object.keys(errors).length) { if (!Object.keys(errors).length) {
...@@ -369,31 +376,36 @@ const GuestRegisterStep = forwardRef( ...@@ -369,31 +376,36 @@ const GuestRegisterStep = forwardRef(
/> />
{showGenderFieldForGuest && ( {showGenderFieldForGuest && (
<Select <>
sx={{ <Select
maxHeight: '2.5rem', sx={{
minWidth: '5rem', maxHeight: '2.5rem',
marginRight: '0.5rem', minWidth: '5rem',
}} marginRight: '0.5rem',
labelId="gender-select" }}
id="gender-select-id" labelId="gender-select"
displayEmpty id="gender-select-id"
onChange={handleGenderChange} displayEmpty
value={gender} onChange={handleGenderChange}
renderValue={(selected: any) => { value={gender}
if (!selected) { renderValue={(selected: any) => {
return t('input.gender') if (!selected) {
} return t('input.gender')
return t(`input.${selected}`) }
}} return t(`input.${selected}`)
> }}
{/* Keep it simple and hardcode the gender values */} >
<MenuItem disabled value=""> {/* Keep it simple and hardcode the gender values */}
{t('input.gender')} <MenuItem disabled value="">
</MenuItem> {t('input.gender')}
<MenuItem value="male">{t('input.male')}</MenuItem> </MenuItem>
<MenuItem value="female">{t('input.female')}</MenuItem> <MenuItem value="male">{t('input.male')}</MenuItem>
</Select> <MenuItem value="female">{t('input.female')}</MenuItem>
</Select>
{genderErrorState && (
<Typography color="error">{genderErrorState}</Typography>
)}
</>
)} )}
<Controller <Controller
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment