UNPKG

rtech-struct

Version:

Rtech Platform Superstruct Entity

302 lines (276 loc) 7.16 kB
const s = require('superstruct') const { sfu } = require('../../../index') const struct = sfu().address describe('Address object structure', () => { test('Success: Address structure', () => { expect( s.is( { street: '34 Rue Jacques Marjorelle', additional_street: 'en face du 35', city: 'Ennery', zip_code: '57365', country: 'FR', province: 'Moselle', position: { lat: 49.221935, lon: 6.217841 }, timezone_string: 'Europe/Paris' }, struct.address ) ).toBeTruthy() expect( s.is( { street: '34 Rue Jacques Marjorelle', city: 'Ennery', zip_code: '57365', country: 'FR', position: { lat: 49.221935, lon: 6.217841 }, timezone_string: 'Europe/Paris' }, struct.address ) ).toBeTruthy() expect( s.is( { street: '34 Rue Jacques Marjorelle', city: 'Ennery', zip_code: '57365', country: 'FR', position: { lat: 49.221935, lon: 6.217841 }, timezone_string: null }, struct.address ) ).toBeFalsy() expect( s.is( { street: '34 Rue Jacques Marjorelle', additional_street: null, city: 'Ennery', zip_code: '57365', province: null, country: 'FR', position: { lat: 49.221935, lon: 6.217841 }, timezone_string: 'Europe/Paris' }, struct.address ) ).toBeFalsy() expect( s.is( { street: '34 Rue Jacques Marjorelle', additional_street: '', city: 'Ennery', zip_code: '57365', province: '', country: 'FR', position: { lat: 49.221935, lon: 6.217841 }, timezone_string: 'Europe/Paris' }, struct.address ) ).toBeFalsy() }) test('Fail: Address structure mandatory fields are present', () => { const error = s.validate({}, struct.address) for (const failure of error[0].failures()) { expect(['street', 'city', 'zip_code', 'country', 'position', 'timezone_string']).toEqual( expect.arrayContaining(failure.path) ) } }) test('Fail: Address structure mandatory fields are empty', () => { const [error, entity] = s.validate( { street: '', city: '', zip_code: '', country: '', position: '', timezone_string: '' }, struct.address ) for (const failure of error.failures()) { expect(['street', 'city', 'zip_code', 'country', 'position', 'timezone_string']).toEqual( expect.arrayContaining(failure.path) ) } }) test('Fail: Address structure mandatory fields are null', () => { const [error, entity] = s.validate( { street: null, city: null, zip_code: null, country: null, position: null, timezone_string: null }, struct.address ) for (const failure of error.failures()) { expect(['street', 'city', 'zip_code', 'country', 'position', 'timezone_string']).toEqual( expect.arrayContaining(failure.path) ) } }) test('Fail: Address structure position must match the format', () => { const [error1, entity1] = s.validate( { street: '34 Rue Jacques Marjorelle', city: 'Ennery', zip_code: '57365', country: 'FR', position: '49.2219356.217841', timezone_string: 'Europe/Paris' }, struct.address ) expect(error1).toBeInstanceOf(s.StructError) expect(error1.path[0]).toBe('position') const [error2, entity2] = s.validate( { street: '34 Rue Jacques Marjorelle', city: 'Ennery', zip_code: '57365', country: 'FR', position: null, timezone_string: 'Europe/Paris' }, struct.address ) expect(error2).toBeInstanceOf(s.StructError) expect(error2.path[0]).toBe('position') const [error3, entity3] = s.validate( { street: '34 Rue Jacques Marjorelle', city: 'Ennery', zip_code: '57365', country: 'FR', position: 49.221935, timezone_string: 'Europe/Paris' }, struct.address ) expect(error3).toBeInstanceOf(s.StructError) expect(error3.path[0]).toBe('position') }) test('Success: Geolocalizations can be negative', () => { expect( s.is( { street: '34 Rue Jacques Marjorelle', additional_street: 'en face du 35', city: 'Ennery', zip_code: '57365', country: 'FR', province: 'Moselle', position: { lat: -49.221935, lon: 6.217841 }, timezone_string: 'Europe/Paris' }, struct.address ) ).toBeTruthy() expect( s.is( { street: '34 Rue Jacques Marjorelle', additional_street: 'en face du 35', city: 'Ennery', zip_code: '57365', country: 'FR', province: 'Moselle', position: { lat: 49.221935, lon: -6.217841 }, timezone_string: 'Europe/Paris' }, struct.address ) ).toBeTruthy() expect( s.is( { street: '34 Rue Jacques Marjorelle', additional_street: 'en face du 35', city: 'Ennery', zip_code: '57365', country: 'FR', province: 'Moselle', position: { lat: -49.221935, lon: -6.217841 }, timezone_string: 'Europe/Paris' }, struct.address ) ).toBeTruthy() }) test('Fail: wrong type', () => { const [error1] = s.validate( { street: '34 Rue Jacques Marjorelle', additional_street: 'en face du 35', city: 'Ennery', zip_code: '57365', country: 'FR', province: 'Moselle', position: { lat: 49.221935, lon: 6.217841 }, timezone_string: 'Europe/Paris', type: 'wrong type' }, struct.address ) expect(error1).toBeInstanceOf(s.StructError) expect(error1.path[0]).toBe('type') }) test('Success: Address structure type is defaulted to point', () => { const [error, entity] = s.validate( { street: '34 Rue Jacques Marjorelle', additional_street: 'en face du 35', city: 'Ennery', zip_code: '57365', country: 'FR', province: 'Moselle', position: { lat: 49.221935, lon: 6.217841 }, timezone_string: 'Europe/Paris' }, struct.address, { coerce: true } ) expect(error).toBeUndefined() expect(entity.type).toBe('sfu/address') }) })