root/trunk/test/integration/dbnp/query/SampleSearchTests.groovy @ 1520

Revision 1520, 7.6 KB (checked in by robert@…, 3 years ago)

Fixed sample search integration test

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