root/trunk/test/integration/gscf/OntologyTests.groovy @ 1061

Revision 1061, 5.9 KB (checked in by business@…, 3 years ago)

updated ontology tests and deleted tests for REST methods that should be removed, updated ontoCAT to 0.9.5.3

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