source: trunk/test/integration/gscf/OntologyTests.groovy @ 1545

Last change on this file since 1545 was 1545, checked in by work@…, 10 years ago
  • removed obsolete bgdt imports
  • Property svn:keywords set to Rev Author Date
File size: 5.9 KB
Line 
1package gscf
2
3import grails.test.*
4import org.dbnp.gdt.*
5
6/**
7 * OntologyTests Test
8 *
9 * Test ontology/term functionality on domain model level
10 *
11 * @author keesvb
12 * @since 20100510
13 * @package dbnp.studycapturing
14 *
15 * Revision information:
16 * $Rev: 1545 $
17 * $Author: work@osx.eu $
18 * $Date: 2011-02-22 12:47:28 +0000 (di, 22 feb 2011) $
19 */
20class OntologyTests extends GrailsUnitTestCase {
21
22        final String testOntologyName = "Test ontology"
23        final String testOntologyDescription = "Test description"
24        final String testOntologyUrl = "http://www.test.com"
25        final String testOntologyVersionNumber = "1.0"
26        final int testOntologyNcboId = 0
27        final int testOntologyNcboVersionedId = 0
28        final String testTermName = "Test term"
29        final String testAccession = 'TEST01234$'
30
31        protected void setUp() {
32                super.setUp()
33
34                def ontology = new Ontology(
35                    name: testOntologyName,
36                    description: testOntologyDescription,
37                    url: testOntologyUrl,
38                    versionNumber: testOntologyVersionNumber,
39                    ncboId: testOntologyNcboId,
40                    ncboVersionedId: testOntologyNcboVersionedId
41                );
42
43                // Validate and save ontology
44                assert ontology.validate()
45                assert ontology.save(flush: true)
46        }
47
48        protected void tearDown() {
49                super.tearDown()
50        }
51
52        /**
53         * Test if ontology was properly saved
54         */
55        void testSave() {
56
57                // Try to retrieve the ontology and make sure it's the same
58                def ontologyDB = Ontology.findByName(testOntologyName)
59                assert ontologyDB
60                assert ontologyDB.name.equals(testOntologyName)
61                assert ontologyDB.description.equals(testOntologyDescription)
62                assert ontologyDB.url.equals(testOntologyUrl)
63                assert ontologyDB.versionNumber.equals(testOntologyVersionNumber)
64                assert ontologyDB.ncboId.equals(testOntologyNcboId)
65                assert ontologyDB.ncboVersionedId.equals(testOntologyNcboVersionedId)
66
67        }
68
69        /**
70         * Test saving and retrieving a term within the ontology and test giveTermByName(name) and giveTerms()
71         */
72        void testTermSave() {
73
74                // Find created ontology
75                def testOntology = Ontology.findByName(testOntologyName)
76                assert testOntology
77
78                // Create a new term
79                def term = new Term(
80                    name: testTermName,
81                    accession: testAccession,
82                    ontology: testOntology
83                )
84
85                assert term.validate()
86                assert term.save(flush: true)
87
88                // Try to retrieve the term from the ontology and make sure it's the same
89                def termDB = testOntology.giveTermByName(testTermName)
90                assert termDB.name.equals(testTermName)
91                assert termDB.accession.equals(testAccession)
92                assert termDB.ontology == testOntology
93
94                // Test giveTerms() and make sure the term is in there
95                def terms = testOntology.giveTerms()
96                assert terms
97                assert terms.size() == 1
98                assert terms.asList().first().name.equals(testTermName)
99        }
100
101        /**
102         * Ontocat test for debug purposes: show all properties of a certain ontology
103        * Make this method private in order to run it
104         */
105        private void testOntocatBioPortalDebug() {
106                // Instantiate OLS service
107                uk.ac.ebi.ontocat.OntologyService os = new uk.ac.ebi.ontocat.bioportal.BioportalOntologyService()
108
109                // Find ontology by ncboId
110                uk.ac.ebi.ontocat.Ontology o = os.getOntology("1005")
111                StringBuilder sb = new StringBuilder();
112                // This is of course a very scary way to getting more information on 'o', but it seems to be the only way to reach codingScheme
113                def bean = os.getOntologyBean()
114                String codingScheme = bean.codingScheme
115                sb.append("OntologyBean:\n")
116                sb.append("property codingScheme=" + codingScheme + "\n")
117                sb.append("Bean.properties:\n")
118                bean.properties.each {
119                        sb.append(it.key + "=" + it.value + "\n")
120                }
121                sb.append "Bean:\t" + bean.dump()
122                sb.append("Coding scheme: ")
123                sb.append(bean.properties['codingScheme'])
124                sb.append("\t");
125                sb.append(o.getAbbreviation());
126                sb.append("\t");
127                sb.append(o.getLabel());
128                sb.append("\t");
129                sb.append(o.getOntologyAccession());
130                sb.append("\t");
131                sb.append("Ontology meta properties:\n")
132                o.getVersionNumber() + o.getMetaPropertyValues().each {
133                        sb.append(it.name + "=" + it.value + "\n")
134                }
135                sb.append("Ontology properties:\n");
136                o.getProperties().each {
137                        sb.append(it.key + "=" + it.value + "\n")
138                }
139                sb.append("Ontology root terms:\n");
140                os.getRootTerms(o).each {
141                        sb.append("Term ${os.makeLookupHyperlink(it.properties.get('accession'))} properties:\n")
142                        it.properties.each {
143                                sb.append it.key + "=" + it.value + "\n"
144                        }
145                }
146                System.out.println(sb.toString());
147        }
148
149        /**
150         * Add all OLS ontologies to the database via the Ontocat framework
151         */
152        private void testOntocatOLSOntologies() {
153                // Instantiate EBI OLS service
154                uk.ac.ebi.ontocat.OntologyService os = new uk.ac.ebi.ontocat.ols.OlsOntologyService()
155                addOntologies(os)
156        }
157
158        /**
159         * Add all BioPortal ontologies to the database via the Ontocat framework
160         */
161        private void testOntocatBioPortalOntologies() {
162                // Instantiate BioPortal service
163                uk.ac.ebi.ontocat.OntologyService os = new uk.ac.ebi.ontocat.bioportal.BioportalOntologyService()
164                addOntologies(os)
165        }
166
167        private void addOntologies(uk.ac.ebi.ontocat.OntologyService os) {
168
169                // Iterate over all ontologies in OLS
170                os.getOntologies().each { o ->
171
172                        // Instantiate ontology
173                        def ontology = new Ontology(
174                            name: o.label,
175                            description: o.description,
176                            url: o.properties['homepage'],
177                            //url: 'http://bioportal.bioontology.org/ontologies/' + versionedId,
178                            versionNumber: o.versionNumber,
179                            ncboId: o.ontologyAccession,
180                            ncboVersionedId: o.id
181                        );
182
183                        // Validate and save ontology
184                        assert ontology.validate()
185                        assert ontology.save(flush: true)
186
187                        //println ontology.dump()
188                }
189
190        }
191
192        public void testAddBioPortalOntology() {
193                // Add a new ontology
194                def ontology = Ontology.getBioPortalOntology("1031")
195                // Validate and save ontology
196                if (!ontology.validate()) { ontology.errors.each { println it} }
197                assert ontology.validate()
198                assert ontology.save(flush: true)
199                assert Ontology.findByNcboId(1031).name.equals(ontology.name)
200
201                // Make sure that it is not possible to add an ontology twice
202                def addAgain = Ontology.getBioPortalOntology("1031")
203                assert !addAgain.validate()
204        }
205}
Note: See TracBrowser for help on using the repository browser.