|
|
@@ -0,0 +1,107 @@
|
|
|
+import {expect} from 'chai';
|
|
|
+import {DataType} from '../data-type.js';
|
|
|
+import {ServiceContainer} from '@e22m4u/js-service';
|
|
|
+import {EmptyValuesService} from '@e22m4u/js-empty-values';
|
|
|
+import {defaultValueSetter} from './default-value-setter.js';
|
|
|
+
|
|
|
+describe('defaultValueSetter', function () {
|
|
|
+ it('should return an empty value as is when default values is disabled', function () {
|
|
|
+ const container = new ServiceContainer();
|
|
|
+ const emptyValues = container.get(EmptyValuesService);
|
|
|
+ emptyValues.setEmptyValuesOf(DataType.ANY, ['none']);
|
|
|
+ const res = defaultValueSetter(
|
|
|
+ 'none',
|
|
|
+ {type: DataType.ANY, default: 10},
|
|
|
+ {noDefaultValues: true},
|
|
|
+ container,
|
|
|
+ );
|
|
|
+ expect(res).to.be.eq('none');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should return an empty value as is when no default value is specified', function () {
|
|
|
+ const container = new ServiceContainer();
|
|
|
+ const emptyValues = container.get(EmptyValuesService);
|
|
|
+ emptyValues.setEmptyValuesOf(DataType.ANY, ['none']);
|
|
|
+ const res = defaultValueSetter(
|
|
|
+ 'none',
|
|
|
+ {type: DataType.ANY},
|
|
|
+ undefined,
|
|
|
+ container,
|
|
|
+ );
|
|
|
+ expect(res).to.be.eq('none');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should return a non-empty value as is', function () {
|
|
|
+ const container = new ServiceContainer();
|
|
|
+ const emptyValues = container.get(EmptyValuesService);
|
|
|
+ emptyValues.setEmptyValuesOf(DataType.ANY, ['none']);
|
|
|
+ const res = defaultValueSetter(
|
|
|
+ 'non-empty',
|
|
|
+ {type: DataType.ANY},
|
|
|
+ undefined,
|
|
|
+ container,
|
|
|
+ );
|
|
|
+ expect(res).to.be.eq('non-empty');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should return a non-empty value as is even if the "default" option is specified', function () {
|
|
|
+ const container = new ServiceContainer();
|
|
|
+ const emptyValues = container.get(EmptyValuesService);
|
|
|
+ emptyValues.setEmptyValuesOf(DataType.ANY, ['none']);
|
|
|
+ const res = defaultValueSetter(
|
|
|
+ 'non-empty',
|
|
|
+ {type: DataType.ANY, default: 10},
|
|
|
+ undefined,
|
|
|
+ container,
|
|
|
+ );
|
|
|
+ expect(res).to.be.eq('non-empty');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should resolve a factory value from the "default" option', function () {
|
|
|
+ const container = new ServiceContainer();
|
|
|
+ const emptyValues = container.get(EmptyValuesService);
|
|
|
+ emptyValues.setEmptyValuesOf(DataType.ANY, ['none']);
|
|
|
+ let invoked = 0;
|
|
|
+ const factory = (...args) => {
|
|
|
+ invoked++;
|
|
|
+ expect(args).to.be.eql([container]);
|
|
|
+ return 10;
|
|
|
+ };
|
|
|
+ const res = defaultValueSetter(
|
|
|
+ 'none',
|
|
|
+ {type: DataType.ANY, default: factory},
|
|
|
+ undefined,
|
|
|
+ container,
|
|
|
+ );
|
|
|
+ expect(res).to.be.eq(10);
|
|
|
+ expect(invoked).to.be.eq(1);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should return a default value when a given value is empty', function () {
|
|
|
+ const container = new ServiceContainer();
|
|
|
+ const emptyValues = container.get(EmptyValuesService);
|
|
|
+ emptyValues.setEmptyValuesOf(DataType.ANY, ['none']);
|
|
|
+ const res = defaultValueSetter(
|
|
|
+ 'none',
|
|
|
+ {type: DataType.ANY, default: 10},
|
|
|
+ undefined,
|
|
|
+ container,
|
|
|
+ );
|
|
|
+ expect(res).to.be.eq(10);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should return a clone of a default value instead of its reference', function () {
|
|
|
+ const container = new ServiceContainer();
|
|
|
+ const emptyValues = container.get(EmptyValuesService);
|
|
|
+ emptyValues.setEmptyValuesOf(DataType.ANY, ['none']);
|
|
|
+ const defaultValue = {foo: 'bar'};
|
|
|
+ const res = defaultValueSetter(
|
|
|
+ 'none',
|
|
|
+ {type: DataType.ANY, default: defaultValue},
|
|
|
+ undefined,
|
|
|
+ container,
|
|
|
+ );
|
|
|
+ expect(res).to.be.eql(defaultValue);
|
|
|
+ expect(res).to.be.not.eq(defaultValue);
|
|
|
+ });
|
|
|
+});
|