/* * 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.imports; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.drugis.addis.entities.Arm; import org.drugis.addis.entities.BasicContinuousMeasurement; import org.drugis.addis.entities.BasicMeasurement; import org.drugis.addis.entities.BasicStudyCharacteristic; import org.drugis.addis.entities.Domain; import org.drugis.addis.entities.DomainImpl; import org.drugis.addis.entities.Note; import org.drugis.addis.entities.Source; import org.drugis.addis.entities.Study; import org.drugis.addis.entities.StudyOutcomeMeasure; import org.drugis.addis.entities.Variable; import org.drugis.addis.entities.WhenTaken; import org.drugis.addis.entities.WhenTaken.RelativeTo; import org.drugis.addis.util.EntityUtil; import org.junit.Before; import org.junit.Test; public class ClinicaltrialsImporterTest { private static InputStream getXMLResource(String name) { return ClinicaltrialsImporterTest.class.getResourceAsStream(name); } Domain d_testDomain; Study d_testStudy; @Before public void setUp() { d_testDomain = new DomainImpl(); d_testStudy = new Study(); } @Test public void testGetClinicaltrialsDataFromUri() { try { ClinicaltrialsImporter.getClinicaltrialsData(d_testStudy, "https://clinicaltrials.gov/show/NCT00644527?resultsxml=true", true); } catch (Exception e) { e.printStackTrace(); } } @Test public void testGetClinicaltrialsData(){ ClinicaltrialsImporter.getClinicaltrialsData(d_testStudy, getXMLResource("NCT00644527.xml"), true); testRetrievedStudy(); } private void testRetrievedStudy() { assertEquals("NCT00644527", d_testStudy.getName()); assertEquals("Receptive Music Therapy for the Treatment of Depression", d_testStudy.getCharacteristic(BasicStudyCharacteristic.TITLE)); assertEquals(BasicStudyCharacteristic.Allocation.RANDOMIZED, d_testStudy.getCharacteristic( BasicStudyCharacteristic.ALLOCATION)); assertEquals(BasicStudyCharacteristic.Blinding.DOUBLE_BLIND, d_testStudy.getCharacteristic( BasicStudyCharacteristic.BLINDING)); assertEquals(1, d_testStudy.getCharacteristic(BasicStudyCharacteristic.CENTERS)); assertTrue(((String)d_testStudy.getCharacteristic(BasicStudyCharacteristic.OBJECTIVE)).contains("specific interest is the use of music in the evening") ); assertNull(d_testStudy.getIndication()); Date expectedStartDate = null, expectedEndDate = null; SimpleDateFormat sdf = new SimpleDateFormat("MMM yyyy"); try { expectedStartDate = sdf.parse("March 2008"); expectedEndDate = sdf.parse("July 2008"); } catch (ParseException e) { e.printStackTrace(); } assertEquals(new Date().toString(), d_testStudy.getCharacteristic(BasicStudyCharacteristic.CREATION_DATE).toString()); assertEquals(Source.CLINICALTRIALS, d_testStudy.getCharacteristic(BasicStudyCharacteristic.SOURCE)); assertEquals(expectedStartDate , d_testStudy.getCharacteristic(BasicStudyCharacteristic.STUDY_START)); assertEquals(expectedEndDate, d_testStudy.getCharacteristic(BasicStudyCharacteristic.STUDY_END)); assertEquals(BasicStudyCharacteristic.Status.COMPLETED, d_testStudy.getCharacteristic(BasicStudyCharacteristic.STATUS)); assertTrue(((String)d_testStudy.getCharacteristic(BasicStudyCharacteristic.INCLUSION)).contains("Patients aged 18 to 70 years with a Goldberg Depression Test Score of 15 to 65")); assertTrue(((String)d_testStudy.getCharacteristic(BasicStudyCharacteristic.EXCLUSION)).contains("Patients under psychiatric treatment because of psychoses")); assertTrue(Study.extractVariables(d_testStudy.getEndpoints()).size() > 0); Note note = d_testStudy.getEndpoints().get(0).getNotes().get(0); Boolean checkNote = note.getText().contains("the HADS-D-scale (single weighted) between study entry and 5 / 10 and 15-week-follow-up") || note.getText().contains("Quality of life (SF 36), Vital Exhaustion Brief Questionnaire, Primary outcome measure at 5 and 10 weeks."); assertTrue(checkNote); } @Test public void testGetClinicaltrialsDataWithResults() { ClinicaltrialsImporter.getClinicaltrialsData(d_testStudy, getXMLResource("NCT00696436.xml"), true); WhenTaken wt = new WhenTaken(EntityUtil.createDuration("P0D"), RelativeTo.BEFORE_EPOCH_END, d_testStudy.getEpochs().get(1)); Arm arm1 = d_testStudy.getArms().get(0); Arm arm2 = d_testStudy.getArms().get(1); assertEquals("Azilsartan Medoxomil 40 mg QD", arm1.getName()); assertEquals("Azilsartan Medoxomil 80 mg QD", arm2.getName()); assertEquals(5, d_testStudy.getArms().size()); StudyOutcomeMeasure<? extends Variable> som1 = d_testStudy.getStudyOutcomeMeasures().get(0); assertTrue(som1.getNotes().get(0).getText().startsWith("Change From Baseline in the 24-hour Mean Systolic Blood Pressure Measured by Ambulatory Blood Pressure Monitoring.")); assertTrue(som1.getIsPrimary()); BasicContinuousMeasurement m1 = new BasicContinuousMeasurement(-13.42, 10.622, 237); BasicContinuousMeasurement m2 = new BasicContinuousMeasurement(-14.53, 10.623, 229); assertMeasurementEquals(m1, d_testStudy.getMeasurement(som1, arm1, wt)); assertMeasurementEquals(m2, d_testStudy.getMeasurement(som1, arm2, wt)); StudyOutcomeMeasure<? extends Variable> som2 = d_testStudy.getStudyOutcomeMeasures().get(1); assertTrue(som2.getNotes().get(0).getText().startsWith("Change From Baseline in Mean Trough Clinic Sitting Systolic Blood Pressure.")); assertFalse(som2.getIsPrimary()); BasicContinuousMeasurement m3 = new BasicContinuousMeasurement(-16.38, 15.728, 269); BasicContinuousMeasurement m4 = new BasicContinuousMeasurement(-16.74, 15.725, 270); assertMeasurementEquals(m3, d_testStudy.getMeasurement(som2, arm1, wt)); assertMeasurementEquals(m4, d_testStudy.getMeasurement(som2, arm2, wt)); // TODO add tests for categorical and rate measurements } private static void assertMeasurementEquals(BasicContinuousMeasurement m1, BasicMeasurement m2) { if (m2 instanceof BasicContinuousMeasurement) { assertEquals(m1.getMean(), ((BasicContinuousMeasurement) m2).getMean(), 0.001); assertEquals(m1.getStdDev(), ((BasicContinuousMeasurement) m2).getStdDev(), 0.001); assertEquals(m1.getSampleSize(), m2.getSampleSize()); } else { assertEquals(m1, m2); } } }