Skip to content

Commit

Permalink
chore: add boolean field tests for schema (#3720)
Browse files Browse the repository at this point in the history
  • Loading branch information
tujoworker authored Jun 18, 2024
1 parent d673928 commit 42ad4cc
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,30 @@ import { Field } from '@dnb/eufemia/extensions/forms'
render(<Field.Boolean path="/myState" />)
```

### Indeterminate checkbox
## Indeterminate checkbox

Here is a indeterminate state (partially checked) [working example](/uilib/extensions/forms/base-fields/Indeterminate/).

## Schema validation

You can use a Ajv schema to validate the value with either `const` or `enum`.

```tsx
import { Form, Field } from '@dnb/eufemia/extensions/forms'

const schema = {
type: 'object',
properties: {
myField: {
type: 'boolean',
const: true, // or enum: [true]
},
},
}

render(
<Form.Handler schema={schema} data={{ myField: false }}>
<Field.Boolean path="/myField" />
</Form.Handler>,
)
```
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ import { axeComponent } from '../../../../../core/jest/jestSetup'
import { screen, render, waitFor, fireEvent } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { DataContext, Field, Form } from '../../..'
import nbNO from '../../../constants/locales/nb-NO'

const nb = nbNO['nb-NO']

describe('Field.Boolean', () => {
describe('variant: checkbox', () => {
Expand Down Expand Up @@ -699,4 +702,102 @@ describe('Field.Boolean', () => {
})
})
})

describe('schema', () => {
it('should validate with schema and const', () => {
const booleanSchema = {
type: 'boolean',
const: true,
}

render(
<Field.Boolean
value={false}
schema={booleanSchema}
validateInitially
/>
)

const formStatus = document.querySelector('.dnb-form-status')
expect(formStatus).toBeInTheDocument()
expect(formStatus).toHaveTextContent('must be equal to constant')
})

it('should validate with schema and enum', () => {
const booleanSchema = {
type: 'boolean',
enum: [true],
}

render(
<Field.Boolean
value={false}
schema={booleanSchema}
validateInitially
/>
)

const formStatus = document.querySelector('.dnb-form-status')
expect(formStatus).toBeInTheDocument()
expect(formStatus).toHaveTextContent(
'must be equal to one of the allowed values'
)
})

it('should validate with schema given in context', () => {
const schema = {
type: 'object',
properties: {
myField: {
type: 'boolean',
const: true,
},
},
}

render(
<Form.Handler schema={schema} data={{ myField: false }}>
<Field.Boolean path="/myField" validateInitially />
</Form.Handler>
)

const formStatus = document.querySelector('.dnb-form-status')
expect(formStatus).toBeInTheDocument()
expect(formStatus).toHaveTextContent('must be equal to constant')
})

it('should validate with schema interactively', async () => {
const schema = {
type: 'object',
properties: {
myField: {
type: 'boolean',
const: true,
},
},
}

render(
<Form.Handler schema={schema} data={{ myField: undefined }}>
<Field.Boolean required path="/myField" />
</Form.Handler>
)

const form = document.querySelector('form')
const formStatus = () => document.querySelector('.dnb-form-status')

fireEvent.submit(form)
expect(formStatus()).toBeInTheDocument()
expect(formStatus()).toHaveTextContent(nb.Field.errorRequired)

await userEvent.click(document.querySelector('input'))
expect(formStatus()).not.toBeInTheDocument()

await userEvent.click(document.querySelector('input'))

fireEvent.submit(form)
expect(formStatus()).toBeInTheDocument()
expect(formStatus()).toHaveTextContent('must be equal to constant')
})
})
})

0 comments on commit 42ad4cc

Please sign in to comment.