root/trunk/test/unit/dbnp/query/StudySearchTests.groovy @ 1498

Revision 1498, 6.0 KB (checked in by s.h.sikkema@…, 3 years ago)

Remove getApplication method after unit test ready to make integration test succeed

  • Property svn:keywords set to Rev Author Date
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$
20 * $Author$
21 * $Date$
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        ApplicationHolder.metaClass.static.getApplication = null
78    }
79
80        void testExecute() {
81
82                List criteria = [
83                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "TNO" ),
84                        new Criterion( entity: "Study", field: "code", operator: Operator.equals, value: "abc" ),
85                        new Criterion( entity: "Study", field: "code", operator: Operator.equals, value: "ghi" )
86                ]
87               
88                def studySearch = new StudySearch();
89
90                // Search without criteria
91                studySearch.setCriteria();
92                studySearch.execute();
93               
94                assert studySearch.getResults().size() == 4
95                assert studySearch.getResults()[0] instanceof Study
96                assert studySearch.getResults()*.code.contains( "abc" );
97                assert studySearch.getResults()*.code.contains( "def" );
98                assert studySearch.getResults()*.code.contains( "ghi" );
99                assert studySearch.getResults()*.code.contains( "jkl" );
100
101                studySearch.setCriteria( [ criteria[0] ] );
102                studySearch.execute();
103                assert studySearch.getResults().size() == 2
104               
105                assert studySearch.getResults()*.code.contains( "abc" );
106                assert studySearch.getResults()*.code.contains( "def" );
107               
108                studySearch.setCriteria( [ criteria[0], criteria[1] ] );
109                studySearch.execute();
110                assert studySearch.getResults().size() == 1
111                assert studySearch.getResults()[0].code == "abc"
112               
113                studySearch.setCriteria( [ criteria[0], criteria[2] ] );
114                studySearch.execute();
115                assert studySearch.getResults().size() == 0
116
117                studySearch.setCriteria( [ criteria[1], criteria[2] ] );
118                studySearch.execute();
119                assert studySearch.getResults().size() == 0
120        }
121       
122        void testExecuteDifferentCriteria() {
123                List criteria = [
124                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "TNO-1" ),
125                        new Criterion( entity: "Subject", field: "name", operator: Operator.contains, value: "1" ),
126                        new Criterion( entity: "Sample", field: "name", operator: Operator.contains, value: "1" ),
127                        new Criterion( entity: "Assay", field: "name", operator: Operator.contains, value: "1" ),
128                        new Criterion( entity: "Event", field: "startTime", operator: Operator.equals, value: "3600" ),
129                        new Criterion( entity: "SamplingEvent", field: "startTime", operator: Operator.equals, value: "3600" ),
130                ]
131               
132                def studySearch = new StudySearch();
133
134                // All criteria should result in 1 study with code 'abc'
135                criteria.each {
136                        println "Criterion " + it
137                        studySearch.setCriteria( [ it ] );
138                        studySearch.execute();
139                        assert studySearch.getResults().size() == 1
140                        assert studySearch.getResults()[0].code == "abc";
141                }
142        }
143
144        void testExecuteNonExistingCriteria() {
145                List criteria = [
146                        new Criterion( entity: "Study", field: "title", operator: Operator.contains, value: "TNO-3" ),
147                        new Criterion( entity: "Subject", field: "name", operator: Operator.contains, value: "4" ),
148                        new Criterion( entity: "Sample", field: "name", operator: Operator.contains, value: "5" ),
149                        new Criterion( entity: "Assay", field: "name", operator: Operator.contains, value: "6" ),
150                        new Criterion( entity: "Event", field: "startTime", operator: Operator.equals, value: "4800" ),
151                        new Criterion( entity: "SamplingEvent", field: "startTime", operator: Operator.equals, value: "360" ),
152                ]
153               
154                def studySearch = new StudySearch();
155
156                // All criteria should result in 1 study with code 'abc'
157                criteria.each {
158                        println "Criterion " + it
159                        studySearch.setCriteria( [ it ] );
160                        studySearch.execute();
161                        assert studySearch.getResults().size() == 0
162                }
163        }
164}
Note: See TracBrowser for help on using the browser.