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

Last change on this file since 817 was 774, checked in by keesvb, 10 years ago

added deleteSubject method to Study, updated Study and Sample integration tests, disabled unused ontology tests

  • Property svn:keywords set to Date Author Rev
File size: 5.7 KB
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: 774 $
19 * $Author: keesvb $
20 * $Date: 2010-08-04 14:12:38 +0000 (wo, 04 aug 2010) $
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                def ontology = dbnp.data.Ontology.getBioPortalOntology("1005")                 
196                // Validate and save ontology
197                if (!ontology.validate()) { ontology.errors.each { println it} }
198                assert ontology.validate()
199                assert ontology.save(flush: true)
200                assert Ontology.findByNcboId(1005).name.equals(ontology.name)
201        }
202}
Note: See TracBrowser for help on using the repository browser.