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

Last change on this file since 1590 was 1590, checked in by work@…, 9 years ago
  • fixing remaining test issues
  • Property svn:keywords set to Rev Author Date
File size: 5.8 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: 1590 $
17 * $Author: work@osx.eu $
18 * $Date: 2011-03-04 15:28:45 +0000 (vr, 04 mrt 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 = Term.getOrCreateTerm(testTermName, testOntology, testAccession)
80
81                assert term.validate()
82                assert term.save(flush: true)
83
84                // Try to retrieve the term from the ontology and make sure it's the same
85                def termDB = testOntology.giveTermByName(testTermName)
86                assert termDB.name.equals(testTermName)
87                assert termDB.accession.equals(testAccession)
88                assert termDB.ontology == testOntology
89
90                // Test giveTerms() and make sure the term is in there
91                def terms = testOntology.giveTerms()
92                assert terms
93                assert terms.size() == 1
94                assert terms.asList().first().name.equals(testTermName)
95        }
96
97        /**
98         * Ontocat test for debug purposes: show all properties of a certain ontology
99        * Make this method private in order to run it
100         */
101        private void testOntocatBioPortalDebug() {
102                // Instantiate OLS service
103                uk.ac.ebi.ontocat.OntologyService os = new uk.ac.ebi.ontocat.bioportal.BioportalOntologyService()
104
105                // Find ontology by ncboId
106                uk.ac.ebi.ontocat.Ontology o = os.getOntology("1005")
107                StringBuilder sb = new StringBuilder();
108                // 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
109                def bean = os.getOntologyBean()
110                String codingScheme = bean.codingScheme
111                sb.append("OntologyBean:\n")
112                sb.append("property codingScheme=" + codingScheme + "\n")
113                sb.append("Bean.properties:\n")
114                bean.properties.each {
115                        sb.append(it.key + "=" + it.value + "\n")
116                }
117                sb.append "Bean:\t" + bean.dump()
118                sb.append("Coding scheme: ")
119                sb.append(bean.properties['codingScheme'])
120                sb.append("\t");
121                sb.append(o.getAbbreviation());
122                sb.append("\t");
123                sb.append(o.getLabel());
124                sb.append("\t");
125                sb.append(o.getOntologyAccession());
126                sb.append("\t");
127                sb.append("Ontology meta properties:\n")
128                o.getVersionNumber() + o.getMetaPropertyValues().each {
129                        sb.append(it.name + "=" + it.value + "\n")
130                }
131                sb.append("Ontology properties:\n");
132                o.getProperties().each {
133                        sb.append(it.key + "=" + it.value + "\n")
134                }
135                sb.append("Ontology root terms:\n");
136                os.getRootTerms(o).each {
137                        sb.append("Term ${os.makeLookupHyperlink(it.properties.get('accession'))} properties:\n")
138                        it.properties.each {
139                                sb.append it.key + "=" + it.value + "\n"
140                        }
141                }
142                System.out.println(sb.toString());
143        }
144
145        /**
146         * Add all OLS ontologies to the database via the Ontocat framework
147         */
148        private void testOntocatOLSOntologies() {
149                // Instantiate EBI OLS service
150                uk.ac.ebi.ontocat.OntologyService os = new uk.ac.ebi.ontocat.ols.OlsOntologyService()
151                addOntologies(os)
152        }
153
154        /**
155         * Add all BioPortal ontologies to the database via the Ontocat framework
156         */
157        private void testOntocatBioPortalOntologies() {
158                // Instantiate BioPortal service
159                uk.ac.ebi.ontocat.OntologyService os = new uk.ac.ebi.ontocat.bioportal.BioportalOntologyService()
160                addOntologies(os)
161        }
162
163        private void addOntologies(uk.ac.ebi.ontocat.OntologyService os) {
164
165                // Iterate over all ontologies in OLS
166                os.getOntologies().each { o ->
167
168                        // Instantiate ontology
169                        def ontology = new Ontology(
170                            name: o.label,
171                            description: o.description,
172                            url: o.properties['homepage'],
173                            //url: 'http://bioportal.bioontology.org/ontologies/' + versionedId,
174                            versionNumber: o.versionNumber,
175                            ncboId: o.ontologyAccession,
176                            ncboVersionedId: o.id
177                        );
178
179                        // Validate and save ontology
180                        assert ontology.validate()
181                        assert ontology.save(flush: true)
182
183                        //println ontology.dump()
184                }
185
186        }
187
188        public void testAddBioPortalOntology() {
189                // Add a new ontology
190                def ontology = Ontology.getBioPortalOntology("1031")
191                // Validate and save ontology
192                if (!ontology.validate()) { ontology.errors.each { println it} }
193                assert ontology.validate()
194                assert ontology.save(flush: true)
195                assert Ontology.findByNcboId(1031).name.equals(ontology.name)
196
197                // Make sure that it is not possible to add an ontology twice
198                def addAgain = Ontology.getBioPortalOntology("1031")
199                assert !addAgain.validate()
200        }
201}
Note: See TracBrowser for help on using the repository browser.