AIRAVATA-3655 Support "in" comparison type
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/InputDataObjectType.js b/django_airavata/apps/api/static/django_airavata_api/js/models/InputDataObjectType.js
index 8d94c03..fb06215 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/InputDataObjectType.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/InputDataObjectType.js
@@ -156,8 +156,8 @@
* "AND": [ // Boolean operator ("AND", "OR")
* {
* "INPUT_1": { // Name of other application input
- * "comparison": "equals", // Name of comparison type
- * "value": "1" // Value to compare with
+ * "comparison": "equals", // Name of comparison type ("equals", "in")
+ * "value": "1" // Value to compare with (for "in" the value should be an Array)
* }
* },
* {
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/dependencies/BooleanExpressionEvaluator.js b/django_airavata/apps/api/static/django_airavata_api/js/models/dependencies/BooleanExpressionEvaluator.js
index 18e6daf..3f0ed7a 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/dependencies/BooleanExpressionEvaluator.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/dependencies/BooleanExpressionEvaluator.js
@@ -82,6 +82,8 @@
}
if (comparison === "equals") {
return value === this._getComparisonValue(comparisonDefinition);
+ } else if (comparison === "in") {
+ return this._getComparisonValue(comparisonDefinition).includes(value);
}
throw new Error("Unrecognized comparison " + JSON.stringify(comparison));
}
diff --git a/django_airavata/apps/api/static/django_airavata_api/tests/models/dependencies/BooleanExpressionEvaluator.test.js b/django_airavata/apps/api/static/django_airavata_api/tests/models/dependencies/BooleanExpressionEvaluator.test.js
index 62792e7..1b056d4 100644
--- a/django_airavata/apps/api/static/django_airavata_api/tests/models/dependencies/BooleanExpressionEvaluator.test.js
+++ b/django_airavata/apps/api/static/django_airavata_api/tests/models/dependencies/BooleanExpressionEvaluator.test.js
@@ -211,3 +211,25 @@
});
expect(result).toBe(true);
});
+
+// 'in' comparison
+test("INPUT1 in [1, 2, 3] is TRUE", () => {
+ const result = booleanExpressionEvaluator.evaluate({
+ INPUT1: {
+ comparison: "in",
+ value: ["1", "2", "3"],
+ },
+ });
+ expect(result).toBe(true);
+});
+
+// 'in' comparison
+test("INPUT1 in [4, 5, 6] is FALSE", () => {
+ const result = booleanExpressionEvaluator.evaluate({
+ INPUT1: {
+ comparison: "in",
+ value: ["4", "5", "6"],
+ },
+ });
+ expect(result).toBe(false);
+});
diff --git a/docs/admin/app_inputs.md b/docs/admin/app_inputs.md
index 14ad7d7..df96d0d 100644
--- a/docs/admin/app_inputs.md
+++ b/docs/admin/app_inputs.md
@@ -75,6 +75,10 @@
}
```
+See
+[code comment on evaluateDependencies()](https://github.com/apache/airavata-django-portal/blob/develop/django_airavata/apps/api/static/django_airavata_api/js/models/InputDataObjectType.js#L146)
+for more information on how to define expressions.
+
## Alternate UI Components
### Checkboxes