Browse Source

chore(memory): should generate a new id when an empty string or zero number are given

e22m4u 1 year ago
parent
commit
f2a1cf70ae
81 changed files with 122 additions and 2 deletions
  1. 0 0
      docs/classes/Adapter.html
  2. 0 0
      docs/classes/AdapterLoader.html
  3. 0 0
      docs/classes/AdapterRegistry.html
  4. 0 0
      docs/classes/BelongsToResolver.html
  5. 0 0
      docs/classes/DatasourceDefinitionValidator.html
  6. 0 0
      docs/classes/DefinitionRegistry.html
  7. 0 0
      docs/classes/FieldsClauseTool.html
  8. 0 0
      docs/classes/HasManyResolver.html
  9. 0 0
      docs/classes/HasOneResolver.html
  10. 0 0
      docs/classes/IncludeClauseTool.html
  11. 0 0
      docs/classes/InvalidArgumentError.html
  12. 0 0
      docs/classes/InvalidOperatorValueError.html
  13. 0 0
      docs/classes/ModelDataSanitizer.html
  14. 0 0
      docs/classes/ModelDataValidator.html
  15. 0 0
      docs/classes/ModelDefinitionUtils.html
  16. 0 0
      docs/classes/ModelDefinitionValidator.html
  17. 0 0
      docs/classes/NotImplementedError.html
  18. 0 0
      docs/classes/OperatorClauseTool.html
  19. 0 0
      docs/classes/OrderClauseTool.html
  20. 0 0
      docs/classes/PrimaryKeysDefinitionValidator.html
  21. 0 0
      docs/classes/PropertiesDefinitionValidator.html
  22. 0 0
      docs/classes/ReferencesManyResolver.html
  23. 0 0
      docs/classes/RelationsDefinitionValidator.html
  24. 0 0
      docs/classes/Repository.html
  25. 0 0
      docs/classes/RepositoryRegistry.html
  26. 0 0
      docs/classes/Schema.html
  27. 0 0
      docs/classes/SliceClauseTool.html
  28. 0 0
      docs/classes/WhereClauseTool.html
  29. 0 0
      docs/enums/DataType.html
  30. 0 0
      docs/enums/RelationType.html
  31. 0 0
      docs/functions/capitalize.html
  32. 0 0
      docs/functions/cloneDeep.html
  33. 0 0
      docs/functions/excludeObjectKeys.html
  34. 0 0
      docs/functions/getCtorName.html
  35. 0 0
      docs/functions/getValueByPath.html
  36. 0 0
      docs/functions/isCtor.html
  37. 0 0
      docs/functions/isPureObject.html
  38. 0 0
      docs/functions/selectObjectKeys.html
  39. 0 0
      docs/functions/singularize.html
  40. 0 0
      docs/functions/stringToRegexp.html
  41. 0 0
      docs/interfaces/AndClause.html
  42. 0 0
      docs/interfaces/OrClause.html
  43. 0 0
      docs/types/AnyObject.html
  44. 0 0
      docs/types/BelongsToDefinition.html
  45. 0 0
      docs/types/DEFAULT_PRIMARY_KEY_PROPERTY_NAME.html
  46. 0 0
      docs/types/DatasourceDefinition.html
  47. 0 0
      docs/types/FieldsClause.html
  48. 0 0
      docs/types/FilterClause.html
  49. 0 0
      docs/types/Flatten.html
  50. 0 0
      docs/types/FullPropertyDefinition.html
  51. 0 0
      docs/types/HasManyDefinition.html
  52. 0 0
      docs/types/HasOneDefinition.html
  53. 0 0
      docs/types/Identity.html
  54. 0 0
      docs/types/IncludeClause.html
  55. 0 0
      docs/types/ItemFilterClause.html
  56. 0 0
      docs/types/ModelData.html
  57. 0 0
      docs/types/ModelDefinition.html
  58. 0 0
      docs/types/ModelId.html
  59. 0 0
      docs/types/NestedIncludeClause.html
  60. 0 0
      docs/types/NormalizedFieldsClause.html
  61. 0 0
      docs/types/NormalizedIncludeClause.html
  62. 0 0
      docs/types/OperatorClause.html
  63. 0 0
      docs/types/OptionalUnlessRequiredId.html
  64. 0 0
      docs/types/OrderClause.html
  65. 0 0
      docs/types/PartialBy.html
  66. 0 0
      docs/types/PartialWithoutId.html
  67. 0 0
      docs/types/PolyBelongsToDefinition.html
  68. 0 0
      docs/types/PolyHasManyDefinitionWithTargetKeys.html
  69. 0 0
      docs/types/PolyHasManyDefinitionWithTargetRelationName.html
  70. 0 0
      docs/types/PolyHasOneDefinitionWithTargetKeys.html
  71. 0 0
      docs/types/PolyHasOneDefinitionWithTargetRelationName.html
  72. 0 0
      docs/types/PropertiesClause.html
  73. 0 0
      docs/types/PropertyDefinition.html
  74. 0 0
      docs/types/PropertyDefinitionMap.html
  75. 0 0
      docs/types/ReferencesManyDefinition.html
  76. 0 0
      docs/types/RelationDefinition.html
  77. 0 0
      docs/types/RelationDefinitionMap.html
  78. 0 0
      docs/types/WhereClause.html
  79. 0 0
      docs/types/WithoutId.html
  80. 6 2
      src/adapter/builtin/memory-adapter.js
  81. 116 0
      src/adapter/builtin/memory-adapter.spec.js

File diff suppressed because it is too large
+ 0 - 0
docs/classes/Adapter.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/AdapterLoader.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/AdapterRegistry.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/BelongsToResolver.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/DatasourceDefinitionValidator.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/DefinitionRegistry.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/FieldsClauseTool.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/HasManyResolver.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/HasOneResolver.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/IncludeClauseTool.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/InvalidArgumentError.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/InvalidOperatorValueError.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/ModelDataSanitizer.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/ModelDataValidator.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/ModelDefinitionUtils.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/ModelDefinitionValidator.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/NotImplementedError.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/OperatorClauseTool.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/OrderClauseTool.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/PrimaryKeysDefinitionValidator.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/PropertiesDefinitionValidator.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/ReferencesManyResolver.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/RelationsDefinitionValidator.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/Repository.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/RepositoryRegistry.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/Schema.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/SliceClauseTool.html


File diff suppressed because it is too large
+ 0 - 0
docs/classes/WhereClauseTool.html


File diff suppressed because it is too large
+ 0 - 0
docs/enums/DataType.html


File diff suppressed because it is too large
+ 0 - 0
docs/enums/RelationType.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/capitalize.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/cloneDeep.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/excludeObjectKeys.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/getCtorName.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/getValueByPath.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/isCtor.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/isPureObject.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/selectObjectKeys.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/singularize.html


File diff suppressed because it is too large
+ 0 - 0
docs/functions/stringToRegexp.html


File diff suppressed because it is too large
+ 0 - 0
docs/interfaces/AndClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/interfaces/OrClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/AnyObject.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/BelongsToDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/DEFAULT_PRIMARY_KEY_PROPERTY_NAME.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/DatasourceDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/FieldsClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/FilterClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/Flatten.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/FullPropertyDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/HasManyDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/HasOneDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/Identity.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/IncludeClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/ItemFilterClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/ModelData.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/ModelDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/ModelId.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/NestedIncludeClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/NormalizedFieldsClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/NormalizedIncludeClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/OperatorClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/OptionalUnlessRequiredId.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/OrderClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PartialBy.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PartialWithoutId.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PolyBelongsToDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PolyHasManyDefinitionWithTargetKeys.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PolyHasManyDefinitionWithTargetRelationName.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PolyHasOneDefinitionWithTargetKeys.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PolyHasOneDefinitionWithTargetRelationName.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PropertiesClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PropertyDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/PropertyDefinitionMap.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/ReferencesManyDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/RelationDefinition.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/RelationDefinitionMap.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/WhereClause.html


File diff suppressed because it is too large
+ 0 - 0
docs/types/WithoutId.html


+ 6 - 2
src/adapter/builtin/memory-adapter.js

@@ -92,7 +92,9 @@ export class MemoryAdapter extends Adapter {
         modelName,
       );
     let idValue = modelData[pkPropName];
-    if (idValue == null) idValue = this._genNextIdValue(modelName, pkPropName);
+    if (idValue == null || idValue === '' || idValue === 0) {
+      idValue = this._genNextIdValue(modelName, pkPropName);
+    }
 
     const table = this._getTableOrCreate(modelName);
     if (table.has(idValue))
@@ -168,7 +170,9 @@ export class MemoryAdapter extends Adapter {
         modelName,
       );
     let idValue = modelData[pkPropName];
-    if (idValue == null) idValue = this._genNextIdValue(modelName, pkPropName);
+    if (idValue == null || idValue === '' || idValue === 0) {
+      idValue = this._genNextIdValue(modelName, pkPropName);
+    }
 
     const table = this._getTableOrCreate(modelName);
     modelData = cloneDeep(modelData);

+ 116 - 0
src/adapter/builtin/memory-adapter.spec.js

@@ -187,6 +187,64 @@ describe('MemoryAdapter', function () {
       expect(tableData).to.be.eql({...input, [DEF_PK]: idValue});
     });
 
+    it('generates a new identifier when a value of a primary key is an empty string', async function () {
+      const schema = new Schema();
+      schema.defineDatasource({
+        name: 'memory',
+        adapter: 'memory',
+      });
+      schema.defineModel({
+        name: 'model',
+        datasource: 'memory',
+        properties: {
+          foo: DataType.STRING,
+          bar: DataType.NUMBER,
+        },
+      });
+      const adapter = new MemoryAdapter(schema.container, {});
+      const input = {
+        [DEF_PK]: '',
+        foo: 'string',
+        bar: 10,
+      };
+      const created = await adapter.create('model', input);
+      const idValue = created[DEF_PK];
+      expect(idValue).to.be.not.eq('');
+      expect(created).to.be.eql({...input, [DEF_PK]: idValue});
+      const table = adapter._getTableOrCreate('model');
+      const tableData = table.get(idValue);
+      expect(tableData).to.be.eql({...input, [DEF_PK]: idValue});
+    });
+
+    it('generates a new identifier when a value of a primary key is zero', async function () {
+      const schema = new Schema();
+      schema.defineDatasource({
+        name: 'memory',
+        adapter: 'memory',
+      });
+      schema.defineModel({
+        name: 'model',
+        datasource: 'memory',
+        properties: {
+          foo: DataType.STRING,
+          bar: DataType.NUMBER,
+        },
+      });
+      const adapter = new MemoryAdapter(schema.container, {});
+      const input = {
+        [DEF_PK]: 0,
+        foo: 'string',
+        bar: 10,
+      };
+      const created = await adapter.create('model', input);
+      const idValue = created[DEF_PK];
+      expect(idValue).to.be.not.eq(0);
+      expect(created).to.be.eql({...input, [DEF_PK]: idValue});
+      const table = adapter._getTableOrCreate('model');
+      const tableData = table.get(idValue);
+      expect(tableData).to.be.eql({...input, [DEF_PK]: idValue});
+    });
+
     it('generates a new identifier for a primary key of a "number" type', async function () {
       const schema = new Schema();
       schema.defineDatasource({
@@ -1214,6 +1272,64 @@ describe('MemoryAdapter', function () {
       expect(tableData).to.be.eql({...input, [DEF_PK]: idValue});
     });
 
+    it('generates a new identifier when a value of a primary key is an empty string', async function () {
+      const schema = new Schema();
+      schema.defineDatasource({
+        name: 'memory',
+        adapter: 'memory',
+      });
+      schema.defineModel({
+        name: 'model',
+        datasource: 'memory',
+        properties: {
+          foo: DataType.STRING,
+          bar: DataType.NUMBER,
+        },
+      });
+      const adapter = new MemoryAdapter(schema.container, {});
+      const input = {
+        [DEF_PK]: '',
+        foo: 'string',
+        bar: 10,
+      };
+      const created = await adapter.replaceOrCreate('model', input);
+      const idValue = created[DEF_PK];
+      expect(idValue).to.be.not.eq('');
+      expect(created).to.be.eql({...input, [DEF_PK]: idValue});
+      const table = adapter._getTableOrCreate('model');
+      const tableData = table.get(idValue);
+      expect(tableData).to.be.eql({...input, [DEF_PK]: idValue});
+    });
+
+    it('generates a new identifier when a value of a primary key is zero', async function () {
+      const schema = new Schema();
+      schema.defineDatasource({
+        name: 'memory',
+        adapter: 'memory',
+      });
+      schema.defineModel({
+        name: 'model',
+        datasource: 'memory',
+        properties: {
+          foo: DataType.STRING,
+          bar: DataType.NUMBER,
+        },
+      });
+      const adapter = new MemoryAdapter(schema.container, {});
+      const input = {
+        [DEF_PK]: 0,
+        foo: 'string',
+        bar: 10,
+      };
+      const created = await adapter.replaceOrCreate('model', input);
+      const idValue = created[DEF_PK];
+      expect(idValue).to.be.not.eq(0);
+      expect(created).to.be.eql({...input, [DEF_PK]: idValue});
+      const table = adapter._getTableOrCreate('model');
+      const tableData = table.get(idValue);
+      expect(tableData).to.be.eql({...input, [DEF_PK]: idValue});
+    });
+
     it('generates a new identifier for a primary key of a "number" type', async function () {
       const schema = new Schema();
       schema.defineDatasource({

Some files were not shown because too many files changed in this diff