grnsight
Version:
Web app and service for visualizing models of gene regulatory networks
838 lines (711 loc) • 31.3 kB
JavaScript
var assert = require("chai").assert;
var xlsx = require("node-xlsx");
// var cytoscape = require("cytoscape");
var spreadsheetController = require(__dirname + "/../server/controllers" + "/spreadsheet-controller")();
var parseAllNetworkSheet = require(__dirname + "/../server/controllers" + "/network-sheet-parser");
var parseExpressionSheet = require(__dirname + "/../server/controllers" + "/expression-sheet-parser");
var parseAdditionalSheet = require(__dirname + "/../server/controllers" + "/additional-sheet-parser");
var exportController = require(__dirname + "/../server/controllers/export-controller")();
// changed network parser to preserve all network sheets instead of choosing the best and throwing awway rhe rest
// this helper method chooses the best network sheet, so prior implemented test behaviour doesn't crash
var parseNetworkSheet = (sheet) => {
var allNetworks = parseAllNetworkSheet.networks(sheet);
if (typeof allNetworks.networkOptimizedWeights === "object" &&
Object.keys(allNetworks.networkOptimizedWeights).length !== 0) {
return allNetworks.networkOptimizedWeights;
} else {
// Network is the default network. If network_optimized_weights does not exist, then we will want to return the
// network sheet. If both network_optimized_weights and network do not exist, it returns an empty initalized
// network object with an error saying no network sheet detected.
return allNetworks.network;
}
};
// ERROR TEST FUNCTIONS:
var noErrors = function (input) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(0, workbook.errors.length);
};
var duplicateGeneError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"DUPLICATE_GENE",
workbook.errors[i].errorCode
);
}
/* TO DO:
workbook.errors.forEach(function (error) {
assert.equal("DUPLICATE_GENE", error.errorCode);
});
*/
};
var invalidGeneLengthError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"INVALID_GENE_LENGTH",
workbook.errors[i].errorCode
);
}
};
var corruptGeneError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"CORRUPT_GENE",
workbook.errors[i].errorCode
);
}
};
var unknownError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"UNKNOWN_ERROR",
workbook.errors[i].errorCode
);
}
};
var missingValueError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"MISSING_VALUE",
workbook.errors[i].errorCode
);
}
};
var missingNetworkError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"MISSING_NETWORK",
workbook.errors[i].errorCode
);
}
};
var specialCharacterError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"INVALID_CHARACTER",
workbook.errors[i].errorCode
);
}
};
var invalidDataTypeError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"INVALID_CELL_DATA_TYPE",
workbook.errors[i].errorCode
);
}
};
var workbookSizeError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"INVALID_NETWORK_SIZE",
workbook.errors[i].errorCode
);
}
};
var checkForGene = function (test, frequency, input) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.genes.filter(function (gene) {
return gene.name === test;
}).length);
};
var warningsCountError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var warningsCountErrorArray = workbook.errors.filter(function (x) {
return x.errorCode === "WARNINGS_OVERLOAD";
});
assert.equal(frequency, warningsCountErrorArray.length);
};
var errorsCountError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var errorsCountErrorArray = workbook.errors.filter(function (x) {
return x.errorCode === "ERRORS_OVERLOAD";
});
assert.equal(frequency, errorsCountErrorArray.length);
};
var emptyRowError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(frequency, workbook.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"EMPTY_ROW",
workbook.errors[i].errorCode
);
}
};
var geneMismatchError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = spreadsheetController.crossSheetInteractions(sheet);
var geneMismatchCount = workbook.errors.filter(function (x) {
return x.errorCode === "GENE_MISMATCH";
});
assert.equal(frequency, geneMismatchCount.length);
};
var idLabelError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseExpressionSheet(sheet);
assert.equal(frequency, workbook.expression.wt_log2_expression.errors.length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"MISLABELED_ID_CELL",
workbook.expression.wt_log2_expression.errors[i].errorCode
);
}
};
var missingColumnHeaderError = function (input, frequency) {
var sheet = xlsx.parse(input);
var exp = parseExpressionSheet(sheet);
assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"MISSING_COLUMN_HEADER",
exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
);
}
};
var emptyExpressionColumnError = function (input, frequency) {
var sheet = xlsx.parse(input);
var exp = parseExpressionSheet(sheet);
assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"EMPTY_COLUMN",
exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
);
}
};
var emptyExpressionRowError = function (input, frequency) {
var sheet = xlsx.parse(input);
var exp = parseExpressionSheet(sheet);
assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"EMPTY_ROW",
exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
);
}
};
// should extra_gene_name and missing_gene_name be split into two different functions?
var labelError = function (input, frequency) {
var sheet = xlsx.parse(input);
var exp = parseExpressionSheet(sheet);
assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"extra_gene_name" || "missing_a_gene_name",
exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
);
}
};
var missingGeneNameError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = spreadsheetController.crossSheetInteractions(sheet);
var missingGeneCount = workbook.errors.filter(function (x) {
return x.errorCode === "MISSING_GENE_NAME";
});
assert.equal(frequency, missingGeneCount.length);
};
var extraGeneNameError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = spreadsheetController.crossSheetInteractions(sheet);
var extraGeneCount = workbook.errors.filter(function (x) {
return x.errorCode === "EXTRA_GENE_NAME";
});
assert.equal(frequency, extraGeneCount.length);
};
var negativeTimePointError = function (input, frequency) {
var sheet = xlsx.parse(input);
var exp = parseExpressionSheet(sheet);
assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"NEGATIVE_TIME_POINT",
exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
);
}
};
var nonMonotonicTimePointsError = function (input, frequency) {
var sheet = xlsx.parse(input);
var exp = parseExpressionSheet(sheet);
assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"NON_MONOTONIC_TIME_POINTS",
exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
);
}
};
var nonNumericalTimePointError = function (input, frequency) {
var sheet = xlsx.parse(input);
var exp = parseExpressionSheet(sheet);
assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
for (var i = 0; i < frequency; i++) {
assert.equal(
"NON_NUMERICAL_TIME_POINT",
exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
);
}
};
var emptyRowDataError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var emptyRowDataCount = workbook.errors.filter(function (x) {
return x.errorCode === "EMPTY_ROW_DATA";
});
assert.equal(frequency, emptyRowDataCount.length);
};
var emptyMatrixDataError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var emptyMatrixDataCount = workbook.errors.filter(function (x) {
return x.errorCode === "EMPTY_MATRIX_DATA";
});
assert.equal(frequency, emptyMatrixDataCount.length);
};
var emptyColumnDataError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var emptyRowDataCount = workbook.errors.filter(function (x) {
return x.errorCode === "EMPTY_COLUMN_DATA";
});
assert.equal(frequency, emptyRowDataCount.length);
};
var emptyColumnError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var emptyRowDataCount = workbook.errors.filter(function (x) {
return x.errorCode === "EMPTY_COLUMN";
});
assert.equal(frequency, emptyRowDataCount.length);
};
// WARNING TEST FUNCTIONS:
var noWarnings = function (input) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
assert.equal(0, workbook.warnings.length);
};
var missingSourceWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var missingSourceCount = workbook.warnings.filter(function (x) {
return x.warningCode === "MISSING_SOURCE";
});
assert.equal(frequency, missingSourceCount.length);
};
var invalidMatrixDataWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var invalidDataCount = workbook.warnings.filter(function (x) {
return x.warningCode === "INVALID_DATA";
});
assert.equal(frequency, invalidDataCount.length);
};
var missingTargetWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var missingTargetCount = workbook.warnings.filter(function (x) {
return x.warningCode === "MISSING_TARGET";
});
assert.equal(frequency, missingTargetCount.length);
};
var randomDataWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var randomDataCount = workbook.warnings.filter(function (x) {
return x.warningCode === "RANDOM_DATA";
});
assert.equal(frequency, randomDataCount.length);
};
var emptyRowWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var emptyRowCount = workbook.warnings.filter(function (x) {
return x.warningCode === "EMPTY_ROW";
});
assert.equal(frequency, emptyRowCount.length);
};
var invalidNetworkSizeWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var invalidworkbookSizeCount = workbook.warnings.filter(function (x) {
return x.warningCode === "INVALID_NETWORK_SIZE";
});
assert.equal(frequency, invalidworkbookSizeCount.length);
};
var extraneousDataWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var exp = parseExpressionSheet(sheet);
var extraneousDataCount = exp["expression"]["wt_log2_expression"]["warnings"].filter(function (x) {
return x.warningCode === "EXTRANEOUS_DATA";
});
assert.equal(frequency, extraneousDataCount.length);
};
var missingExpressionWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = spreadsheetController.crossSheetInteractions(sheet);
var missingExpressionCount = workbook.warnings.filter(function (x) {
return x.warningCode === "MISSING_EXPRESSION_SHEET";
});
assert.equal(frequency, missingExpressionCount.length);
};
var incorrectlyNamedExpressionSheetWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseExpressionSheet(sheet);
var incorrectlyNamedSheetCount = workbook.warnings.filter(function (x) {
return x.warningCode === "INCORRECTLY_NAMED_EXPRESSION_SHEET";
});
assert.equal(frequency, incorrectlyNamedSheetCount.length);
};
var incorrectlyNamedSheetWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var incorrectlyNamedSheetCount = workbook.warnings.filter(function (x) {
return x.warningCode === "INCORRECTLY_NAMED_SHEET";
});
assert.equal(frequency, incorrectlyNamedSheetCount.length);
};
// GRAPH STATISTICS
/*
var shortestPath = function (input, directed, source, target, length) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var cytoscapeElements = spreadsheetController.grnSightToCytoscape(workbook);
var cy = cytoscape({
headless: true,
elements: cytoscapeElements
});
var dijkstra = cy.elements().dijkstra("#" + source, null, directed);
assert.equal(dijkstra.distanceTo("#" + target), length);
};
var betweennessCentrality = function (input, directed, node, centrality) {
var sheet = xlsx.parse(input);
var workbook = parseNetworkSheet(sheet);
var cytoscapeElements = spreadsheetController.grnSightToCytoscape(workbook);
var cy = cytoscape({
headless: true,
elements: cytoscapeElements
});
var bc = cy.$().bc();
assert.equal(bc.betweenness("#" + node, null, directed), centrality);
};
*/
// Additional Sheets Error Tests
var twoColumnIdError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var twoColumnIdErrorCount = 0;
for (let page in workbook.twoColumnSheets) {
twoColumnIdErrorCount += workbook.twoColumnSheets[page].errors.filter(function (x) {
return x.errorCode === "MISLABELED_ID_CELL";
}).length;
}
assert.equal(frequency, twoColumnIdErrorCount);
};
var additionalSheetIncorrectColumnHeaderError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var additionalSheetIncorrectColumnHeaderErrorCount = 0;
for (let page in workbook.twoColumnSheets) {
additionalSheetIncorrectColumnHeaderErrorCount += workbook.twoColumnSheets[page].errors.filter(
(x) => x.errorCode === "INCORRECT_COLUMN_HEADER").length;
}
additionalSheetIncorrectColumnHeaderErrorCount += workbook.meta.errors.filter(
(x) => x.errorCode === "INCORRECT_COLUMN_HEADER").length;
if (workbook.meta2.errors !== undefined) {
additionalSheetIncorrectColumnHeaderErrorCount += workbook.meta2.errors.filter(
(x) => x.errorCode === "INCORRECT_COLUMN_HEADER").length;
}
assert.equal(frequency, additionalSheetIncorrectColumnHeaderErrorCount);
};
var additionalSheetMissingColumnHeaderError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var additionalSheetMissingColumnHeaderErrorCount = 0;
for (let page in workbook.twoColumnSheets) {
additionalSheetMissingColumnHeaderErrorCount += workbook.twoColumnSheets[page].errors.filter(
(x) => x.errorCode === "MISSING_COLUMN_HEADER").length;
}
additionalSheetMissingColumnHeaderErrorCount += workbook.meta.errors.filter(
(x) => x.errorCode === "MISSING_COLUMN_HEADER").length;
if (workbook.meta2.warnings !== undefined) {
additionalSheetMissingColumnHeaderErrorCount += workbook.meta2.errors.filter(
(x) => x.errorCode === "MISSING_COLUMN_HEADER").length;
}
assert.equal(frequency, additionalSheetMissingColumnHeaderErrorCount);
};
var twoColumnInvalidGeneTypeError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var twoColumnInvalidGeneTypeErrorCount = 0;
for (let page in workbook.twoColumnSheets) {
twoColumnInvalidGeneTypeErrorCount += workbook.twoColumnSheets[page].errors.filter(function (x) {
return x.errorCode === "INVALID_GENE_TYPE";
}).length;
}
assert.equal(frequency, twoColumnInvalidGeneTypeErrorCount);
};
var twoColumnInvalidValueError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var twoColumnInvalidValueErrorCount = 0;
for (let page in workbook.twoColumnSheets) {
twoColumnInvalidValueErrorCount += workbook.twoColumnSheets[page].errors.filter(function (x) {
return x.errorCode === "INVALID_VALUE";
}).length;
}
assert.equal(frequency, twoColumnInvalidValueErrorCount);
};
var twoColumnInvalidGeneLengthError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var twoColumnInvalidGeneLengthErrorCount = 0;
for (let page in workbook.twoColumnSheets) {
twoColumnInvalidGeneLengthErrorCount += workbook.twoColumnSheets[page].errors.filter(function (x) {
return x.errorCode === "INVALID_GENE_LENGTH";
}).length;
}
assert.equal(frequency, twoColumnInvalidGeneLengthErrorCount);
};
var twoColumnSpecialCharacterError = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var twoColumnSpecialCharacterErrorCount = 0;
for (let page in workbook.twoColumnSheets) {
twoColumnSpecialCharacterErrorCount += workbook.twoColumnSheets[page].errors.filter(function (x) {
return x.errorCode === "INVALID_CHARACTER";
}).length;
}
assert.equal(frequency, twoColumnSpecialCharacterErrorCount);
};
// Additional Sheets Warning Tests
var additionalSheetExtraneousDataWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var additionalSheetExtraneousDataWarningCount = 0;
for (let page in workbook.twoColumnSheets) {
additionalSheetExtraneousDataWarningCount += workbook.twoColumnSheets[page].warnings.filter(function (x) {
return x.warningCode === "EXTRANEOUS_DATA";
}).length;
}
assert.equal(frequency, additionalSheetExtraneousDataWarningCount);
};
var unknownOptimizationParameterWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var unknownOptimizationParameterWarningCount = 0;
unknownOptimizationParameterWarningCount += workbook.meta.warnings.filter((x) =>
x.warningCode === "UNKNOWN_OPTIMIZATION_PARAMETER").length;
assert.equal(frequency, unknownOptimizationParameterWarningCount);
};
var invalidOptimizationParameterWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var invalidOptimizationParameterWarningCount = 0;
invalidOptimizationParameterWarningCount += workbook.meta.warnings.filter((x) =>
x.warningCode === "INVALID_OPTIMIZATION_PARAMETER").length;
assert.equal(frequency, invalidOptimizationParameterWarningCount);
};
var unknownOptimizationDiagnosticsParameterWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var unknownOptimizationDiagnosticsParameterWarningCount = 0;
unknownOptimizationDiagnosticsParameterWarningCount += workbook.meta2.warnings.filter((x) =>
x.warningCode === "UNKNOWN_OPTIMIZATION_DIAGNOSTICS_PARAMETER").length;
assert.equal(frequency, unknownOptimizationDiagnosticsParameterWarningCount);
};
var invalidOptimizationDiagnosticsValueWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var invalidOptimizationDiagnosticsValueWarningCount = 0;
invalidOptimizationDiagnosticsValueWarningCount += workbook.meta2.warnings.filter((x) =>
x.warningCode === "INVALID_OPTIMIZATION_DIAGNOSTICS_VALUE").length;
assert.equal(frequency, invalidOptimizationDiagnosticsValueWarningCount);
};
var optimizationDiagnosticsExtraneousDataWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var optimizationDiagnosticsExtraneousDataWarningCount = 0;
optimizationDiagnosticsExtraneousDataWarningCount += workbook.meta2.warnings.filter((x) =>
x.warningCode === "EXTRANEOUS_DATA").length;
assert.equal(frequency, optimizationDiagnosticsExtraneousDataWarningCount);
};
var incorrectMSEGeneHeaderWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var incorrectMSEGeneHeaderWarningCount = 0;
incorrectMSEGeneHeaderWarningCount += workbook.meta2.warnings.filter((x) =>
x.warningCode === "INCORRECT_MSE_GENE_HEADER").length;
assert.equal(frequency, incorrectMSEGeneHeaderWarningCount);
};
var incorrectMSEHeaderWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var incorrectMSEHeaderWarningCount = 0;
incorrectMSEHeaderWarningCount += workbook.meta2.warnings.filter((x) =>
x.warningCode === "INCORRECT_MSE_HEADER").length;
assert.equal(frequency, incorrectMSEHeaderWarningCount);
};
var missingMSEDataWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var missingMSEDataWarningCount = 0;
missingMSEDataWarningCount += workbook.meta2.warnings.filter((x) =>
x.warningCode === "MISSING_MSE_DATA").length;
assert.equal(frequency, missingMSEDataWarningCount);
};
var invalidMSEDataWarning = function (input, frequency) {
var sheet = xlsx.parse(input);
var workbook = parseAdditionalSheet(sheet);
var invalidMSEDataWarningCount = 0;
invalidMSEDataWarningCount += workbook.meta2.warnings.filter((x) =>
x.warningCode === "INVALID_MSE_DATA").length;
assert.equal(frequency, invalidMSEDataWarningCount);
};
// Export Tests
var importExportReImportNoErrorsOrWarnings = function (input) {
var sheet = xlsx.parse(input);
var inputWorkbook = spreadsheetController.crossSheetInteractions(sheet);
inputWorkbook.exportSheets = {
"optimization_parameters": inputWorkbook.meta,
expression: inputWorkbook.expression,
networks: {}
};
if (inputWorkbook.network) {
inputWorkbook.exportSheets.networks["network"] = inputWorkbook.network;
}
if (inputWorkbook.networkOptimizedWeights) {
inputWorkbook.exportSheets.networks["network_optimized_weights"] = inputWorkbook.networkOptimizedWeights;
}
if (inputWorkbook.networkWeights) {
inputWorkbook.exportSheets.networks["network_weights"] = inputWorkbook.networkWeights;
}
if (inputWorkbook.twoColumnSheets) {
inputWorkbook.exportSheets["two_column_sheets"] = inputWorkbook.twoColumnSheets;
}
if (inputWorkbook.meta2) {
inputWorkbook.exportSheets["optimization_diagnostics"] = inputWorkbook.meta2;
}
var exportedWorkbook = exportController.grnsightToXlsx(inputWorkbook);
var sheet2 = xlsx.parse(exportedWorkbook);
var reImportedWorkbook = spreadsheetController.crossSheetInteractions(sheet2);
assert.equal(0, reImportedWorkbook.errors.length + reImportedWorkbook.warnings.length);
};
var importFileSameAsExportFile = function (input) {
var sheet = xlsx.parse(input);
var inputWorkbook = spreadsheetController.crossSheetInteractions(sheet);
inputWorkbook.exportSheets = {
"optimization_parameters": inputWorkbook.meta,
expression: inputWorkbook.expression,
networks: {}
};
if (inputWorkbook.network) {
inputWorkbook.exportSheets.networks["network"] = inputWorkbook.network;
}
if (inputWorkbook.networkOptimizedWeights) {
inputWorkbook.exportSheets.networks["network_optimized_weights"] = inputWorkbook.networkOptimizedWeights;
}
if (inputWorkbook.networkWeights) {
inputWorkbook.exportSheets.networks["network_weights"] = inputWorkbook.networkWeights;
}
if (inputWorkbook.twoColumnSheets) {
inputWorkbook.exportSheets["two_column_sheets"] = inputWorkbook.twoColumnSheets;
}
if (inputWorkbook.meta2) {
inputWorkbook.exportSheets["optimization_diagnostics"] = inputWorkbook.meta2;
}
var exportedWorkbook = exportController.grnsightToXlsx(inputWorkbook);
var sheet2 = xlsx.parse(exportedWorkbook);
sheet.sort((a, b) => (a.name > b.name) ? 1 : -1);
sheet2.sort((a, b) => (a.name > b.name) ? 1 : -1);
assert.deepEqual(sheet, sheet2);
};
exports.noErrors = noErrors;
exports.duplicateGeneError = duplicateGeneError;
exports.invalidGeneLengthError = invalidGeneLengthError;
exports.corruptGeneError = corruptGeneError;
exports.unknownError = unknownError;
exports.missingValueError = missingValueError;
exports.missingNetworkError = missingNetworkError;
exports.workbookSizeError = workbookSizeError;
exports.warningsCountError = warningsCountError;
exports.invalidDataTypeError = invalidDataTypeError;
exports.emptyRowError = emptyRowError;
exports.idLabelError = idLabelError;
exports.errorsCountError = errorsCountError;
exports.specialCharacterError = specialCharacterError;
exports.emptyExpressionColumnError = emptyExpressionColumnError;
exports.emptyExpressionRowError = emptyExpressionRowError;
exports.missingColumnHeaderError = missingColumnHeaderError;
exports.geneMismatchError = geneMismatchError;
exports.labelError = labelError;
exports.missingGeneNameError = missingGeneNameError;
exports.extraGeneNameError = extraGeneNameError;
exports.negativeTimePointError = negativeTimePointError;
exports.nonMonotonicTimePointsError = nonMonotonicTimePointsError;
exports.nonNumericalTimePointError = nonNumericalTimePointError;
exports.emptyRowDataError = emptyRowDataError;
exports.emptyMatrixDataError = emptyMatrixDataError;
exports.emptyColumnDataError = emptyColumnDataError;
exports.emptyColumnError = emptyColumnError;
exports.twoColumnIdError = twoColumnIdError;
exports.additionalSheetIncorrectColumnHeaderError = additionalSheetIncorrectColumnHeaderError;
exports.additionalSheetMissingColumnHeaderError = additionalSheetMissingColumnHeaderError;
exports.twoColumnInvalidGeneTypeError = twoColumnInvalidGeneTypeError;
exports.twoColumnInvalidValueError = twoColumnInvalidValueError;
exports.twoColumnInvalidGeneLengthError = twoColumnInvalidGeneLengthError;
exports.twoColumnSpecialCharacterError = twoColumnSpecialCharacterError;
exports.checkForGene = checkForGene;
exports.noWarnings = noWarnings;
exports.missingSourceWarning = missingSourceWarning;
exports.missingTargetWarning = missingTargetWarning;
exports.randomDataWarning = randomDataWarning;
exports.emptyRowWarning = emptyRowWarning;
exports.invalidNetworkSizeWarning = invalidNetworkSizeWarning;
exports.extraneousDataWarning = extraneousDataWarning;
exports.invalidMatrixDataWarning = invalidMatrixDataWarning;
exports.incorrectlyNamedExpressionSheetWarning = incorrectlyNamedExpressionSheetWarning;
exports.missingExpressionWarning = missingExpressionWarning;
exports.incorrectlyNamedSheetWarning = incorrectlyNamedSheetWarning;
exports.additionalSheetExtraneousDataWarning = additionalSheetExtraneousDataWarning;
exports.unknownOptimizationParameterWarning = unknownOptimizationParameterWarning;
exports.invalidOptimizationParameterWarning = invalidOptimizationParameterWarning;
exports.unknownOptimizationDiagnosticsParameterWarning = unknownOptimizationDiagnosticsParameterWarning;
exports.invalidOptimizationDiagnosticsValueWarning = invalidOptimizationDiagnosticsValueWarning;
exports.optimizationDiagnosticsExtraneousDataWarning = optimizationDiagnosticsExtraneousDataWarning;
exports.incorrectMSEGeneHeaderWarning = incorrectMSEGeneHeaderWarning;
exports.incorrectMSEHeaderWarning = incorrectMSEHeaderWarning;
exports.missingMSEDataWarning = missingMSEDataWarning;
exports.invalidMSEDataWarning = invalidMSEDataWarning;
exports.importExportReImportNoErrorsOrWarnings = importExportReImportNoErrorsOrWarnings;
exports.importFileSameAsExportFile = importFileSameAsExportFile;