/*
* Copyright (c) 2017 OBiBa. All rights reserved.
*
* This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.obiba.magma.js.views;
import org.junit.Test;
import org.obiba.magma.Initialisable;
import org.obiba.magma.ValueSet;
import org.obiba.magma.ValueTable;
import org.obiba.magma.Variable;
import org.obiba.magma.VariableEntity;
import org.obiba.magma.js.AbstractJsTest;
import org.obiba.magma.views.SelectClause;
import org.obiba.magma.views.WhereClause;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.fest.assertions.api.Assertions.assertThat;
public class JavascriptClauseTest extends AbstractJsTest {
@Test
public void test_DefaultCtor() {
new JavascriptClause();
}
@Test
public void test_StringCtor() {
String script = "the script";
JavascriptClause clause = new JavascriptClause(script);
assertThat(clause.getScript()).isEqualTo(script);
}
@Test
public void test_setScript_assignsScript() {
JavascriptClause clause = new JavascriptClause();
String script = "the New Script";
clause.setScript(script);
assertThat(clause.getScript()).isEqualTo(script);
}
@Test
public void test_getScriptName_returnsDefaultName() {
JavascriptClause clause = new JavascriptClause();
assertThat(clause.getScriptName()).isEqualTo("customScript");
}
@Test
public void test_setScriptName_assignsName() {
JavascriptClause clause = new JavascriptClause();
String newName = "My Script";
clause.setScriptName(newName);
assertThat(clause.getScriptName()).isEqualTo(newName);
}
@Test(expected = NullPointerException.class)
public void test_initialise_throwsNullPointerWhenScriptIsNull() {
Initialisable clause = new JavascriptClause();
clause.initialise();
}
@Test(expected = IllegalStateException.class)
public void test_select_throwsIllegalStateException() {
SelectClause clause = new JavascriptClause();
clause.select(null);
}
@Test(expected = IllegalArgumentException.class)
public void test_select_throwsIllegalArgumentException() {
JavascriptClause clause = new JavascriptClause("true");
clause.initialise();
clause.select(null);
}
@Test
public void test_select_handlesBooleanReturnValue() {
assertSelect("true", true);
assertSelect("false", false);
}
@Test
public void test_select_returnsFalseWhenScriptReturnsNonBoolean() {
assertSelect("1.0", false);
assertSelect("1", false);
assertSelect("'foo'", false);
}
@Test
public void test_select_returnsFalseWhenScriptReturnsScriptableValueThatIsNotBooleanType() {
assertSelect("now()", false);
}
@Test(expected = IllegalStateException.class)
public void test_where_throwsIllegalStateException() {
WhereClause clause = new JavascriptClause();
clause.where(null);
}
@Test(expected = IllegalArgumentException.class)
public void test_where_throwsIllegalArgumentException() {
JavascriptClause clause = new JavascriptClause("true");
clause.initialise();
clause.where(null);
}
@Test
public void test_where_handlesBooleanReturnValue() {
assertWhere("true", true);
assertWhere("false", false);
}
@Test
public void test_where_returnsFalseWhenScriptReturnsNonBoolean() {
assertWhere("1.0", false);
assertWhere("1", false);
assertWhere("'foo'", false);
}
@Test
public void test_where_returnsFalseWhenScriptReturnsScriptableValueThatIsNotBooleanType() {
assertWhere("now()", false);
}
private void assertSelect(String script, boolean expected) {
JavascriptClause clause = new JavascriptClause(script);
clause.initialise();
boolean selected = clause.select(createMock(Variable.class));
assertThat(selected).isEqualTo(expected);
}
private void assertWhere(String script, boolean expected) {
JavascriptClause clause = new JavascriptClause(script);
clause.initialise();
ValueSet valueSetMock = createMock(ValueSet.class);
VariableEntity entityMock = createMock(VariableEntity.class);
ValueTable valueTableMock = createMock(ValueTable.class);
expect(valueSetMock.getVariableEntity()).andReturn(entityMock);
expect(valueSetMock.getValueTable()).andReturn(valueTableMock);
replay(valueSetMock);
boolean selected = clause.where(valueSetMock);
assertThat(selected).isEqualTo(expected);
verify(valueSetMock);
}
}