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

Last change on this file since 1436 was 1436, checked in by robert@…, 12 years ago

Improved querying, fixed some tests and added imports of the GDT plugin

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