/*
* 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;
import org.junit.Test;
import org.obiba.magma.ValueSet;
import org.obiba.magma.ValueTable;
import org.obiba.magma.Variable;
import org.obiba.magma.VariableValueSource;
import org.obiba.magma.js.views.JavascriptClause;
import org.obiba.magma.type.TextType;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class JavascriptClauseTest extends AbstractJsTest {
@Test
public void testSelectWithScriptThatEvaluatesToTrue() {
Variable variableMock = mock(Variable.class);
when(variableMock.getName()).thenReturn("Participant.DO_YOU_SMOKE");
JavascriptClause javascriptClause = new JavascriptClause("name().matches(/Participant.*/, /DO_YOU_SMOKE/)");
javascriptClause.initialise();
assertThat(javascriptClause.select(variableMock)).isTrue();
}
@Test
public void testSelectWithScriptThatEvaluatesToFalse() {
Variable variableMock = mock(Variable.class);
when(variableMock.getName()).thenReturn("Participant.DO_YOU_SMOKE");
JavascriptClause javascriptClause = new JavascriptClause("name().matches(/SomeUnmatchedPattern/)");
javascriptClause.initialise();
assertThat(javascriptClause.select(variableMock)).isFalse();
}
@Test
public void testWhereWithScriptThatEvaluatesToTrue() {
ValueTable valueTableMock = mock(ValueTable.class);
ValueSet valueSetMock = mock(ValueSet.class);
VariableValueSource variableValueSourceMock = mock(VariableValueSource.class);
Variable variableMock = mock(Variable.class);
when(valueSetMock.getValueTable()).thenReturn(valueTableMock);
when(valueTableMock.getVariableValueSource("DO_YOU_SMOKE")).thenReturn(variableValueSourceMock);
when(variableValueSourceMock.getValue(valueSetMock)).thenReturn(TextType.get().valueOf("Yes"));
when(variableValueSourceMock.getVariable()).thenReturn(variableMock);
when(variableMock.getUnit()).thenReturn(null);
JavascriptClause javascriptClause = new JavascriptClause("$('DO_YOU_SMOKE').any('DNK', 'PNA').not()");
javascriptClause.initialise();
assertThat(javascriptClause.where(valueSetMock)).isTrue();
verify(variableValueSourceMock).getVariable();
verify(variableMock).getUnit();
}
@Test
public void testWhereWithScriptThatEvaluatesToFalse() {
ValueTable valueTableMock = mock(ValueTable.class);
ValueSet valueSetMock = mock(ValueSet.class);
VariableValueSource variableValueSourceMock = mock(VariableValueSource.class);
Variable variableMock = mock(Variable.class);
when(valueSetMock.getValueTable()).thenReturn(valueTableMock);
when(valueTableMock.getVariableValueSource("DO_YOU_SMOKE")).thenReturn(variableValueSourceMock);
when(variableValueSourceMock.getValue(valueSetMock)).thenReturn(TextType.get().valueOf("DNK"));
when(variableValueSourceMock.getVariable()).thenReturn(variableMock);
when(variableMock.getUnit()).thenReturn(null);
JavascriptClause javascriptClause = new JavascriptClause("$('DO_YOU_SMOKE').any(true, 'DNK', 'PNA').not()");
javascriptClause.initialise();
assertThat(javascriptClause.where(valueSetMock)).isFalse();
verify(variableValueSourceMock).getVariable();
verify(variableMock).getUnit();
}
}