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

Last change on this file since 1456 was 1456, checked in by business@…, 10 years ago

moved gdt package to org.dbnp, moved tests for RelTime?, TemplateEntity?, Template etc. to gdt plugin

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