UNPKG

@oat-sa/tao-test-runner-qti

Version:
74 lines (66 loc) 2.71 kB
/** * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; under version 2 * of the License (non-upgradable). * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Copyright (c) 2019 (original work) Open Assessment Technologies SA ; */ import _ from 'lodash'; /** * Parses sub branch rules and returns an array of results * * @param {Object} branchRuleDefinition * @param {Object} item * @param {Object} navigationParams * @param {Function} branchRuleMapper * @param {Object} responseStore * @returns {Promise<boolean[]>} */ function evaluateSubBranchRules(branchRuleDefinition, item, navigationParams, branchRuleMapper, responseStore) { return new Promise(function(resolve, reject) { var subBranchRuleResults = [], promises = []; // Remove the @attributes from the branch rule definition branchRuleDefinition = _.omit(branchRuleDefinition, ['@attributes']); promises = _.map(branchRuleDefinition, function(subBranchRule, subBranchRuleName) { return branchRuleMapper( subBranchRuleName, branchRuleDefinition[subBranchRuleName], item, navigationParams, responseStore ).validate(); }); Promise.all(promises) .then(function(results) { _.forEach(results, function(subBranchRuleResult) { // if the result is an array (e.g. in case of NOT), add all elements of it to the results if (Array.isArray(subBranchRuleResult)) { subBranchRuleResult.forEach(function(value) { subBranchRuleResults.push(value); }); // otherwise add the single value to the results } else { subBranchRuleResults.push(subBranchRuleResult); } }); resolve(subBranchRuleResults); }) .catch(function(err) { reject(err); }); }); } export default { evaluateSubBranchRules: evaluateSubBranchRules };