import * as fc from 'fast-check' import * as fcArb from '../../utilities/fast-check/arbitraries' import stringify from './stringify' it('should exist', () => { expect(stringify).toBeDefined() }) it('should be a function', () => { expect(stringify).toBeFunction() }) it('should accept 1 argument', () => { expect(stringify).toHaveLength(1) }) it('should return a string value', () => { fc.assert( fc.property(fc.anything(), (v) => { expect(stringify(v)).toBeString() }), ) }) describe('on arguments', () => { it('should consider `undefined` as empty string', () => { expect(stringify(undefined)).toBe('') }) it('should consider `null` as empty string', () => { expect(stringify(null)).toBe('') }) it('should stringify non-objects', () => { fc.assert( fc.property(fcArb.nonObject(), fc.string(), (v) => { expect(stringify(v)).toBe(String(v)) }), ) }) it('should stringify objects', () => { fc.assert( fc.property(fc.object(), (v) => { expect(stringify(v)).toBe(JSON.stringify(v)) }), ) }) describe('on arrays', () => { it('should stringify empty arrays', () => { fc.assert( fc.property(fc.array(fcArb.nonObject(), 0), (v) => { expect(stringify(v)).toBe('') }), ) }) it('should stringify arrays with single values', () => { fc.assert( fc.property(fc.array(fcArb.nonObject(), 1, 1), (v) => { expect(stringify(v)).toBe(String(v[0])) }), ) }) it('should stringify arrays with 2 or more values', () => { fc.assert( fc.property(fc.array(fcArb.nonObject(), 2, 20), (v) => { expect(stringify(v)).toContain(',') }), ) }) }) })