Skip to content

Commit a96d59a

Browse files
committedMar 22, 2018
Create unit test for QgsMetadataBase
1 parent 5cf2656 commit a96d59a

File tree

3 files changed

+516
-218
lines changed

3 files changed

+516
-218
lines changed
 

‎tests/src/python/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ ADD_PYTHON_TEST(PyQgsMapRendererCache test_qgsmaprenderercache.py)
109109
ADD_PYTHON_TEST(PyQgsMapThemeCollection test_qgsmapthemecollection.py)
110110
ADD_PYTHON_TEST(PyQgsMapUnitScale test_qgsmapunitscale.py)
111111
ADD_PYTHON_TEST(PyQgsMargins test_qgsmargins.py)
112+
ADD_PYTHON_TEST(PyQgsMetadataBase test_qgsmetadatabase.py)
112113
ADD_PYTHON_TEST(PyQgsMemoryProvider test_provider_memory.py)
113114
ADD_PYTHON_TEST(PyQgsMultiEditToolButton test_qgsmultiedittoolbutton.py)
114115
ADD_PYTHON_TEST(PyQgsNetworkContentFetcher test_qgsnetworkcontentfetcher.py)

‎tests/src/python/test_qgslayermetadata.py

Lines changed: 0 additions & 218 deletions
Original file line numberDiff line numberDiff line change
@@ -142,105 +142,6 @@ def testEquality(self):
142142
self.assertNotEqual(constraint, QgsLayerMetadata.Constraint('c2', 'type1'))
143143
self.assertNotEqual(constraint, QgsLayerMetadata.Constraint('c', 'type2'))
144144

145-
a = QgsLayerMetadata.Address()
146-
a.type = 'postal'
147-
a.address = '13 north rd'
148-
a.city = 'huxleys haven'
149-
a.administrativeArea = 'land of the queens'
150-
a.postalCode = '4123'
151-
a.country = 'straya!'
152-
a2 = QgsLayerMetadata.Address(a)
153-
self.assertEqual(a, a2)
154-
a2.type = 'postal2'
155-
self.assertNotEqual(a, a2)
156-
a2 = QgsLayerMetadata.Address(a)
157-
a2.address = 'address2'
158-
self.assertNotEqual(a, a2)
159-
a2 = QgsLayerMetadata.Address(a)
160-
a2.city = 'city'
161-
self.assertNotEqual(a, a2)
162-
a2 = QgsLayerMetadata.Address(a)
163-
a2.administrativeArea = 'area2'
164-
self.assertNotEqual(a, a2)
165-
a2 = QgsLayerMetadata.Address(a)
166-
a2.postalCode = 'postal2'
167-
self.assertNotEqual(a, a2)
168-
a2 = QgsLayerMetadata.Address(a)
169-
a2.country = 'country2'
170-
self.assertNotEqual(a, a2)
171-
172-
c = QgsLayerMetadata.Contact()
173-
c.name = 'name'
174-
c.organization = 'org'
175-
c.position = 'pos'
176-
c.voice = '1500 515 555'
177-
c.fax = 'fax'
178-
c.email = 'email'
179-
c.role = 'role'
180-
a = QgsLayerMetadata.Address()
181-
a.type = 'postal'
182-
a2 = QgsLayerMetadata.Address()
183-
a2.type = 'street'
184-
c.addresses = [a, a2]
185-
c2 = QgsLayerMetadata.Contact(c)
186-
self.assertEqual(c, c2)
187-
c2.name = 'name2'
188-
self.assertNotEqual(c, c2)
189-
c2 = QgsLayerMetadata.Contact(c)
190-
c2.organization = 'org2'
191-
self.assertNotEqual(c, c2)
192-
c2 = QgsLayerMetadata.Contact(c)
193-
c2.position = 'pos2'
194-
self.assertNotEqual(c, c2)
195-
c2 = QgsLayerMetadata.Contact(c)
196-
c2.voice = 'voice2'
197-
self.assertNotEqual(c, c2)
198-
c2 = QgsLayerMetadata.Contact(c)
199-
c2.fax = 'fax2'
200-
self.assertNotEqual(c, c2)
201-
c2 = QgsLayerMetadata.Contact(c)
202-
c2.email = 'email2'
203-
self.assertNotEqual(c, c2)
204-
c2 = QgsLayerMetadata.Contact(c)
205-
c2.role = 'role2'
206-
self.assertNotEqual(c, c2)
207-
c2 = QgsLayerMetadata.Contact(c)
208-
c2.addresses = [a2]
209-
self.assertNotEqual(c, c2)
210-
211-
# link
212-
l = QgsLayerMetadata.Link()
213-
l.name = 'name'
214-
l.type = 'type'
215-
l.description = 'desc'
216-
l.url = 'url'
217-
l.format = 'format'
218-
l.mimeType = 'mime'
219-
l.size = '112'
220-
l2 = QgsLayerMetadata.Link(l)
221-
self.assertEqual(l, l2)
222-
l2 = QgsLayerMetadata.Link(l)
223-
l2.name = 'name2'
224-
self.assertNotEqual(l, l2)
225-
l2 = QgsLayerMetadata.Link(l)
226-
l2.type = 'type2'
227-
self.assertNotEqual(l, l2)
228-
l2 = QgsLayerMetadata.Link(l)
229-
l2.description = 'desc2'
230-
self.assertNotEqual(l, l2)
231-
l2 = QgsLayerMetadata.Link(l)
232-
l2.url = 'url2'
233-
self.assertNotEqual(l, l2)
234-
l2 = QgsLayerMetadata.Link(l)
235-
l2.format = 'format2'
236-
self.assertNotEqual(l, l2)
237-
l2 = QgsLayerMetadata.Link(l)
238-
l2.mimeType = 'mime2'
239-
self.assertNotEqual(l, l2)
240-
l2 = QgsLayerMetadata.Link(l)
241-
l2.size = '113'
242-
self.assertNotEqual(l, l2)
243-
244145
def testExtent(self):
245146
e = QgsLayerMetadata.Extent()
246147
se = QgsLayerMetadata.SpatialExtent()
@@ -263,123 +164,6 @@ def testExtent(self):
263164
self.assertEqual(m.extent().temporalExtents()[0].begin(), QDateTime(QDate(2017, 1, 3), QTime(11, 34, 56)))
264165
self.assertEqual(m.extent().temporalExtents()[0].end(), QDateTime(QDate(2018, 1, 3), QTime(12, 35, 57)))
265166

266-
def testKeywords(self):
267-
m = QgsLayerMetadata()
268-
269-
m.setKeywords({'gmd:topicCategory': ['natural']})
270-
self.assertEqual(m.keywords(), {'gmd:topicCategory': ['natural']})
271-
self.assertEqual(m.categories(), ['natural'])
272-
self.assertTrue(m.removeKeywords('gmd:topicCategory'))
273-
274-
m.setKeywords({'vocab a': ['keyword a', 'other a'],
275-
'vocab b': ['keyword b', 'other b']})
276-
self.assertEqual(m.keywords(), {'vocab a': ['keyword a', 'other a'],
277-
'vocab b': ['keyword b', 'other b']})
278-
self.assertEqual(m.keywordVocabularies(), ['vocab a', 'vocab b'])
279-
self.assertEqual(m.keywords('vocab a'), ['keyword a', 'other a'])
280-
self.assertEqual(m.keywords('vocab b'), ['keyword b', 'other b'])
281-
self.assertEqual(m.keywords('not valid'), [])
282-
283-
m.addKeywords('vocab c', ['keyword c'])
284-
self.assertEqual(m.keywords(), {'vocab a': ['keyword a', 'other a'],
285-
'vocab b': ['keyword b', 'other b'],
286-
'vocab c': ['keyword c']})
287-
# replace existing using addKeywords
288-
m.addKeywords('vocab c', ['c'])
289-
self.assertEqual(m.keywords(), {'vocab a': ['keyword a', 'other a'],
290-
'vocab b': ['keyword b', 'other b'],
291-
'vocab c': ['c']})
292-
# replace existing using setKeywords
293-
m.setKeywords({'x': ['x'], 'y': ['y']})
294-
self.assertEqual(m.keywords(), {'x': ['x'],
295-
'y': ['y']})
296-
297-
def testAddress(self):
298-
a = QgsLayerMetadata.Address()
299-
a.type = 'postal'
300-
a.address = '13 north rd'
301-
a.city = 'huxleys haven'
302-
a.administrativeArea = 'land of the queens'
303-
a.postalCode = '4123'
304-
a.country = 'straya!'
305-
self.assertEqual(a.type, 'postal')
306-
self.assertEqual(a.address, '13 north rd')
307-
self.assertEqual(a.city, 'huxleys haven')
308-
self.assertEqual(a.administrativeArea, 'land of the queens')
309-
self.assertEqual(a.postalCode, '4123')
310-
self.assertEqual(a.country, 'straya!')
311-
312-
def testContact(self):
313-
c = QgsLayerMetadata.Contact()
314-
c.name = 'Prince Gristle'
315-
c.organization = 'Bergen co'
316-
c.position = 'prince'
317-
c.voice = '1500 515 555'
318-
c.fax = 'who the f*** still uses fax?'
319-
c.email = 'limpbiskitrulez69@hotmail.com'
320-
c.role = 'person to blame when all goes wrong'
321-
a = QgsLayerMetadata.Address()
322-
a.type = 'postal'
323-
a2 = QgsLayerMetadata.Address()
324-
a2.type = 'street'
325-
c.addresses = [a, a2]
326-
self.assertEqual(c.name, 'Prince Gristle')
327-
self.assertEqual(c.organization, 'Bergen co')
328-
self.assertEqual(c.position, 'prince')
329-
self.assertEqual(c.voice, '1500 515 555')
330-
self.assertEqual(c.fax, 'who the f*** still uses fax?')
331-
self.assertEqual(c.email, 'limpbiskitrulez69@hotmail.com')
332-
self.assertEqual(c.role, 'person to blame when all goes wrong')
333-
self.assertEqual(c.addresses[0].type, 'postal')
334-
self.assertEqual(c.addresses[1].type, 'street')
335-
336-
m = QgsLayerMetadata()
337-
c2 = QgsLayerMetadata.Contact(c)
338-
c2.name = 'Bridgette'
339-
340-
m.setContacts([c, c2])
341-
self.assertEqual(m.contacts()[0].name, 'Prince Gristle')
342-
self.assertEqual(m.contacts()[1].name, 'Bridgette')
343-
344-
# add contact
345-
c3 = QgsLayerMetadata.Contact(c)
346-
c3.name = 'Princess Poppy'
347-
m.addContact(c3)
348-
self.assertEqual(len(m.contacts()), 3)
349-
self.assertEqual(m.contacts()[2].name, 'Princess Poppy')
350-
351-
def testLinks(self):
352-
l = QgsLayerMetadata.Link()
353-
l.name = 'Trashbat'
354-
l.type = 'fashion'
355-
l.description = 'registered in the cook islands!'
356-
l.url = 'http://trashbat.co.uk'
357-
l.format = 'whois'
358-
l.mimeType = 'text/string'
359-
l.size = '112'
360-
self.assertEqual(l.name, 'Trashbat')
361-
self.assertEqual(l.type, 'fashion')
362-
self.assertEqual(l.description, 'registered in the cook islands!')
363-
self.assertEqual(l.url, 'http://trashbat.co.uk')
364-
self.assertEqual(l.format, 'whois')
365-
self.assertEqual(l.mimeType, 'text/string')
366-
self.assertEqual(l.size, '112')
367-
368-
m = QgsLayerMetadata()
369-
l2 = QgsLayerMetadata.Link(l)
370-
l2.name = 'Trashbat2'
371-
372-
m.setLinks([l, l2])
373-
self.assertEqual(m.links()[0].name, 'Trashbat')
374-
self.assertEqual(m.links()[1].name, 'Trashbat2')
375-
376-
# add link
377-
l3 = QgsLayerMetadata.Link(l)
378-
l3.name = 'Trashbat3'
379-
m.addLink(l3)
380-
self.assertEqual(len(m.links()), 3)
381-
self.assertEqual(m.links()[2].name, 'Trashbat3')
382-
383167
def createTestMetadata(self):
384168
"""
385169
Returns a standard metadata which can be tested with checkExpectedMetadata
@@ -548,8 +332,6 @@ def testSaveReadFromXml(self):
548332
"""
549333
Test saving and reading metadata from a XML.
550334
"""
551-
vl = QgsVectorLayer('Point', 'test', 'memory')
552-
self.assertTrue(vl.isValid())
553335

554336
# save metadata to XML
555337
m = self.createTestMetadata()
Lines changed: 515 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,515 @@
1+
# -*- coding: utf-8 -*-
2+
"""QGIS Unit tests for QgsMetadataBase.
3+
4+
Run with: ctest -V -R QgsMetadataBase
5+
6+
.. note:: This program is free software; you can redistribute it and/or modify
7+
it under the terms of the GNU General Public License as published by
8+
the Free Software Foundation; either version 2 of the License, or
9+
(at your option) any later version.
10+
"""
11+
__author__ = 'Nyall Dawson'
12+
__date__ = '19/03/2018'
13+
__copyright__ = 'Copyright 2018, The QGIS Project'
14+
# This will get replaced with a git SHA1 when you do a git archive
15+
__revision__ = '$Format:%H$'
16+
17+
import qgis # NOQA
18+
19+
from qgis.PyQt.QtXml import QDomDocument
20+
21+
from qgis.core import (QgsMetadataBase,
22+
QgsCoordinateReferenceSystem,
23+
QgsVectorLayer,
24+
QgsNativeMetadataValidator,
25+
QgsBox3d,
26+
QgsDateTimeRange)
27+
from qgis.PyQt.QtCore import (QDate,
28+
QTime,
29+
QDateTime)
30+
from qgis.testing import start_app, unittest
31+
32+
start_app()
33+
34+
35+
class TestQgsMetadataBase(unittest.TestCase):
36+
37+
def testGettersSetters(self):
38+
m = QgsMetadataBase()
39+
40+
m.setIdentifier('identifier')
41+
self.assertEqual(m.identifier(), 'identifier')
42+
43+
m.setParentIdentifier('parent identifier')
44+
self.assertEqual(m.parentIdentifier(), 'parent identifier')
45+
46+
m.setLanguage('en-us')
47+
self.assertEqual(m.language(), 'en-us')
48+
49+
m.setType('type')
50+
self.assertEqual(m.type(), 'type')
51+
52+
m.setTitle('title')
53+
self.assertEqual(m.title(), 'title')
54+
55+
m.setCategories(['category'])
56+
self.assertEqual(m.categories(), ['category'])
57+
58+
m.setAbstract('abstract')
59+
self.assertEqual(m.abstract(), 'abstract')
60+
61+
m.setHistory(['loaded into QGIS'])
62+
self.assertEqual(m.history(), ['loaded into QGIS'])
63+
m.setHistory(['accidentally deleted some features'])
64+
self.assertEqual(m.history(), ['accidentally deleted some features'])
65+
m.addHistoryItem('panicked and deleted more')
66+
self.assertEqual(m.history(), ['accidentally deleted some features', 'panicked and deleted more'])
67+
68+
def testEquality(self):
69+
a = QgsMetadataBase.Address()
70+
a.type = 'postal'
71+
a.address = '13 north rd'
72+
a.city = 'huxleys haven'
73+
a.administrativeArea = 'land of the queens'
74+
a.postalCode = '4123'
75+
a.country = 'straya!'
76+
a2 = QgsMetadataBase.Address(a)
77+
self.assertEqual(a, a2)
78+
a2.type = 'postal2'
79+
self.assertNotEqual(a, a2)
80+
a2 = QgsMetadataBase.Address(a)
81+
a2.address = 'address2'
82+
self.assertNotEqual(a, a2)
83+
a2 = QgsMetadataBase.Address(a)
84+
a2.city = 'city'
85+
self.assertNotEqual(a, a2)
86+
a2 = QgsMetadataBase.Address(a)
87+
a2.administrativeArea = 'area2'
88+
self.assertNotEqual(a, a2)
89+
a2 = QgsMetadataBase.Address(a)
90+
a2.postalCode = 'postal2'
91+
self.assertNotEqual(a, a2)
92+
a2 = QgsMetadataBase.Address(a)
93+
a2.country = 'country2'
94+
self.assertNotEqual(a, a2)
95+
96+
c = QgsMetadataBase.Contact()
97+
c.name = 'name'
98+
c.organization = 'org'
99+
c.position = 'pos'
100+
c.voice = '1500 515 555'
101+
c.fax = 'fax'
102+
c.email = 'email'
103+
c.role = 'role'
104+
a = QgsMetadataBase.Address()
105+
a.type = 'postal'
106+
a2 = QgsMetadataBase.Address()
107+
a2.type = 'street'
108+
c.addresses = [a, a2]
109+
c2 = QgsMetadataBase.Contact(c)
110+
self.assertEqual(c, c2)
111+
c2.name = 'name2'
112+
self.assertNotEqual(c, c2)
113+
c2 = QgsMetadataBase.Contact(c)
114+
c2.organization = 'org2'
115+
self.assertNotEqual(c, c2)
116+
c2 = QgsMetadataBase.Contact(c)
117+
c2.position = 'pos2'
118+
self.assertNotEqual(c, c2)
119+
c2 = QgsMetadataBase.Contact(c)
120+
c2.voice = 'voice2'
121+
self.assertNotEqual(c, c2)
122+
c2 = QgsMetadataBase.Contact(c)
123+
c2.fax = 'fax2'
124+
self.assertNotEqual(c, c2)
125+
c2 = QgsMetadataBase.Contact(c)
126+
c2.email = 'email2'
127+
self.assertNotEqual(c, c2)
128+
c2 = QgsMetadataBase.Contact(c)
129+
c2.role = 'role2'
130+
self.assertNotEqual(c, c2)
131+
c2 = QgsMetadataBase.Contact(c)
132+
c2.addresses = [a2]
133+
self.assertNotEqual(c, c2)
134+
135+
# link
136+
l = QgsMetadataBase.Link()
137+
l.name = 'name'
138+
l.type = 'type'
139+
l.description = 'desc'
140+
l.url = 'url'
141+
l.format = 'format'
142+
l.mimeType = 'mime'
143+
l.size = '112'
144+
l2 = QgsMetadataBase.Link(l)
145+
self.assertEqual(l, l2)
146+
l2 = QgsMetadataBase.Link(l)
147+
l2.name = 'name2'
148+
self.assertNotEqual(l, l2)
149+
l2 = QgsMetadataBase.Link(l)
150+
l2.type = 'type2'
151+
self.assertNotEqual(l, l2)
152+
l2 = QgsMetadataBase.Link(l)
153+
l2.description = 'desc2'
154+
self.assertNotEqual(l, l2)
155+
l2 = QgsMetadataBase.Link(l)
156+
l2.url = 'url2'
157+
self.assertNotEqual(l, l2)
158+
l2 = QgsMetadataBase.Link(l)
159+
l2.format = 'format2'
160+
self.assertNotEqual(l, l2)
161+
l2 = QgsMetadataBase.Link(l)
162+
l2.mimeType = 'mime2'
163+
self.assertNotEqual(l, l2)
164+
l2 = QgsMetadataBase.Link(l)
165+
l2.size = '113'
166+
self.assertNotEqual(l, l2)
167+
168+
def testKeywords(self):
169+
m = QgsMetadataBase()
170+
171+
m.setKeywords({'gmd:topicCategory': ['natural']})
172+
self.assertEqual(m.keywords(), {'gmd:topicCategory': ['natural']})
173+
self.assertEqual(m.categories(), ['natural'])
174+
self.assertTrue(m.removeKeywords('gmd:topicCategory'))
175+
176+
m.setKeywords({'vocab a': ['keyword a', 'other a'],
177+
'vocab b': ['keyword b', 'other b']})
178+
self.assertEqual(m.keywords(), {'vocab a': ['keyword a', 'other a'],
179+
'vocab b': ['keyword b', 'other b']})
180+
self.assertEqual(m.keywordVocabularies(), ['vocab a', 'vocab b'])
181+
self.assertEqual(m.keywords('vocab a'), ['keyword a', 'other a'])
182+
self.assertEqual(m.keywords('vocab b'), ['keyword b', 'other b'])
183+
self.assertEqual(m.keywords('not valid'), [])
184+
185+
m.addKeywords('vocab c', ['keyword c'])
186+
self.assertEqual(m.keywords(), {'vocab a': ['keyword a', 'other a'],
187+
'vocab b': ['keyword b', 'other b'],
188+
'vocab c': ['keyword c']})
189+
# replace existing using addKeywords
190+
m.addKeywords('vocab c', ['c'])
191+
self.assertEqual(m.keywords(), {'vocab a': ['keyword a', 'other a'],
192+
'vocab b': ['keyword b', 'other b'],
193+
'vocab c': ['c']})
194+
# replace existing using setKeywords
195+
m.setKeywords({'x': ['x'], 'y': ['y']})
196+
self.assertEqual(m.keywords(), {'x': ['x'],
197+
'y': ['y']})
198+
199+
def testAddress(self):
200+
a = QgsMetadataBase.Address()
201+
a.type = 'postal'
202+
a.address = '13 north rd'
203+
a.city = 'huxleys haven'
204+
a.administrativeArea = 'land of the queens'
205+
a.postalCode = '4123'
206+
a.country = 'straya!'
207+
self.assertEqual(a.type, 'postal')
208+
self.assertEqual(a.address, '13 north rd')
209+
self.assertEqual(a.city, 'huxleys haven')
210+
self.assertEqual(a.administrativeArea, 'land of the queens')
211+
self.assertEqual(a.postalCode, '4123')
212+
self.assertEqual(a.country, 'straya!')
213+
214+
def testContact(self):
215+
c = QgsMetadataBase.Contact()
216+
c.name = 'Prince Gristle'
217+
c.organization = 'Bergen co'
218+
c.position = 'prince'
219+
c.voice = '1500 515 555'
220+
c.fax = 'who the f*** still uses fax?'
221+
c.email = 'limpbiskitrulez69@hotmail.com'
222+
c.role = 'person to blame when all goes wrong'
223+
a = QgsMetadataBase.Address()
224+
a.type = 'postal'
225+
a2 = QgsMetadataBase.Address()
226+
a2.type = 'street'
227+
c.addresses = [a, a2]
228+
self.assertEqual(c.name, 'Prince Gristle')
229+
self.assertEqual(c.organization, 'Bergen co')
230+
self.assertEqual(c.position, 'prince')
231+
self.assertEqual(c.voice, '1500 515 555')
232+
self.assertEqual(c.fax, 'who the f*** still uses fax?')
233+
self.assertEqual(c.email, 'limpbiskitrulez69@hotmail.com')
234+
self.assertEqual(c.role, 'person to blame when all goes wrong')
235+
self.assertEqual(c.addresses[0].type, 'postal')
236+
self.assertEqual(c.addresses[1].type, 'street')
237+
238+
m = QgsMetadataBase()
239+
c2 = QgsMetadataBase.Contact(c)
240+
c2.name = 'Bridgette'
241+
242+
m.setContacts([c, c2])
243+
self.assertEqual(m.contacts()[0].name, 'Prince Gristle')
244+
self.assertEqual(m.contacts()[1].name, 'Bridgette')
245+
246+
# add contact
247+
c3 = QgsMetadataBase.Contact(c)
248+
c3.name = 'Princess Poppy'
249+
m.addContact(c3)
250+
self.assertEqual(len(m.contacts()), 3)
251+
self.assertEqual(m.contacts()[2].name, 'Princess Poppy')
252+
253+
def testLinks(self):
254+
l = QgsMetadataBase.Link()
255+
l.name = 'Trashbat'
256+
l.type = 'fashion'
257+
l.description = 'registered in the cook islands!'
258+
l.url = 'http://trashbat.co.uk'
259+
l.format = 'whois'
260+
l.mimeType = 'text/string'
261+
l.size = '112'
262+
self.assertEqual(l.name, 'Trashbat')
263+
self.assertEqual(l.type, 'fashion')
264+
self.assertEqual(l.description, 'registered in the cook islands!')
265+
self.assertEqual(l.url, 'http://trashbat.co.uk')
266+
self.assertEqual(l.format, 'whois')
267+
self.assertEqual(l.mimeType, 'text/string')
268+
self.assertEqual(l.size, '112')
269+
270+
m = QgsMetadataBase()
271+
l2 = QgsMetadataBase.Link(l)
272+
l2.name = 'Trashbat2'
273+
274+
m.setLinks([l, l2])
275+
self.assertEqual(m.links()[0].name, 'Trashbat')
276+
self.assertEqual(m.links()[1].name, 'Trashbat2')
277+
278+
# add link
279+
l3 = QgsMetadataBase.Link(l)
280+
l3.name = 'Trashbat3'
281+
m.addLink(l3)
282+
self.assertEqual(len(m.links()), 3)
283+
self.assertEqual(m.links()[2].name, 'Trashbat3')
284+
285+
def createTestMetadata(self):
286+
"""
287+
Returns a standard metadata which can be tested with checkExpectedMetadata
288+
"""
289+
m = QgsMetadataBase()
290+
m.setIdentifier('1234')
291+
m.setParentIdentifier('xyz')
292+
m.setLanguage('en-CA')
293+
m.setType('dataset')
294+
m.setTitle('roads')
295+
m.setAbstract('my roads')
296+
m.setHistory(['history a', 'history b'])
297+
m.setKeywords({
298+
'GEMET': ['kw1', 'kw2'],
299+
'gmd:topicCategory': ['natural'],
300+
})
301+
302+
c = QgsMetadataBase.Contact()
303+
c.name = 'John Smith'
304+
c.organization = 'ACME'
305+
c.position = 'staff'
306+
c.voice = '1500 515 555'
307+
c.fax = 'xx.xxx.xxx.xxxx'
308+
c.email = 'foo@example.org'
309+
c.role = 'pointOfContact'
310+
address = QgsMetadataBase.Address()
311+
address.type = 'postal'
312+
address.address = '123 Main Street'
313+
address.city = 'anycity'
314+
address.administrativeArea = 'anyprovince'
315+
address.postalCode = '90210'
316+
address.country = 'Canada'
317+
c.addresses = [address]
318+
m.setContacts([c])
319+
320+
l = QgsMetadataBase.Link()
321+
l.name = 'geonode:roads'
322+
l.type = 'OGC:WMS'
323+
l.description = 'my GeoNode road layer'
324+
l.url = 'http://example.org/wms'
325+
326+
l2 = QgsMetadataBase.Link()
327+
l2.name = 'geonode:roads'
328+
l2.type = 'OGC:WFS'
329+
l2.description = 'my GeoNode road layer'
330+
l2.url = 'http://example.org/wfs'
331+
332+
l3 = QgsMetadataBase.Link()
333+
l3.name = 'roads'
334+
l3.type = 'WWW:LINK'
335+
l3.description = 'full dataset download'
336+
l3.url = 'http://example.org/roads.tgz'
337+
l3.format = 'ESRI Shapefile'
338+
l3.mimeType = 'application/gzip'
339+
l3.size = '283676'
340+
341+
m.setLinks([l, l2, l3])
342+
343+
return m
344+
345+
def checkExpectedMetadata(self, m):
346+
"""
347+
Checks that a metadata object matches that returned by createTestMetadata
348+
"""
349+
self.assertEqual(m.identifier(), '1234')
350+
self.assertEqual(m.parentIdentifier(), 'xyz')
351+
self.assertEqual(m.language(), 'en-CA')
352+
self.assertEqual(m.type(), 'dataset')
353+
self.assertEqual(m.title(), 'roads')
354+
self.assertEqual(m.abstract(), 'my roads')
355+
self.assertEqual(m.history(), ['history a', 'history b'])
356+
self.assertEqual(
357+
m.keywords(),
358+
{'GEMET': ['kw1', 'kw2'], 'gmd:topicCategory': ['natural']})
359+
360+
self.assertEqual(m.contacts()[0].name, 'John Smith')
361+
self.assertEqual(m.contacts()[0].organization, 'ACME')
362+
self.assertEqual(m.contacts()[0].position, 'staff')
363+
self.assertEqual(m.contacts()[0].voice, '1500 515 555')
364+
self.assertEqual(m.contacts()[0].fax, 'xx.xxx.xxx.xxxx')
365+
self.assertEqual(m.contacts()[0].email, 'foo@example.org')
366+
self.assertEqual(m.contacts()[0].role, 'pointOfContact')
367+
self.assertEqual(m.contacts()[0].addresses[0].type, 'postal')
368+
self.assertEqual(m.contacts()[0].addresses[0].address, '123 Main Street')
369+
self.assertEqual(m.contacts()[0].addresses[0].city, 'anycity')
370+
self.assertEqual(m.contacts()[0].addresses[0].administrativeArea, 'anyprovince')
371+
self.assertEqual(m.contacts()[0].addresses[0].postalCode, '90210')
372+
self.assertEqual(m.contacts()[0].addresses[0].country, 'Canada')
373+
self.assertEqual(m.links()[0].name, 'geonode:roads')
374+
self.assertEqual(m.links()[0].type, 'OGC:WMS')
375+
self.assertEqual(m.links()[0].description, 'my GeoNode road layer')
376+
self.assertEqual(m.links()[0].url, 'http://example.org/wms')
377+
self.assertEqual(m.links()[1].name, 'geonode:roads')
378+
self.assertEqual(m.links()[1].type, 'OGC:WFS')
379+
self.assertEqual(m.links()[1].description, 'my GeoNode road layer')
380+
self.assertEqual(m.links()[1].url, 'http://example.org/wfs')
381+
self.assertEqual(m.links()[2].name, 'roads')
382+
self.assertEqual(m.links()[2].type, 'WWW:LINK')
383+
self.assertEqual(m.links()[2].description, 'full dataset download')
384+
self.assertEqual(m.links()[2].url, 'http://example.org/roads.tgz')
385+
self.assertEqual(m.links()[2].format, 'ESRI Shapefile')
386+
self.assertEqual(m.links()[2].mimeType, 'application/gzip')
387+
self.assertEqual(m.links()[2].size, '283676')
388+
389+
def testStandard(self):
390+
m = self.createTestMetadata()
391+
self.checkExpectedMetadata(m)
392+
393+
def testSaveReadFromXml(self):
394+
"""
395+
Test saving and reading metadata from a XML.
396+
"""
397+
# save metadata to XML
398+
m = self.createTestMetadata()
399+
400+
doc = QDomDocument("testdoc")
401+
elem = doc.createElement("metadata")
402+
self.assertTrue(m.writeMetadataXml(elem, doc))
403+
404+
# read back from XML and check result
405+
m2 = QgsMetadataBase()
406+
m2.readMetadataXml(elem)
407+
self.checkExpectedMetadata(m2)
408+
409+
def testValidateNative(self): # spellok
410+
"""
411+
Test validating metadata against QGIS native schema
412+
"""
413+
m = self.createTestMetadata()
414+
v = QgsNativeMetadataValidator()
415+
416+
res, list = v.validate(m)
417+
self.assertTrue(res)
418+
self.assertFalse(list)
419+
420+
# corrupt metadata piece by piece...
421+
m = self.createTestMetadata()
422+
m.setIdentifier('')
423+
res, list = v.validate(m)
424+
self.assertFalse(res)
425+
self.assertEqual(list[0].section, 'identifier')
426+
427+
m = self.createTestMetadata()
428+
m.setLanguage('')
429+
res, list = v.validate(m)
430+
self.assertFalse(res)
431+
self.assertEqual(list[0].section, 'language')
432+
433+
m = self.createTestMetadata()
434+
m.setType('')
435+
res, list = v.validate(m)
436+
self.assertFalse(res)
437+
self.assertEqual(list[0].section, 'type')
438+
439+
m = self.createTestMetadata()
440+
m.setTitle('')
441+
res, list = v.validate(m)
442+
self.assertFalse(res)
443+
self.assertEqual(list[0].section, 'title')
444+
445+
m = self.createTestMetadata()
446+
m.setAbstract('')
447+
res, list = v.validate(m)
448+
self.assertFalse(res)
449+
self.assertEqual(list[0].section, 'abstract')
450+
451+
m = self.createTestMetadata()
452+
m.setContacts([])
453+
res, list = v.validate(m)
454+
self.assertFalse(res)
455+
self.assertEqual(list[0].section, 'contacts')
456+
457+
m = self.createTestMetadata()
458+
m.setLinks([])
459+
res, list = v.validate(m)
460+
self.assertFalse(res)
461+
self.assertEqual(list[0].section, 'links')
462+
463+
m = self.createTestMetadata()
464+
m.setKeywords({'': ['kw1', 'kw2']})
465+
res, list = v.validate(m)
466+
self.assertFalse(res)
467+
self.assertEqual(list[0].section, 'keywords')
468+
self.assertEqual(list[0].identifier, 0)
469+
470+
m = self.createTestMetadata()
471+
m.setKeywords({'AA': []})
472+
res, list = v.validate(m)
473+
self.assertFalse(res)
474+
self.assertEqual(list[0].section, 'keywords')
475+
self.assertEqual(list[0].identifier, 0)
476+
477+
m = self.createTestMetadata()
478+
c = m.contacts()[0]
479+
c.name = ''
480+
m.setContacts([c])
481+
res, list = v.validate(m)
482+
self.assertFalse(res)
483+
self.assertEqual(list[0].section, 'contacts')
484+
self.assertEqual(list[0].identifier, 0)
485+
486+
m = self.createTestMetadata()
487+
l = m.links()[0]
488+
l.name = ''
489+
m.setLinks([l])
490+
res, list = v.validate(m)
491+
self.assertFalse(res)
492+
self.assertEqual(list[0].section, 'links')
493+
self.assertEqual(list[0].identifier, 0)
494+
495+
m = self.createTestMetadata()
496+
l = m.links()[0]
497+
l.type = ''
498+
m.setLinks([l])
499+
res, list = v.validate(m)
500+
self.assertFalse(res)
501+
self.assertEqual(list[0].section, 'links')
502+
self.assertEqual(list[0].identifier, 0)
503+
504+
m = self.createTestMetadata()
505+
l = m.links()[0]
506+
l.url = ''
507+
m.setLinks([l])
508+
res, list = v.validate(m)
509+
self.assertFalse(res)
510+
self.assertEqual(list[0].section, 'links')
511+
self.assertEqual(list[0].identifier, 0)
512+
513+
514+
if __name__ == '__main__':
515+
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.