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

Revision 1521, 7.8 KB (checked in by robert@…, 3 years ago)

Changes in samplesearch test related to #313

  • Property svn:keywords set to Rev Author Date
Line 
1package dbnp.query
2
3import dbnp.authentication.SecUser
4import dbnp.studycapturing.*
5import dbnp.configuration.*
6
7/**
8 * SearchTests Test
9 *
10 * Description of my test
11 *
12 * @author  your email (+name?)
13 * @since       2010mmdd
14 * @package     ???
15 *
16 * Revision information:
17 * $Rev$
18 * $Author$
19 * $Date$
20 */
21class SampleSearchTests extends GroovyTestCase {
22
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//             
55//              def evLF = new Event(
56//                      startTime       : 3600,
57//                      endTime         : 3600 + 7 * 24 * 3600,
58//                      template        : dietTreatmentTemplate
59//              ).setFieldValue('Diet', 'low fat')
60//
61//              def evS = new SamplingEvent(
62//                      startTime       : 3600,
63//                      template        : liverSamplingEventTemplate,
64//                      sampleTemplate: humanTissueSampleTemplate).setFieldValue('Sample weight', 5F)
65//
66//              // Add events to study
67//              testStudy.addToEvents(evLF).addToSamplingEvents(evS).with { if (!validate()) { errors.each { println it} } else save()}
68//
69//              // Extra check if the SamplingEvents are saved correctly
70//              evS.with { if (!validate()) { errors.each { println it} } else save()}
71//              evLF.with { if (!validate()) { errors.each { println it} } else save()}
72//
73//             
74//              def LFBV1 = new EventGroup(name: "10% fat + vehicle for 1 week").addToEvents(evLF).addToSamplingEvents(evS)
75//
76//              // Add subjects and samples and compose EventGroups
77//              def x = 1
78//              5.times {
79//                      def currentSubject = new Subject(
80//                              name: "TestA" + x++,
81//                              species: mouseTerm,
82//                              template: mouseTemplate,
83//                      ).setFieldValue("Gender", "Male")
84//
85//                      // We have to save the subject first, otherwise the parentEvent property of the sample cannot be set
86//                      // (this is possibly a Grails or Hibernate bug)
87//                      testStudy.addToSubjects(currentSubject)
88//                      currentSubject.with { if (!validate()) { errors.each { println it} } else save()}
89//
90//                      // Add subject to appropriate EventGroup
91//                      LFBV1.addToSubjects(currentSubject).with { if (!validate()) { errors.each { println it} } else save()}
92//
93//                      // Create sample
94//                      def currentSample = new Sample(
95//                              name: currentSubject.name + '_B',
96//                              material: mouseTerm,
97//                              template: humanTissueSampleTemplate,
98//                              parentSubject: currentSubject,
99//                              parentEvent: evS
100//                      );
101//                      testStudy.addToSamples(currentSample)
102//                      currentSample.setFieldValue("Text on vial", "T" + (Math.random() * 100L))
103//                      currentSample.with { if (!validate()) { errors.each { println it} } else save()}
104//              }
105//
106//              // Add EventGroups to study
107//              testStudy.addToEventGroups(LFBV1)
108//              LFBV1.with { if (!validate()) { errors.each { println it} } else save()}
109//              testStudy.with { if (!validate()) { errors.each { println it} } else save(flush:true)}
110//
111//              testStudy.save(flush:true)
112//
113//              //assert Sample.list()*.name.contains( "TestA2_B" );
114//             
115//              // Make sure session is kept open
116//              Session session = SessionFactoryUtils.getSession(sessionFactory, true)
117//              session.flush();
118//              session.clear();
119               
120                BootStrapTemplates.initTemplateOntologies();
121                BootStrapTemplates.initTemplates()
122                BootStrapStudies.addExampleStudies(SecUser.findByUsername('user'), SecUser.findByUsername('admin'))
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: "PPS3_leptin_module" ),
134                        new Criterion( entity: "Study", field: "code", operator: Operator.equals, value: "PPSH" )
135                ]
136               
137                def search = new SampleSearch();
138
139                // Make sure the 'user' is logged in
140                search.user = SecUser.findByUsername('user');
141               
142                search.setCriteria( [ criteria[0] ] );
143                search.execute();
144                assert search.getResults().size() >= 2
145               
146                assert search.getResults()[0] instanceof Sample
147                assert search.getResults()*.name.contains( "A2_B" );
148                assert search.getResults()*.name.contains( "A4_B" );
149               
150                search.setCriteria( [ criteria[0], criteria[1] ] );
151                search.execute();
152                assert search.getResults().size() >= 1
153                assert search.getResults()*.name.contains( "A2_B" );
154               
155                search.setCriteria( [ criteria[0], criteria[2] ] );
156                search.execute();
157                assert search.getResults().size() >= 1
158               
159                // Conflicting criteria shouldn't return any samples
160                search.setCriteria( [ criteria[2], criteria[1] ] );
161                search.execute();
162                assert search.getResults().size() == 0
163        }
164       
165        void testExecuteDifferentCriteria() {
166                List criteria = [
167                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "NuGO PPS3 mouse study" ),
168                        new Criterion( entity: "Subject", field: "species", operator: Operator.equals, value: "Mus musculus" ),
169                        new Criterion( entity: "Sample", field: "name", operator: Operator.contains, value: "A" ),
170                        new Criterion( entity: "Assay", field: "name", operator: Operator.contains, value: "Lipid" ),
171                        //new Criterion( entity: "Event", field: "startTime", operator: Operator.equals, value: "3600" ),
172                        //new Criterion( entity: "SamplingEvent", field: "startTime", operator: Operator.equals, value: 3600 + 7 * 24 * 3600 ),
173                ]
174               
175                def search = new SampleSearch();
176
177                // Make sure the 'user' is logged in
178                search.user = SecUser.findByUsername('user');
179
180                // All criteria should result in 1 sample with code 'abc'
181                criteria.each {
182                        println "Criterion " + it
183                        search.setCriteria( [ it ] );
184                        search.execute();
185                       
186                        def results = search.getResults();
187                        assert results;
188                        assert results.size() >= 2
189                        assert results[0] instanceof Sample;
190                        assert results*.name.contains( "A2_B" );
191                }
192        }
193
194        void testExecuteNonExistingCriteria() {
195                List criteria = [
196                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "This shouldn't exist" ),
197                        new Criterion( entity: "Subject", field: "name", operator: Operator.contains, value: "This shouldn't exist" ),
198                        new Criterion( entity: "Sample", field: "name", operator: Operator.contains, value: "This shouldn't exist" ),
199                        new Criterion( entity: "Assay", field: "name", operator: Operator.contains, value: "This shouldn't exist" ),
200                        new Criterion( entity: "Event", field: "startTime", operator: Operator.equals, value: "481920" ),
201                        new Criterion( entity: "SamplingEvent", field: "startTime", operator: Operator.equals, value: "0192039" ),
202                ]
203               
204                def search = new SampleSearch();
205
206                // Make sure the 'user' is logged in
207                search.user = SecUser.findByUsername('user');
208               
209                // All criteria should result in 1 study with code 'abc'
210                criteria.each {
211                        println "Criterion " + it
212                        search.setCriteria( [ it ] );
213                        search.execute();
214                        assert search.getResults().size() == 0
215                }
216        }
217
218}
Note: See TracBrowser for help on using the browser.