Skip to content

Commit a02a33e

Browse files
author
Ante Borzić
committed
Extract and fix consumable validation
1 parent f0f1ea6 commit a02a33e

File tree

4 files changed

+28
-12
lines changed

4 files changed

+28
-12
lines changed

lib/sync/sync-module-validator.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const transform = require('lodash/transform');
88
const utils = require('../utils');
99

1010
const { AttributeError, ConsumableError, DomainError, FkError, UniquenessError } = errors;
11-
const { findIndexViolations, findViolationsDuplicates, validateAssociation } = utils;
11+
const { findIndexViolations, findViolationsDuplicates, validateBelongsTo, validateConsumables } = utils;
1212

1313
class SyncModuleValidator {
1414
constructor(syncModule) {
@@ -24,7 +24,6 @@ class SyncModuleValidator {
2424
}
2525

2626
get associations() {
27-
// TODO: add check for consumability
2827
const types = ['BelongsTo', 'BelongsToMany', 'HasMany'];
2928
const addJunction = it => this.Model.associations[it.as] ||
3029
this.Model.hasMany(it.target, it);
@@ -36,12 +35,12 @@ class SyncModuleValidator {
3635

3736
async run(entries) {
3837
try {
38+
await this.syncModule.errors.flush();
3939
await this.validateAttributes();
4040
await this.validateUniqueness();
41-
this.validateFks();
41+
await this.validateFks();
4242
await this.validateDependencies();
43-
this.validateConsumables();
44-
this.validateDomain();
43+
await this.validateConsumables();
4544
return this.syncModule.errors.invalidate({ model: this.Model });
4645
} catch (err) {
4746
// TODO: throw real error here
@@ -86,7 +85,7 @@ class SyncModuleValidator {
8685
const associationType = 'BelongsTo';
8786
const associations = filter(this.associations, { associationType });
8887
const validateFk = (instance, association) => {
89-
if (validateAssociation(instance, association)) return;
88+
if (validateBelongsTo(instance, association)) return;
9089
return this.pushError(FkError, instance, association);
9190
};
9291
return this.overAssociations(associations, validateFk);
@@ -103,11 +102,12 @@ class SyncModuleValidator {
103102
}
104103

105104
validateConsumables() {
105+
const associations = filter(this.associations, 'options.consumable');
106106
const validateConsumable = (instance, association) => {
107-
if (validateAssociation(instance, association)) return;
107+
if (validateConsumables(instance, association)) return;
108108
return this.pushError(ConsumableError, instance, association);
109109
};
110-
return this.overAssociations(this.associations, validateConsumable);
110+
return this.overAssociations(associations, validateConsumable);
111111
}
112112

113113
async validateDomain() {

lib/utils/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@
33
exports.findIndexViolations = require('./find-index-violations');
44
exports.findViolationsDuplicates = require('./find-violations-duplicates');
55
exports.Loader = require('./loader');
6+
exports.validateBelongsTo = require('./validate-belongs-to');
7+
exports.validateConsumables = require('./validate-consumables');

lib/utils/validate-belongs-to.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
'use strict';
2+
3+
function validateBelongsTo(instance, association) {
4+
const { associationAccessor, identifier } = association;
5+
const key = instance[identifier];
6+
const value = instance[associationAccessor];
7+
return !key || value;
8+
}
9+
10+
module.exports = validateBelongsTo;
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
'use strict';
22

33
const every = require('lodash/every');
4+
const get = require('lodash/get');
45

5-
function validateAssociation(instance, association) {
6+
function validateConsumables(instance, association) {
67
const validators = {
78
BelongsTo: validateBelongsTo,
89
BelongsToMany: validateBelongsToMany,
@@ -11,13 +12,16 @@ function validateAssociation(instance, association) {
1112
return validators[association.associationType](instance, association);
1213
}
1314

14-
module.exports = validateAssociation;
15+
module.exports = validateConsumables;
1516

1617
function validateBelongsTo(instance, association) {
17-
const { associationAccessor, identifier } = association;
18+
const { associationAccessor, identifier, options } = association;
1819
const key = instance[identifier];
1920
const value = instance[associationAccessor];
20-
return !key || value;
21+
const isValid = !!get(value, 'isValid');
22+
return options.optional
23+
? !key || isValid
24+
: isValid;
2125
}
2226

2327
function validateBelongsToMany(instance, association) {

0 commit comments

Comments
 (0)