source: trunk/test/integration/dbnp/query/SampleSearchTests.groovy @ 1430

Last change on this file since 1430 was 1430, checked in by work@…, 9 years ago
  • set keyword expansion
  • Property svn:keywords set to Rev Author Date
File size: 7.1 KB
Line 
1package dbnp.query
2
3import dbnp.studycapturing.*
4import dbnp.data.*
5import dbnp.authentication.*;
6import grails.test.*
7
8/**
9 * SearchTests Test
10 *
11 * Description of my test
12 *
13 * @author  your email (+name?)
14 * @since       2010mmdd
15 * @package     ???
16 *
17 * Revision information:
18 * $Rev: 1430 $
19 * $Author: work@osx.eu $
20 * $Date: 2011-01-21 20:05:36 +0000 (vr, 21 jan 2011) $
21 */
22class SampleSearchTests extends GroovyTestCase {
23    protected void setUp() {
24        super.setUp()
25
26                def owner = SecUser.findByUsername( "user" );
27               
28                // Look up the used ontologies which should be in the database by now
29                def speciesOntology                             = Ontology.getOrCreateOntologyByNcboId(1132)
30
31                // Look up the used templates which should also be in the database by now
32                def studyTemplate                               = Template.findByName("Academic study")
33                def mouseTemplate                               = Template.findByName("Mouse")
34                def dietTreatmentTemplate               = Template.findByName("Diet treatment")
35                def liverSamplingEventTemplate  = Template.findByName("Liver extraction")
36                def humanTissueSampleTemplate   = Template.findByName("Human tissue sample")
37                def ccAssayTemplate                             = Template.findByName("Clinical chemistry assay")
38
39                // Add terms manually, to avoid having to do many HTTP requests to the BioPortal website
40                def mouseTerm = Term.findByName( "Mus musculus" );
41
42                // Add example mouse study
43                def testStudy = new Study(
44                        template        : studyTemplate,
45                        title           : "TestStudy 1",
46                        description     : "C57Bl/6 mice were fed a high fat (45 en%) or low fat (10 en%) diet after a four week run-in on low fat diet.",
47                        code            : "TESTPPS3_leptin_module",
48                        researchQuestion: "Leptin etc.",
49                        ecCode          : "2007117.c",
50                        startDate       : Date.parse('yyyy-MM-dd', '2008-01-02'),
51                        owner           : owner
52                ).with { if (!validate()) { errors.each { println it} } else save()}
53
54                def evLF = new Event(
55                        startTime       : 3600,
56                        endTime         : 3600 + 7 * 24 * 3600,
57                        template        : dietTreatmentTemplate
58                ).setFieldValue('Diet', 'low fat')
59
60                def evS = new SamplingEvent(
61                        startTime       : 3600,
62                        template        : liverSamplingEventTemplate,
63                        sampleTemplate: humanTissueSampleTemplate).setFieldValue('Sample weight', 5F)
64                // Add events to study
65                testStudy.addToEvents(evLF).addToSamplingEvents(evS).with { if (!validate()) { errors.each { println it} } else save()}
66
67                // Extra check if the SamplingEvents are saved correctly
68                evS.with { if (!validate()) { errors.each { println it} } else save()}
69
70                def LFBV1 = new EventGroup(name: "10% fat + vehicle for 1 week").addToEvents(evLF).addToSamplingEvents(evS)
71
72                // Add subjects and samples and compose EventGroups
73                def x = 1
74                5.times {
75                        def currentSubject = new Subject(
76                                name: "TestA" + x++,
77                                species: mouseTerm,
78                                template: mouseTemplate,
79                        ).setFieldValue("Gender", "Male")
80
81                        // We have to save the subject first, otherwise the parentEvent property of the sample cannot be set
82                        // (this is possibly a Grails or Hibernate bug)
83                        testStudy.addToSubjects(currentSubject)
84                        currentSubject.with { if (!validate()) { errors.each { println it} } else save()}
85
86                        // Add subject to appropriate EventGroup
87                        LFBV1.addToSubjects(currentSubject).save()
88
89                        // Create sample
90                        def currentSample = new Sample(
91                                name: currentSubject.name + '_B',
92                                material: mouseTerm,
93                                template: humanTissueSampleTemplate,
94                                parentSubject: currentSubject,
95                                parentEvent: evS
96                        );
97                        testStudy.addToSamples(currentSample)
98                        currentSample.with { if (!validate()) { errors.each { println it} } else save()}
99                        currentSample.setFieldValue("Text on vial", "T" + (Math.random() * 100L))
100                }
101
102                // Add EventGroups to study
103                testStudy.addToEventGroups(LFBV1).with { if (!validate()) { errors.each { println it} } else save()}
104
105                // Add SAM assay reference
106                def clinicalModule = AssayModule.findByName( "SAM module for clinical data" );
107
108                def testAssayRef = new Assay(
109                        name: 'Test Lipid profiling',
110                        template: ccAssayTemplate,
111                        module: clinicalModule,
112                        externalAssayID: 'TestPPS3_SAM'
113                )
114
115                testStudy.samples*.each {
116                        testAssayRef.addToSamples(it)
117                }
118
119                testStudy.addToAssays(testAssayRef);
120                testStudy.save()
121
122                assert Sample.list()*.name.contains( "TestA2_B" );
123    }
124
125    protected void tearDown() {
126        super.tearDown()
127    }
128
129        void testExecute() {
130
131                List criteria = [
132                        new Criterion( entity: "Sample", field: "name", operator: Operator.contains, value: "B" ),
133                        new Criterion( entity: "Study", field: "code", operator: Operator.equals, value: "TESTPPS3_leptin_module" ),
134                        new Criterion( entity: "Study", field: "code", operator: Operator.equals, value: "PPS3_leptin_module" )
135                ]
136               
137                def search = new SampleSearch();
138
139                search.setCriteria( [ criteria[0] ] );
140                search.execute();
141                assert search.getResults().size() >= 2
142               
143                assert search.getResults()[0] instanceof Sample
144                assert search.getResults()*.name.contains( "TestA2_B" );
145                assert search.getResults()*.name.contains( "TestA4_B" );
146               
147                search.setCriteria( [ criteria[0], criteria[1] ] );
148                search.execute();
149                assert search.getResults().size() >= 1
150                assert search.getResults()*.name.contains( "TestA2_B" );
151               
152                search.setCriteria( [ criteria[0], criteria[2] ] );
153                search.execute();
154                assert search.getResults().size() >= 1
155               
156                // Conflicting criteria shouldn't return any samples
157                search.setCriteria( [ criteria[2], criteria[1] ] );
158                search.execute();
159                assert search.getResults().size() == 0
160        }
161       
162        void testExecuteDifferentCriteria() {
163                List criteria = [
164                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "TestStudy 1" ),
165                        new Criterion( entity: "Subject", field: "name", operator: Operator.contains, value: "Test" ),
166                        new Criterion( entity: "Sample", field: "name", operator: Operator.contains, value: "Test" ),
167                        new Criterion( entity: "Assay", field: "name", operator: Operator.contains, value: "Test" ),
168                        new Criterion( entity: "Event", field: "startTime", operator: Operator.equals, value: "3600" ),
169                        new Criterion( entity: "SamplingEvent", field: "startTime", operator: Operator.equals, value: "3600" ),
170                ]
171               
172                def search = new Search();
173
174                // All criteria should result in 1 sample with code 'abc'
175                criteria.each {
176                        println "Criterion " + it
177                        search.setCriteria( [ it ] );
178                        search.execute();
179                        assert search.getResults().size() >= 2
180                        assert search.getResults()[0] instanceof Sample;
181                        assert search.getResults()*.name.contains( "TestA2_B" );
182                }
183        }
184
185        void testExecuteNonExistingCriteria() {
186                List criteria = [
187                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "This shouldn't exist" ),
188                        new Criterion( entity: "Subject", field: "name", operator: Operator.contains, value: "This shouldn't exist" ),
189                        new Criterion( entity: "Sample", field: "name", operator: Operator.contains, value: "This shouldn't exist" ),
190                        new Criterion( entity: "Assay", field: "name", operator: Operator.contains, value: "This shouldn't exist" ),
191                        new Criterion( entity: "Event", field: "startTime", operator: Operator.equals, value: "481920" ),
192                        new Criterion( entity: "SamplingEvent", field: "startTime", operator: Operator.equals, value: "0192039" ),
193                ]
194               
195                def search = new SampleSearch();
196
197                // All criteria should result in 1 study with code 'abc'
198                criteria.each {
199                        println "Criterion " + it
200                        search.setCriteria( [ it ] );
201                        search.execute();
202                        assert search.getResults().size() == 0
203                }
204        }
205
206}
Note: See TracBrowser for help on using the repository browser.