package com.plexobject.rbac.eval.simple;
import org.junit.Assert;
import org.junit.Test;
import com.plexobject.rbac.eval.PredicateEvaluator;
import com.plexobject.rbac.utils.IDUtils;
public class SimpleEvaluatorTest {
PredicateEvaluator evaluator = new SimpleEvaluator();
@Test
public void testGetSetContext() {
String expr = "amount <= 500 && dept == 'SALES' && time between 8:00am..5:00pm";
Assert.assertTrue(evaluator.evaluate(expr, IDUtils.toMap("amount",
"100", "time", "12:00pm", "dept", "SALES")));
}
@Test
public void testBadGetSetContext() {
String expr = "amount <= 500 && dept == 'SALES' && time between 8:00am..5:00pm";
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("amount",
"100", "time", "6:00pm", "dept", "SALES")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("amount",
"501", "time", "12:00pm", "dept", "SALES")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("amount",
"100", "time", "12:00pm", "dept", "SALESx")));
}
@Test
public void testContains() {
String expr = "dept in sales";
Assert.assertTrue(evaluator.evaluate(expr, IDUtils
.toMap("dept", "SALE")));
}
@Test
public void testEquals() {
String expr = "dept == sales dept";
Assert.assertTrue(evaluator.evaluate(expr, IDUtils.toMap("dept",
"SALEs dept")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("dept",
"SALEs dept")));
}
@Test
public void testLessThan() {
String expr = "amount < 1000";
Assert.assertTrue(evaluator.evaluate(expr, IDUtils.toMap("amount",
"100")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("amount",
"1000")));
}
@Test
public void testLessThanOrEquals() {
String expr = "amount <= 1000";
Assert.assertTrue(evaluator.evaluate(expr, IDUtils.toMap("amount",
"1000")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("amount",
"1001")));
}
@Test
public void testGreaterThan() {
String expr = "amount > 1000";
Assert.assertTrue(evaluator.evaluate(expr, IDUtils.toMap("amount",
"1001")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("amount",
"1000")));
}
@Test
public void testGreaterThanOrEquals() {
String expr = "amount >= 1000";
Assert.assertTrue(evaluator.evaluate(expr, IDUtils.toMap("amount",
"1000")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("amount",
"999")));
}
@Test
public void testNotEquals() {
String expr = "dept != sales";
Assert.assertTrue(evaluator.evaluate(expr, IDUtils.toMap("dept",
"SALEs dept")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("dept",
"SALEs")));
}
@Test
public void testRange() {
String expr = "amount between 10..20";
Assert.assertTrue(evaluator.evaluate(expr, IDUtils
.toMap("amount", "10")));
Assert.assertTrue(evaluator.evaluate(expr, IDUtils
.toMap("amount", "10")));
Assert.assertTrue(evaluator.evaluate(expr, IDUtils
.toMap("amount", "20")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils.toMap("amount",
"21")));
Assert.assertFalse(evaluator.evaluate(expr, IDUtils
.toMap("amount", "9")));
}
}