/*
* This file is part of ADDIS (Aggregate Data Drug Information System).
* ADDIS is distributed from http://drugis.org/.
* Copyright © 2009 Gert van Valkenhoef, Tommi Tervonen.
* Copyright © 2010 Gert van Valkenhoef, Tommi Tervonen, Tijs Zwinkels,
* Maarten Jacobs, Hanno Koeslag, Florin Schimbinschi, Ahmad Kamal, Daniel
* Reid.
* Copyright © 2011 Gert van Valkenhoef, Ahmad Kamal, Daniel Reid, Florin
* Schimbinschi.
* Copyright © 2012 Gert van Valkenhoef, Daniel Reid, Joël Kuiper, Wouter
* Reckman.
* Copyright © 2013 Gert van Valkenhoef, Joël Kuiper.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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.drugis.addis.presentation;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import org.drugis.addis.entities.AdverseEvent;
import org.drugis.addis.entities.Epoch;
import org.drugis.addis.entities.Study;
import org.drugis.addis.entities.StudyOutcomeMeasure;
import org.drugis.addis.entities.Variable;
import org.drugis.addis.presentation.wizard.AddEpochsPresentation;
import org.drugis.addis.presentation.wizard.WhenTakenFactory;
import org.drugis.addis.util.EntityUtil;
import org.drugis.common.JUnitUtil;
import org.drugis.common.beans.SortedSetModel;
import org.junit.Before;
import org.junit.Test;
public class SelectVariablesPresentationTest {
private static final String TYPENAME = "Adverse Event";
private static final String DESCRIPTION = "Please select the appropriate adverse events.";
private static final String TITLE = "Select Adverse Events";
private AdverseEvent d_ade1 = new AdverseEvent("ADE 1", AdverseEvent.convertVarType(Variable.Type.RATE));
private AdverseEvent d_ade2 = new AdverseEvent("ADE 2", AdverseEvent.convertVarType(Variable.Type.RATE));
private AdverseEvent d_ade3 = new AdverseEvent("ADE 3", AdverseEvent.convertVarType(Variable.Type.RATE));
private SortedSetModel<AdverseEvent> d_list;
private SelectAdverseEventsPresentation d_pm;
@Before
public void setUp() {
d_list = new SortedSetModel<AdverseEvent>(Arrays.asList(d_ade1, d_ade2));
Study study = new Study();
AddEpochsPresentation aep = new AddEpochsPresentation(study, "epoch", 1);
aep.getList().add(new Epoch("test", EntityUtil.createDuration("P3D")));
WhenTakenFactory wtf = new WhenTakenFactory(study);
d_pm = new SelectAdverseEventsPresentation(d_list, wtf, null);
}
@Test
public void testGetTypeName() {
assertEquals(TYPENAME, d_pm.getTypeName());
}
@Test
public void testHasAddOptionDialog() {
assertTrue(d_pm.hasAddOptionDialog());
}
@Test
public void testGetTitle() {
assertEquals(TITLE, d_pm.getTitle());
assertEquals(DESCRIPTION, d_pm.getDescription());
}
@Test
public void testGetOptions() {
assertEquals(d_list, d_pm.getOptions());
d_list.add(d_ade3);
assertEquals(d_list, d_pm.getOptions());
}
@Test
public void testAddSlot() {
assertEquals(0, d_pm.countSlots());
d_pm.addSlot();
assertEquals(1, d_pm.countSlots());
}
@Test
public void testGetSlot() {
d_pm.addSlot();
d_pm.getSlot(0).setValue(d_ade2);
assertEquals(d_ade2, d_pm.getSlot(0).getValue());
}
@Test
public void testRemoveSlot() {
d_pm.addSlot();
assertEquals(1, d_pm.countSlots());
d_pm.removeSlot(0);
assertEquals(0, d_pm.countSlots());
d_pm.addSlot();
d_pm.getSlot(0).setValue(d_ade1);
d_pm.addSlot();
d_pm.getSlot(1).setValue(d_ade2);
d_pm.removeSlot(0);
assertEquals(d_pm.getSlot(0).getValue(), d_ade2);
}
@Test
public void testAddSlotsEnabledModel() {
assertEquals(d_pm.getAddSlotsEnabledModel().getValue(), Boolean.TRUE);
d_pm.addSlot();
d_pm.addSlot();
assertEquals(d_pm.getAddSlotsEnabledModel().getValue(), Boolean.TRUE);
d_pm.addSlot();
assertEquals(d_pm.getAddSlotsEnabledModel().getValue(), Boolean.TRUE);
}
@Test
public void testInputCompleteModel() {
assertEquals(Boolean.TRUE, d_pm.getInputCompleteModel().getValue());
PropertyChangeListener mock = JUnitUtil.mockListener(d_pm.getInputCompleteModel(), "value",
Boolean.TRUE, Boolean.FALSE);
d_pm.getInputCompleteModel().addValueChangeListener(mock);
d_pm.addSlot();
assertEquals(Boolean.FALSE, d_pm.getInputCompleteModel().getValue());
verify(mock);
mock = JUnitUtil.mockListener(d_pm.getInputCompleteModel(), "value", Boolean.FALSE, Boolean.TRUE);
d_pm.getInputCompleteModel().addValueChangeListener(mock);
assertEquals(Boolean.FALSE, d_pm.getInputCompleteModel().getValue());
d_pm.getSlot(0).setValue(d_ade2);
assertEquals(Boolean.TRUE, d_pm.getInputCompleteModel().getValue());
verify(mock);
}
@Test
public void testInputCompleteModelAfterSetSlots() {
assertEquals(Boolean.TRUE, d_pm.getInputCompleteModel().getValue());
PropertyChangeListener mock = JUnitUtil.mockListener(d_pm.getInputCompleteModel(), "value",
Boolean.TRUE, Boolean.FALSE);
d_pm.getInputCompleteModel().addValueChangeListener(mock);
ArrayList<StudyOutcomeMeasure<AdverseEvent>> slots = new ArrayList<StudyOutcomeMeasure<AdverseEvent>>();
slots.add(new StudyOutcomeMeasure<AdverseEvent>(AdverseEvent.class));
d_pm.setSlots(slots);
assertEquals(Boolean.FALSE, d_pm.getInputCompleteModel().getValue());
verify(mock);
}
@Test
public void testSetSlotsModifiesUnderlyingList() {
ArrayList<StudyOutcomeMeasure<AdverseEvent>> list = new ArrayList<StudyOutcomeMeasure<AdverseEvent>>();
d_pm.setSlots(list);
d_pm.addSlot();
assertEquals(Collections.singletonList(new StudyOutcomeMeasure<AdverseEvent>(AdverseEvent.class)), list);
}
@Test
public void testSelectSameValueTwiceRemovesFromFirst() {
d_pm.addSlot();
d_pm.addSlot();
d_pm.getSlot(1).setValue(d_ade1);
assertEquals(d_ade1, d_pm.getSlot(1).getValue());
assertFalse(d_pm.getSlot(1).hasPlaceholder());
assertTrue(d_pm.getSlot(0).hasPlaceholder());
d_pm.getSlot(0).setValue(d_ade1);
assertEquals(d_ade1, d_pm.getSlot(0).getValue());
assertFalse(d_pm.getSlot(0).hasPlaceholder());
assertTrue(d_pm.getSlot(1).hasPlaceholder());
}
}