source: trunk/test/unit/dbnp/query/StudySearchTests.groovy @ 1487

Last change on this file since 1487 was 1487, checked in by robert@…, 9 years ago
  • Fixed StudySearch? unit tests (#303)
  • Changed css error message to class="errormessage" in order to avoid breaking the study wizard (see r1485)
  • Property svn:keywords set to Rev Author Date
File size: 5.9 KB
Line 
1package dbnp.query
2
3import dbnp.studycapturing.*
4import grails.test.*
5import org.dbnp.gdt.AssayModule
6import org.codehaus.groovy.grails.commons.ApplicationHolder
7import dbnp.authentication.*;
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: 1487 $
20 * $Author: robert@isdat.nl $
21 * $Date: 2011-02-03 09:51:16 +0000 (do, 03 feb 2011) $
22 */
23class StudySearchTests extends GrailsUnitTestCase {
24    protected void setUp() {
25        super.setUp()
26               
27                def studies = [ new Study( title: 'Study TNO-1', code: 'abc' ), new Study( title: 'Study TNO-2', code: 'def' ), new Study( title: 'Study NMC-1', code: 'ghi' ), new Study( title: 'Study NMC-2', code: 'jkl' ) ];
28                def subjects = [ new Subject( name: 'Subject 1', parent: studies[0] ), new Subject( name: 'Subject 2', parent: studies[1] ) ]
29                def events = [ new Event( startTime: 3600, parent: studies[0] ), new Event( startTime: 7200, parent: studies[1] ) ]
30                def samplingEvents = [ new SamplingEvent( startTime: 3600, parent: studies[0] ), new SamplingEvent( startTime: 7200, parent: studies[1] ) ]
31                def samples = [
32                                new Sample( name: 'Sample 1', parent: studies[0], parentSubject: subjects[ 0 ], parentEvent: samplingEvents[ 0 ] ),
33                                new Sample( name: 'Sample 2', parent: studies[1], parentSubject: subjects[ 1 ], parentEvent: samplingEvents[ 1 ] )
34                ]
35                def assays = [ new Assay( name: 'Assay 1', parent: studies[0], samples: [samples[0]] ), new Assay( name: 'Assay 2', parent: studies[1], samples: [samples[1]] ) ]
36
37                def users = [ new SecUser( username: "abc" ) ];
38               
39                mockDomain( Study, studies );
40                mockDomain( Subject, subjects );
41                mockDomain( Sample, samples );
42                mockDomain( Event, events );
43                mockDomain( SamplingEvent, samplingEvents);
44                mockDomain( Assay, assays );
45
46        mockDomain( AssayModule );
47                mockDomain( SecUser, users )
48                mockDomain( SecUserSecRole )
49                mockDomain( SecRole )
50               
51                subjects.each { it.parent.addToSubjects( it ); }
52                samples.each { it.parent.addToSamples( it ); }
53                events.each { it.parent.addToEvents( it ); }
54                samplingEvents.each { it.parent.addToSamplingEvents( it ); }
55                samples.each { it.parent.addToSamples( it ); }
56                assays.each { it.parent.addToAssays( it ); }
57                studies.each {
58                        it.owner = users[0]
59                }
60
61        // some mocks to make sure test doesn't break on finding 'moduleCommunicationService'
62        ApplicationHolder.metaClass.static.getApplication = { [getMainContext: 
63                        { [getBean:
64                                { what ->
65                                        if( what == "authenticationService" )
66                                                return [getLoggedInUser: { return users[0]; } ]
67                                        else if( what == "moduleCommunicationService" )
68                                                return null
69                                 }
70                        ] }
71                ] }
72               
73    }
74
75    protected void tearDown() {
76        super.tearDown()
77    }
78
79        void testExecute() {
80
81                List criteria = [
82                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "TNO" ),
83                        new Criterion( entity: "Study", field: "code", operator: Operator.equals, value: "abc" ),
84                        new Criterion( entity: "Study", field: "code", operator: Operator.equals, value: "ghi" )
85                ]
86               
87                def studySearch = new StudySearch();
88
89                // Search without criteria
90                studySearch.setCriteria();
91                studySearch.execute();
92               
93                assert studySearch.getResults().size() == 4
94                assert studySearch.getResults()[0] instanceof Study
95                assert studySearch.getResults()*.code.contains( "abc" );
96                assert studySearch.getResults()*.code.contains( "def" );
97                assert studySearch.getResults()*.code.contains( "ghi" );
98                assert studySearch.getResults()*.code.contains( "jkl" );
99
100                studySearch.setCriteria( [ criteria[0] ] );
101                studySearch.execute();
102                assert studySearch.getResults().size() == 2
103               
104                assert studySearch.getResults()*.code.contains( "abc" );
105                assert studySearch.getResults()*.code.contains( "def" );
106               
107                studySearch.setCriteria( [ criteria[0], criteria[1] ] );
108                studySearch.execute();
109                assert studySearch.getResults().size() == 1
110                assert studySearch.getResults()[0].code == "abc"
111               
112                studySearch.setCriteria( [ criteria[0], criteria[2] ] );
113                studySearch.execute();
114                assert studySearch.getResults().size() == 0
115
116                studySearch.setCriteria( [ criteria[1], criteria[2] ] );
117                studySearch.execute();
118                assert studySearch.getResults().size() == 0
119        }
120       
121        void testExecuteDifferentCriteria() {
122                List criteria = [
123                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "TNO-1" ),
124                        new Criterion( entity: "Subject", field: "name", operator: Operator.contains, value: "1" ),
125                        new Criterion( entity: "Sample", field: "name", operator: Operator.contains, value: "1" ),
126                        new Criterion( entity: "Assay", field: "name", operator: Operator.contains, value: "1" ),
127                        new Criterion( entity: "Event", field: "startTime", operator: Operator.equals, value: "3600" ),
128                        new Criterion( entity: "SamplingEvent", field: "startTime", operator: Operator.equals, value: "3600" ),
129                ]
130               
131                def studySearch = new StudySearch();
132
133                // All criteria should result in 1 study with code 'abc'
134                criteria.each {
135                        println "Criterion " + it
136                        studySearch.setCriteria( [ it ] );
137                        studySearch.execute();
138                        assert studySearch.getResults().size() == 1
139                        assert studySearch.getResults()[0].code == "abc";
140                }
141        }
142
143        void testExecuteNonExistingCriteria() {
144                List criteria = [
145                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "TNO-3" ),
146                        new Criterion( entity: "Subject", field: "name", operator: Operator.contains, value: "4" ),
147                        new Criterion( entity: "Sample", field: "name", operator: Operator.contains, value: "5" ),
148                        new Criterion( entity: "Assay", field: "name", operator: Operator.contains, value: "6" ),
149                        new Criterion( entity: "Event", field: "startTime", operator: Operator.equals, value: "4800" ),
150                        new Criterion( entity: "SamplingEvent", field: "startTime", operator: Operator.equals, value: "360" ),
151                ]
152               
153                def studySearch = new StudySearch();
154
155                // All criteria should result in 1 study with code 'abc'
156                criteria.each {
157                        println "Criterion " + it
158                        studySearch.setCriteria( [ it ] );
159                        studySearch.execute();
160                        assert studySearch.getResults().size() == 0
161                }
162        }
163}
Note: See TracBrowser for help on using the repository browser.