diff --git a/src/elements/public/DataRetentionSettingsForm/DataRetentionSettingsForm.stories.ts b/src/elements/public/DataRetentionSettingsForm/DataRetentionSettingsForm.stories.ts new file mode 100644 index 00000000..9cc0787f --- /dev/null +++ b/src/elements/public/DataRetentionSettingsForm/DataRetentionSettingsForm.stories.ts @@ -0,0 +1,25 @@ +import './index'; + +import { Summary } from '../../../storygen/Summary'; +import { getMeta } from '../../../storygen/getMeta'; +import { getStory } from '../../../storygen/getStory'; + +const summary: Summary = { + href: 'https://demo.api/hapi/data_retention_settings/0', + parent: 'https://demo.api/hapi/data_retention_settings', + nucleon: true, + localName: 'foxy-data-retention-settings-form', + translatable: true, + configurable: {}, +}; + +export default getMeta(summary); + +export const Playground = getStory({ ...summary, code: true }); +export const Empty = getStory(summary); +export const Error = getStory(summary); +export const Busy = getStory(summary); + +Empty.args.href = ''; +Error.args.href = 'https://demo.api/virtual/empty?status=404'; +Busy.args.href = 'https://demo.api/virtual/stall'; diff --git a/src/elements/public/DataRetentionSettingsForm/DataRetentionSettingsForm.test.ts b/src/elements/public/DataRetentionSettingsForm/DataRetentionSettingsForm.test.ts new file mode 100644 index 00000000..f4e13aa6 --- /dev/null +++ b/src/elements/public/DataRetentionSettingsForm/DataRetentionSettingsForm.test.ts @@ -0,0 +1,118 @@ +import './index'; + +import { expect, fixture, html } from '@open-wc/testing'; +import { InternalForm } from '../../internal/InternalForm/InternalForm'; +import { DataRetentionSettingsForm as Form } from './DataRetentionSettingsForm'; + +describe('DataRetentionSettingsForm', () => { + it('imports and registers foxy-internal-summary-control', () => { + expect(customElements.get('foxy-internal-summary-control')).to.exist; + }); + + it('imports and registers foxy-internal-switch-control', () => { + expect(customElements.get('foxy-internal-switch-control')).to.exist; + }); + + it('imports and registers foxy-internal-number-control', () => { + expect(customElements.get('foxy-internal-number-control')).to.exist; + }); + + it('imports and registers foxy-internal-form', () => { + expect(customElements.get('foxy-internal-form')).to.exist; + }); + + it('registers as foxy-data-retention-settings-form', () => { + expect(customElements.get('foxy-data-retention-settings-form')).to.equal(Form); + }); + + it('extends InternalForm', () => { + expect(new Form()).to.be.instanceOf(InternalForm); + }); + + it('has a default i18n namespace of "data-retention-settings-form"', () => { + expect(Form).to.have.property('defaultNS', 'data-retention-settings-form'); + }); + + describe('v8n', () => { + it('allows an unset auto_anonymize_days', () => { + const element = new Form(); + expect(element.errors).to.not.include('auto-anonymize-days:v8n_too_small'); + expect(element.errors).to.not.include('auto-anonymize-days:v8n_required'); + }); + + it('produces "auto-anonymize-days:v8n_too_small" when below 90', () => { + const element = new Form(); + element.edit({ auto_anonymize_days: 89 }); + expect(element.errors).to.include('auto-anonymize-days:v8n_too_small'); + + element.edit({ auto_anonymize_days: 90 }); + expect(element.errors).to.not.include('auto-anonymize-days:v8n_too_small'); + }); + + it('requires days when auto_anonymize is enabled', () => { + const element = new Form(); + element.edit({ auto_anonymize: true }); + expect(element.errors).to.include('auto-anonymize-days:v8n_required'); + + element.edit({ auto_anonymize_days: 365 }); + expect(element.errors).to.not.include('auto-anonymize-days:v8n_required'); + }); + }); + + describe('hiddenSelector', () => { + it('always hides delete and timestamps', async () => { + const element = await fixture