e22m4u 6 дней назад
Родитель
Сommit
aa684c98e9

+ 4 - 5
package.json

@@ -44,17 +44,16 @@
     "@e22m4u/js-service": "~0.5.1"
   },
   "devDependencies": {
-    "@commitlint/cli": "~20.1.0",
-    "@commitlint/config-conventional": "~20.0.0",
-    "@e22m4u/js-spy": "~0.3.4",
+    "@commitlint/cli": "~20.2.0",
+    "@commitlint/config-conventional": "~20.2.0",
+    "@e22m4u/js-spy": "~0.3.5",
     "@types/chai": "~5.2.3",
     "@types/chai-as-promised": "~8.0.2",
     "@types/mocha": "~10.0.10",
     "c8": "~10.1.3",
     "chai": "~6.2.1",
     "chai-as-promised": "~8.0.2",
-    "chai-spies": "~1.1.0",
-    "esbuild": "~0.27.0",
+    "esbuild": "~0.27.1",
     "eslint": "~9.39.1",
     "eslint-config-prettier": "~10.1.8",
     "eslint-plugin-chai-expect": "~3.1.0",

+ 8 - 8
src/adapter/adapter.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {createSpiesGroup} from '@e22m4u/js-spy';
+import {createSandbox} from '@e22m4u/js-spy';
 import {DatabaseSchema} from '../database-schema.js';
 import {Adapter, ADAPTER_CLASS_NAME} from './adapter.js';
 import {Service, ServiceContainer} from '@e22m4u/js-service';
@@ -12,7 +12,7 @@ import {
   PropertyUniquenessDecorator,
 } from './decorator/index.js';
 
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('Adapter', function () {
   it('exposes static property "kinds"', function () {
@@ -24,7 +24,7 @@ describe('Adapter', function () {
 
   describe('constructor', function () {
     afterEach(function () {
-      spies.restore();
+      sandbox.restore();
     });
 
     it('inherits from the Service class', function () {
@@ -52,11 +52,11 @@ describe('Adapter', function () {
         expect(ctx).to.be.instanceof(Adapter);
         order.push(this);
       };
-      spies.on(dec1, 'decorate', decorate);
-      spies.on(dec2, 'decorate', decorate);
-      spies.on(dec3, 'decorate', decorate);
-      spies.on(dec4, 'decorate', decorate);
-      spies.on(dec5, 'decorate', decorate);
+      sandbox.on(dec1, 'decorate', decorate);
+      sandbox.on(dec2, 'decorate', decorate);
+      sandbox.on(dec3, 'decorate', decorate);
+      sandbox.on(dec4, 'decorate', decorate);
+      sandbox.on(dec5, 'decorate', decorate);
       new Adapter(dbs.container);
       expect(order).to.be.empty;
       expect(dec1.decorate).to.be.not.called;

+ 8 - 8
src/adapter/decorator/data-sanitizing-decorator.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Adapter} from '../adapter.js';
-import {createSpiesGroup} from '@e22m4u/js-spy';
+import {createSandbox} from '@e22m4u/js-spy';
 import {DatabaseSchema} from '../../database-schema.js';
 import {ModelDataSanitizer} from '../../definition/index.js';
 
@@ -36,15 +36,15 @@ class TestAdapter extends Adapter {
 
 const A = dbs.getService(TestAdapter);
 const V = dbs.getService(ModelDataSanitizer);
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('DataSanitizingDecorator', function () {
   afterEach(function () {
-    spies.restore();
+    sandbox.restore();
   });
 
   it('overrides the "create" method and sanitizes a given data', async function () {
-    spies.on(V, 'sanitize');
+    sandbox.on(V, 'sanitize');
     const data = {};
     await A.create('model', data);
     expect(V.sanitize).to.be.called.once;
@@ -52,7 +52,7 @@ describe('DataSanitizingDecorator', function () {
   });
 
   it('overrides the "replaceById" method and sanitizes a given data', async function () {
-    spies.on(V, 'sanitize');
+    sandbox.on(V, 'sanitize');
     const data = {};
     await A.replaceById('model', 1, data);
     expect(V.sanitize).to.be.called.once;
@@ -60,7 +60,7 @@ describe('DataSanitizingDecorator', function () {
   });
 
   it('overrides the "replaceOrCreate" method and sanitizes a given data', async function () {
-    spies.on(V, 'sanitize');
+    sandbox.on(V, 'sanitize');
     const data = {};
     await A.replaceOrCreate('model', data);
     expect(V.sanitize).to.be.called.once;
@@ -68,7 +68,7 @@ describe('DataSanitizingDecorator', function () {
   });
 
   it('overrides the "patch" method and sanitizes a given data', async function () {
-    spies.on(V, 'sanitize');
+    sandbox.on(V, 'sanitize');
     const data = {};
     await A.patch('model', data);
     expect(V.sanitize).to.be.called.once;
@@ -76,7 +76,7 @@ describe('DataSanitizingDecorator', function () {
   });
 
   it('overrides the "patchById" method and sanitizes a given data', async function () {
-    spies.on(V, 'sanitize');
+    sandbox.on(V, 'sanitize');
     const data = {};
     await A.patchById('model', 1, data);
     expect(V.sanitize).to.be.called.once;

+ 10 - 10
src/adapter/decorator/default-values-decorator.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Adapter} from '../adapter.js';
-import {createSpiesGroup} from '@e22m4u/js-spy';
+import {createSandbox} from '@e22m4u/js-spy';
 import {DatabaseSchema} from '../../database-schema.js';
 import {DataType, ModelDefinitionUtils} from '../../definition/index.js';
 
@@ -57,15 +57,15 @@ class TestAdapter extends Adapter {
 
 const A = dbs.getService(TestAdapter);
 const U = dbs.getService(ModelDefinitionUtils);
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('DefaultValuesDecorator', function () {
   afterEach(function () {
-    spies.restore();
+    sandbox.restore();
   });
 
   it('overrides the "create" method method and sets default values to input data', async function () {
-    spies.on(
+    sandbox.on(
       U,
       'setDefaultValuesToEmptyProperties',
       (modelName, modelData, onlyProvidedProperties = false) => {
@@ -81,7 +81,7 @@ describe('DefaultValuesDecorator', function () {
   });
 
   it('overrides the "replaceById" method and sets default values to input data', async function () {
-    spies.on(
+    sandbox.on(
       U,
       'setDefaultValuesToEmptyProperties',
       (modelName, modelData, onlyProvidedProperties = false) => {
@@ -97,7 +97,7 @@ describe('DefaultValuesDecorator', function () {
   });
 
   it('overrides the "replaceOrCreate" method and sets default values to input data', async function () {
-    spies.on(
+    sandbox.on(
       U,
       'setDefaultValuesToEmptyProperties',
       (modelName, modelData, onlyProvidedProperties = false) => {
@@ -113,7 +113,7 @@ describe('DefaultValuesDecorator', function () {
   });
 
   it('overrides the "patch" method and sets default values to input data', async function () {
-    spies.on(
+    sandbox.on(
       U,
       'setDefaultValuesToEmptyProperties',
       (modelName, modelData, onlyProvidedProperties = false) => {
@@ -129,7 +129,7 @@ describe('DefaultValuesDecorator', function () {
   });
 
   it('overrides the "patchById" method and sets default values to input data', async function () {
-    spies.on(
+    sandbox.on(
       U,
       'setDefaultValuesToEmptyProperties',
       (modelName, modelData, onlyProvidedProperties = false) => {
@@ -145,7 +145,7 @@ describe('DefaultValuesDecorator', function () {
   });
 
   it('overrides the "find" method and sets default values to output data', async function () {
-    spies.on(
+    sandbox.on(
       U,
       'setDefaultValuesToEmptyProperties',
       (modelName, modelData, onlyProvidedProperties = false) => {
@@ -161,7 +161,7 @@ describe('DefaultValuesDecorator', function () {
   });
 
   it('overrides the "findById" method and sets default values to output data', async function () {
-    spies.on(
+    sandbox.on(
       U,
       'setDefaultValuesToEmptyProperties',
       (modelName, modelData, onlyProvidedProperties = false) => {

+ 9 - 9
src/adapter/decorator/fields-filtering-decorator.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Adapter} from '../adapter.js';
-import {createSpiesGroup} from '@e22m4u/js-spy';
+import {createSandbox} from '@e22m4u/js-spy';
 import {FieldsClauseTool} from '../../filter/index.js';
 import {DatabaseSchema} from '../../database-schema.js';
 
@@ -55,15 +55,15 @@ class TestAdapter extends Adapter {
 
 const A = dbs.getService(TestAdapter);
 const T = dbs.getService(FieldsClauseTool);
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('FieldsFilteringDecorator', function () {
   afterEach(function () {
-    spies.restore();
+    sandbox.restore();
   });
 
   it('overrides the "create" method method and filtering output fields', async function () {
-    spies.on(T, 'filter');
+    sandbox.on(T, 'filter');
     const retval = await A.create(MODEL_NAME, {}, FILTER);
     expect(retval).to.be.eql(RETVAL_DATA);
     expect(T.filter).to.be.called.once;
@@ -71,7 +71,7 @@ describe('FieldsFilteringDecorator', function () {
   });
 
   it('overrides the "replaceById" method and filtering output fields', async function () {
-    spies.on(T, 'filter');
+    sandbox.on(T, 'filter');
     const retval = await A.replaceById(MODEL_NAME, 1, {}, FILTER);
     expect(retval).to.be.eql(RETVAL_DATA);
     expect(T.filter).to.be.called.once;
@@ -79,7 +79,7 @@ describe('FieldsFilteringDecorator', function () {
   });
 
   it('overrides the "replaceOrCreate" method and filtering output fields', async function () {
-    spies.on(T, 'filter');
+    sandbox.on(T, 'filter');
     const retval = await A.replaceOrCreate(MODEL_NAME, {}, FILTER);
     expect(retval).to.be.eql(RETVAL_DATA);
     expect(T.filter).to.be.called.once;
@@ -87,7 +87,7 @@ describe('FieldsFilteringDecorator', function () {
   });
 
   it('overrides the "patchById" method and filtering output fields', async function () {
-    spies.on(T, 'filter');
+    sandbox.on(T, 'filter');
     const retval = await A.patchById(MODEL_NAME, 1, {}, FILTER);
     expect(retval).to.be.eql(RETVAL_DATA);
     expect(T.filter).to.be.called.once;
@@ -95,7 +95,7 @@ describe('FieldsFilteringDecorator', function () {
   });
 
   it('overrides the "find" method and filtering output fields', async function () {
-    spies.on(T, 'filter', function (entities, modelName, fields) {
+    sandbox.on(T, 'filter', function (entities, modelName, fields) {
       expect(entities).to.be.eql([MODEL_DATA]);
       expect(modelName).to.be.eq(MODEL_NAME);
       expect(fields).to.be.eql(FILTER.fields);
@@ -107,7 +107,7 @@ describe('FieldsFilteringDecorator', function () {
   });
 
   it('overrides the "findById" method and filtering output fields', async function () {
-    spies.on(T, 'filter');
+    sandbox.on(T, 'filter');
     const retval = await A.findById(MODEL_NAME, 1, FILTER);
     expect(retval).to.be.eql(RETVAL_DATA);
     expect(T.filter).to.be.called.once;

+ 9 - 9
src/adapter/decorator/inclusion-decorator.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Adapter} from '../adapter.js';
-import {createSpiesGroup} from '@e22m4u/js-spy';
+import {createSandbox} from '@e22m4u/js-spy';
 import {DatabaseSchema} from '../../database-schema.js';
 import {IncludeClauseTool} from '../../filter/index.js';
 
@@ -53,15 +53,15 @@ class TestAdapter extends Adapter {
 
 const A = dbs.getService(TestAdapter);
 const T = dbs.getService(IncludeClauseTool);
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('InclusionDecorator', function () {
   afterEach(function () {
-    spies.restore();
+    sandbox.restore();
   });
 
   it('overrides the "create" method method and applies clause inclusion', async function () {
-    spies.on(T, 'includeTo', function (entities, modelName, clause) {
+    sandbox.on(T, 'includeTo', function (entities, modelName, clause) {
       expect(entities).to.be.eql([MODEL_DATA]);
       expect(modelName).to.be.eql('model');
       expect(clause).to.be.eql(FILTER.include);
@@ -73,7 +73,7 @@ describe('InclusionDecorator', function () {
   });
 
   it('overrides the "replaceById" method and applies clause inclusion', async function () {
-    spies.on(T, 'includeTo', function (entities, modelName, clause) {
+    sandbox.on(T, 'includeTo', function (entities, modelName, clause) {
       expect(entities).to.be.eql([MODEL_DATA]);
       expect(modelName).to.be.eql('model');
       expect(clause).to.be.eql(FILTER.include);
@@ -85,7 +85,7 @@ describe('InclusionDecorator', function () {
   });
 
   it('overrides the "replaceOrCreate" method and applies clause inclusion', async function () {
-    spies.on(T, 'includeTo', function (entities, modelName, clause) {
+    sandbox.on(T, 'includeTo', function (entities, modelName, clause) {
       expect(entities).to.be.eql([MODEL_DATA]);
       expect(modelName).to.be.eql('model');
       expect(clause).to.be.eql(FILTER.include);
@@ -97,7 +97,7 @@ describe('InclusionDecorator', function () {
   });
 
   it('overrides the "patchById" method and applies clause inclusion', async function () {
-    spies.on(T, 'includeTo', function (entities, modelName, clause) {
+    sandbox.on(T, 'includeTo', function (entities, modelName, clause) {
       expect(entities).to.be.eql([MODEL_DATA]);
       expect(modelName).to.be.eql('model');
       expect(clause).to.be.eql(FILTER.include);
@@ -109,7 +109,7 @@ describe('InclusionDecorator', function () {
   });
 
   it('overrides the "find" method and applies clause inclusion', async function () {
-    spies.on(T, 'includeTo', function (entities, modelName, clause) {
+    sandbox.on(T, 'includeTo', function (entities, modelName, clause) {
       expect(entities).to.be.eql([MODEL_DATA]);
       expect(modelName).to.be.eql('model');
       expect(clause).to.be.eql(FILTER.include);
@@ -121,7 +121,7 @@ describe('InclusionDecorator', function () {
   });
 
   it('overrides the "findById" method and applies clause inclusion', async function () {
-    spies.on(T, 'includeTo', function (entities, modelName, clause) {
+    sandbox.on(T, 'includeTo', function (entities, modelName, clause) {
       expect(entities).to.be.eql([MODEL_DATA]);
       expect(modelName).to.be.eql('model');
       expect(clause).to.be.eql(FILTER.include);

+ 8 - 8
src/adapter/decorator/property-uniqueness-decorator.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Adapter} from '../adapter.js';
-import {createSpiesGroup} from '@e22m4u/js-spy';
+import {createSandbox} from '@e22m4u/js-spy';
 import {DatabaseSchema} from '../../database-schema.js';
 import {PropertyUniquenessValidator} from '../../definition/index.js';
 
@@ -36,16 +36,16 @@ class TestAdapter extends Adapter {
 
 const A = dbs.getService(TestAdapter);
 const V = dbs.getService(PropertyUniquenessValidator);
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('PropertyUniquenessDecorator', function () {
   afterEach(function () {
-    spies.restore();
+    sandbox.restore();
   });
 
   it('overrides the "create" method and validates a given data', async function () {
     const data = {kind: 'data'};
-    spies.on(
+    sandbox.on(
       V,
       'validate',
       (countMethod, methodName, modelName, modelData, id = undefined) => {
@@ -63,7 +63,7 @@ describe('PropertyUniquenessDecorator', function () {
 
   it('overrides the "replaceById" method and validates a given data', async function () {
     const data = {kind: 'data'};
-    spies.on(
+    sandbox.on(
       V,
       'validate',
       (countMethod, methodName, modelName, modelData, id = undefined) => {
@@ -81,7 +81,7 @@ describe('PropertyUniquenessDecorator', function () {
 
   it('overrides the "replaceOrCreate" method and validates a given data', async function () {
     const data = {kind: 'data'};
-    spies.on(
+    sandbox.on(
       V,
       'validate',
       (countMethod, methodName, modelName, modelData, id = undefined) => {
@@ -99,7 +99,7 @@ describe('PropertyUniquenessDecorator', function () {
 
   it('overrides the "patch" method and validates a given data', async function () {
     const data = {kind: 'data'};
-    spies.on(
+    sandbox.on(
       V,
       'validate',
       (countMethod, methodName, modelName, modelData, id = undefined) => {
@@ -117,7 +117,7 @@ describe('PropertyUniquenessDecorator', function () {
 
   it('overrides the "patchById" method and validates a given data', async function () {
     const data = {kind: 'data'};
-    spies.on(
+    sandbox.on(
       V,
       'validate',
       (countMethod, methodName, modelName, modelData, id = undefined) => {

+ 5 - 5
src/definition/definition-registry.spec.js

@@ -1,10 +1,10 @@
 import {expect} from 'chai';
-import {createSpiesGroup} from '@e22m4u/js-spy';
+import {createSandbox} from '@e22m4u/js-spy';
 import {ModelDefinitionValidator} from './model/index.js';
 import {DefinitionRegistry} from './definition-registry.js';
 import {DatasourceDefinitionValidator} from '../definition/index.js';
 
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('DefinitionRegistry', function () {
   let S;
@@ -14,7 +14,7 @@ describe('DefinitionRegistry', function () {
   });
 
   afterEach(function () {
-    spies.restore();
+    sandbox.restore();
   });
 
   describe('addDatasource', function () {
@@ -27,7 +27,7 @@ describe('DefinitionRegistry', function () {
 
     it('uses DatasourceDefinitionValidator to validate a given datasource', function () {
       const V = S.getService(DatasourceDefinitionValidator);
-      spies.on(V, 'validate');
+      sandbox.on(V, 'validate');
       const datasource = {name: 'datasource', adapter: 'adapter'};
       S.addDatasource(datasource);
       expect(V.validate).to.have.been.called.once;
@@ -78,7 +78,7 @@ describe('DefinitionRegistry', function () {
 
     it('uses ModelDefinitionValidator to validate a given model', function () {
       const V = S.getService(ModelDefinitionValidator);
-      spies.on(V, 'validate');
+      sandbox.on(V, 'validate');
       const model = {name: 'model'};
       S.addModel(model);
       expect(V.validate).to.have.been.called.once;

+ 5 - 5
src/definition/model/model-definition-utils.spec.js

@@ -1,7 +1,7 @@
 import {expect} from 'chai';
 import {format} from '@e22m4u/js-format';
+import {createSandbox} from '@e22m4u/js-spy';
 import {DataType} from './properties/index.js';
-import {createSpiesGroup} from '@e22m4u/js-spy';
 import {RelationType} from './relations/index.js';
 import {DatabaseSchema} from '../../database-schema.js';
 import {EmptyValuesService} from '@e22m4u/js-empty-values';
@@ -12,11 +12,11 @@ import {
   DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
 } from './model-definition-utils.js';
 
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('ModelDefinitionUtils', function () {
   afterEach(function () {
-    spies.restore();
+    sandbox.restore();
   });
 
   describe('getPrimaryKeyAsPropertyName', function () {
@@ -34,7 +34,7 @@ describe('ModelDefinitionUtils', function () {
     it('throws an error if a property name of a default primary key already in use as a regular property', function () {
       const dbs = new DatabaseSchema();
       const mdu = dbs.getService(ModelDefinitionUtils);
-      spies.on(
+      sandbox.on(
         mdu,
         'getPropertiesDefinitionInBaseModelHierarchy',
         function (modelName) {
@@ -169,7 +169,7 @@ describe('ModelDefinitionUtils', function () {
     it('throws an error if a property name of a default primary key already in use as a regular property', function () {
       const dbs = new DatabaseSchema();
       const mdu = dbs.getService(ModelDefinitionUtils);
-      spies.on(
+      sandbox.on(
         mdu,
         'getPropertiesDefinitionInBaseModelHierarchy',
         function (modelName) {

+ 5 - 5
src/definition/model/model-definition-validator.spec.js

@@ -1,16 +1,16 @@
 import {expect} from 'chai';
 import {format} from '@e22m4u/js-format';
-import {createSpiesGroup} from '@e22m4u/js-spy';
+import {createSandbox} from '@e22m4u/js-spy';
 import {RelationsDefinitionValidator} from './relations/index.js';
 import {PropertiesDefinitionValidator} from './properties/index.js';
 import {ModelDefinitionValidator} from './model-definition-validator.js';
 
 const S = new ModelDefinitionValidator();
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('ModelDefinitionValidator', function () {
   afterEach(function () {
-    spies.restore();
+    sandbox.restore();
   });
 
   describe('validate', function () {
@@ -127,7 +127,7 @@ describe('ModelDefinitionValidator', function () {
 
     it('uses PropertiesDefinitionValidator service to validate model properties', function () {
       const V = S.getService(PropertiesDefinitionValidator);
-      spies.on(V, 'validate');
+      sandbox.on(V, 'validate');
       const properties = {};
       S.validate({name: 'model', properties});
       expect(V.validate).to.have.been.called.once;
@@ -136,7 +136,7 @@ describe('ModelDefinitionValidator', function () {
 
     it('uses RelationsDefinitionValidator service to validate model relations', function () {
       const V = S.getService(RelationsDefinitionValidator);
-      spies.on(V, 'validate');
+      sandbox.on(V, 'validate');
       const relations = {};
       S.validate({name: 'model', relations});
       expect(V.validate).to.have.been.called.once;

+ 4 - 4
src/definition/model/properties/properties-definition-validator.spec.js

@@ -1,17 +1,17 @@
 import {expect} from 'chai';
 import {DataType} from './data-type.js';
 import {format} from '@e22m4u/js-format';
-import {createSpiesGroup} from '@e22m4u/js-spy';
+import {createSandbox} from '@e22m4u/js-spy';
 import {PropertyUniqueness} from './property-uniqueness.js';
 import {PropertiesDefinitionValidator} from './properties-definition-validator.js';
 import {PrimaryKeysDefinitionValidator} from './primary-keys-definition-validator.js';
 
 const S = new PropertiesDefinitionValidator();
-const spies = createSpiesGroup();
+const sandbox = createSandbox();
 
 describe('PropertiesDefinitionValidator', function () {
   afterEach(function () {
-    spies.restore();
+    sandbox.restore();
   });
 
   describe('validate', function () {
@@ -411,7 +411,7 @@ describe('PropertiesDefinitionValidator', function () {
 
     it('uses PrimaryKeysDefinitionValidator to validate primary keys', function () {
       const V = S.getService(PrimaryKeysDefinitionValidator);
-      spies.on(V, 'validate');
+      sandbox.on(V, 'validate');
       const propDefs = {};
       S.validate('model', propDefs);
       expect(V.validate).to.have.been.called.once;