import { displayUniqueBy } from '../src/app/app-config/config-cursor' function assert(predicate: boolean, message: string) { if (!predicate) { throw new Error('Assertion Failed: ' + message) } } function assertEq(a: any, b: any, message: string) { assert(a === b, message) } function test() { assertEq( displayUniqueBy( 'foo', { type: 'object', name: 'Object', spec: { 'foo': { type: 'string', name: 'Foo', nullable: true, copyable: false, masked: false, }, }, nullByDefault: false, nullable: false, uniqueBy: 'foo' }, { foo: 'foo-val', } ), 'Foo', 'base string uses name mapping' ) assertEq( displayUniqueBy( { any: [ 'foo', 'bar' ] }, { type: 'object', name: 'Object', spec: { 'foo': { type: 'string', name: 'Foo', nullable: true, copyable: false, masked: false, }, 'bar': { type: 'string', name: 'Bar', nullable: true, copyable: false, masked: false, }, }, nullByDefault: false, nullable: false, uniqueBy: { any: [ 'foo', 'bar' ] } }, { foo: 'foo-val', bar: 'bar-val', } ), 'Foo and Bar', '`any` must be joined with `and`' ) assertEq( displayUniqueBy( { all: [ 'foo', 'bar' ] }, { type: 'object', name: 'Object', spec: { 'foo': { type: 'string', name: 'Foo', nullable: true, copyable: false, masked: false, }, 'bar': { type: 'string', name: 'Bar', nullable: true, copyable: false, masked: false, }, }, nullByDefault: false, nullable: false, uniqueBy: { all: [ 'foo', 'bar' ] } }, { foo: 'foo-val', bar: 'bar-val', } ), 'Foo or Bar', '`all` must be joined with `or`' ) assertEq( displayUniqueBy( { any: [ 'foo', { all: [ 'bar', 'baz' ] } ] }, { type: 'object', name: 'Object', spec: { 'foo': { type: 'string', name: 'Foo', nullable: true, copyable: false, masked: false, }, 'bar': { type: 'string', name: 'Bar', nullable: true, copyable: false, masked: false, }, 'baz': { type: 'string', name: 'Baz', nullable: true, copyable: false, masked: false, } }, nullByDefault: false, nullable: false, uniqueBy: { any: [ 'foo', { all: [ 'bar', 'baz' ] } ] } }, { foo: 'foo-val', bar: 'bar-val', baz: 'baz-val', } ), 'Foo and (Bar or Baz)', '`any` of `all` is correct' ) assertEq( displayUniqueBy( { any: [ 'foo', { all: [ 'bar', 'baz' ] } ] }, { type: 'union', name: 'Union', tag: { id: 'variant', name: 'Variant', variantNames: { 'variant-a': 'Variant A', 'variant-b': 'Variant B' } }, variants: { 'variant-a': { 'foo': { type: 'string', name: 'Foo', nullable: true, copyable: false, masked: false, }, 'bar': { type: 'string', name: 'Bar', nullable: true, copyable: false, masked: false, }, 'baz': { type: 'string', name: 'Baz', nullable: true, copyable: false, masked: false, } }, 'variant-b': {}, }, uniqueBy: { any: [ 'foo', { all: [ 'bar', 'baz' ] } ] }, default: 'variant-a', }, { variant: 'variant-a', foo: 'foo-val', bar: 'bar-val', baz: 'baz-val', } ), 'Foo and (Bar or Baz)', 'union is correct' ) }