import assert from 'assert' import { MultiError, LangError } from '../src/index' const locales = { "en": { "login_errors": { "invalid_name": "Invalid Name: {name}!", 'invalid_email': "Invalid email!", } }, "de": { "login_errors": { "invalid_name": "Ungültiger Name: {name}!", "invalid_email": "Ungültiger email!", } }, "es": { "login_errors": { "invalid_name": "Nombre no válido: {name}!", "invalid_email": "el correo electrónico es invalido", } } } describe('MultiError', () => { it('should work', () => { let multierror = new MultiError('Invalid Form.') multierror.push('Invalid Name') multierror.push('Invalid Email') multierror.push('Invalid Phone Number') assert.equal(multierror.errors[0] instanceof Error, true) assert.equal(multierror.errors[1] instanceof Error, true) assert.equal(multierror.errors[2] instanceof Error, true) assert.equal(multierror.errors[0].message, 'Invalid Name') assert.equal(multierror.errors[1].message, 'Invalid Email') assert.equal(multierror.errors[2].message, 'Invalid Phone Number') assert.equal(multierror.messages.length, 3) assert.equal(multierror.messages[0], 'Invalid Name') assert.equal(multierror.messages[1], 'Invalid Email') assert.equal(multierror.messages[2], 'Invalid Phone Number') assert.equal(multierror.errorsPresent, true) assert.equal(multierror.shouldThrow, true) assert.equal(multierror.message, 'Invalid Form. | Invalid Name, Invalid Email, Invalid Phone Number') }) it('should not throw when no errors pushed', () => { let multierror = new MultiError('Invalid Form.') if (false) multierror.push('Invalid Name') assert.equal(multierror.errorsPresent, false) assert.equal(multierror.shouldThrow, false) }) }) const EXAMPLE_JSON = { 'name': 'LangError', 'message': 'invalid_name', 'messages': { en: 'Invalid Name: Thomas!', de: 'Ungültiger Name: Thomas!', es: 'Nombre no válido: Thomas!' } } describe('LangError', () => { it('should work', () => { let langerror = new LangError('invalid_name', { name: 'Thomas' }, {locales, nestedLocalesProp: 'login_errors'}) assert.deepEqual(langerror.localesAvailable, ['en', 'de', 'es']) assert.deepEqual(langerror.rawMessages, { en: 'Invalid Name: {name}!', de: 'Ungültiger Name: {name}!', es: 'Nombre no válido: {name}!' }) assert.deepEqual(langerror.messages, { en: 'Invalid Name: Thomas!', de: 'Ungültiger Name: Thomas!', es: 'Nombre no válido: Thomas!' }) assert.equal(langerror.message, 'invalid_name') }) it('should use default (en) lang message for error message', () => { let langerror = new LangError('invalid_name', { name: 'Thomas' }, {locales, nestedLocalesProp: 'login_errors', defaultAsErrorMessage: true}) assert.deepEqual(langerror.localesAvailable, ['en', 'de', 'es']) assert.deepEqual(langerror.rawMessages, { en: 'Invalid Name: {name}!', de: 'Ungültiger Name: {name}!', es: 'Nombre no válido: {name}!' }) assert.deepEqual(langerror.messages, { en: 'Invalid Name: Thomas!', de: 'Ungültiger Name: Thomas!', es: 'Nombre no válido: Thomas!' }) assert.equal(langerror.message, 'Invalid Name: Thomas!') }) it('should use default (de) lang message for error message', () => { let langerror = new LangError('invalid_name', { name: 'Thomas' }, {locales, nestedLocalesProp: 'login_errors', defaultAsErrorMessage: true, defaultLocale: 'de'}) assert.deepEqual(langerror.localesAvailable, ['en', 'de', 'es']) assert.deepEqual(langerror.rawMessages, { en: 'Invalid Name: {name}!', de: 'Ungültiger Name: {name}!', es: 'Nombre no válido: {name}!' }) assert.deepEqual(langerror.messages, { en: 'Invalid Name: Thomas!', de: 'Ungültiger Name: Thomas!', es: 'Nombre no válido: Thomas!' }) assert.equal(langerror.message, 'Ungültiger Name: Thomas!') }) it('should use create LangError from JSON', () => { let err = new LangError().fromJSON(EXAMPLE_JSON) assert.deepEqual(err.messages, { en: 'Invalid Name: Thomas!', de: 'Ungültiger Name: Thomas!', es: 'Nombre no válido: Thomas!' }) }) it('should use convert LangError to JSON', () => { let err = new LangError('invalid_name', { name: 'Thomas' }, {locales, nestedLocalesProp: 'login_errors' }) let json = err.toJSON() assert.deepEqual(json, EXAMPLE_JSON) }) it('should create LangError from JSON from LangError', () => { let err = new LangError('invalid_name', { name: 'Thomas' }, {locales, nestedLocalesProp: 'login_errors' }) let newErr = new LangError().fromJSON(err.toJSON()) assert.deepEqual(newErr.toJSON(), EXAMPLE_JSON) assert.deepEqual(newErr.messages, EXAMPLE_JSON.messages) }) it('should update props', () => { let langerror = new LangError('invalid_name', {}, {locales, nestedLocalesProp: 'login_errors' }) assert.deepEqual(langerror.localesAvailable, ['en', 'de', 'es']) assert.deepEqual(langerror.rawMessages, { en: 'Invalid Name: {name}!', de: 'Ungültiger Name: {name}!', es: 'Nombre no válido: {name}!' }) langerror.updateProps({ name: 'Thomas' }) assert.deepEqual(langerror.messages, { en: 'Invalid Name: Thomas!', de: 'Ungültiger Name: Thomas!', es: 'Nombre no válido: Thomas!' }) assert.equal(langerror.message, 'invalid_name') }) }) describe('MultiError & LangError', () => { it('should work', () => { const langDefinition = {locales, nestedLocalesProp: 'login_errors', defaultAsErrorMessage: true} let multierror = new MultiError('Invalid Form.') multierror.push(new LangError('invalid_name', { name: 'Thomas' }, langDefinition)) multierror.push(new LangError('invalid_email', { name: 'Thomas' }, langDefinition)) assert.equal(multierror.errorsPresent, true) assert.equal(multierror.shouldThrow, true) assert.equal(multierror.message, 'Invalid Form. | Invalid Name: Thomas!, Invalid email!') assert.deepEqual(multierror.messages, [ 'Invalid Name: Thomas!', 'Invalid email!' ]) assert.deepEqual(multierror.getMessages('messages.de'), [ 'Ungültiger Name: Thomas!', 'Ungültiger email!' ]) assert.deepEqual(multierror.getMessages('messages.es'), [ 'Nombre no válido: Thomas!', 'el correo electrónico es invalido' ]) assert.deepEqual(multierror.getMessages('messages.en'), [ 'Invalid Name: Thomas!', 'Invalid email!' ]) }) })