Skip to content

Instantly share code, notes, and snippets.

@durdn
Created June 7, 2010 14:43
Show Gist options
  • Save durdn/428745 to your computer and use it in GitHub Desktop.
Save durdn/428745 to your computer and use it in GitHub Desktop.
tests.py
from StringIO import StringIO
from datetime import datetime
from django.test import TestCase
import settings
from tms.parser import TMSParser, TMSAuthorParser
from tms.query import QueryProcessor
from collectie.collections.models import TMSObject
from IPython.Shell import IPShellEmbed
ipshell = IPShellEmbed()
class TestTMSParser(TestCase):
def setUp(self):
self.p = TMSParser(disable_validation = True)
def test_validation(self):
sample_response = file('apps/tms/samples/coco-single-2.xml')
self.assertTrue(self.p.validate(sample_response))
def test_parse_records(self):
sample_response = file('apps/tms/samples/coco-single-1.xml')
records = self.p.parse(sample_response)
r = records[0]
self.assertEqual(u'99 (KN&V)',r.identifier)
self.assertEqual('1704 - 1709',r.temporal['nl'])
self.assertEqual('Kunstnijverheid en vormgeving',r.departement)
self.assertEqual([u'Johann Simon Rothaer'],r.creator)
self.assertEqual(u'99 (KN&V)_1.JPG',r.primary_image)
self.assertEqual([u'99 (KN&V)_2.JPG'],r.image[0])
self.assertEqual('glas, radgravure,' ,r.resources[:17])
self.assertEqual('Schenking /' ,r.credits[:11])
self.assertEqual('Zaal 44' ,r.location)
def test_toren_van_babel(self):
sample_response = file('apps/tms/samples/toren-van-babel.xml')
records = self.p.parse(sample_response)
r = records[0]
self.assertEqual(u'2443 (OK)',r.identifier)
self.assertEqual('circa 1565',r.temporal['nl'])
self.assertEqual(u'De toren van Babel',r.title['nl'])
self.assertEqual(u'The tower of Babel',r.title['en'])
self.assertEqual('Oude Kunst',r.departement)
self.assertEqual([u'Pieter Bruegel de Oude'],r.creator)
self.assertEqual(u'0017_0023.jpg',r.primary_image)
self.assertEqual('olieverf op panee',r.resources[:17])
self.assertEqual('Verworven m' ,r.credits[:11])
self.assertEqual('Zaal 06' ,r.location)
self.assertEqual('2443 (OK)_2.jpg',r.image[1][0])
self.assertEqual('Detail',r.image[1][1]['nl'])
self.assertEqual('2443 (OK)_E3.jpg',r.image[-1][0])
self.assertEqual('Closeup van de Toren van Babel in de huiskamer van Van Beuningen',r.image[-1][1]['nl'])
self.assertEqual('http://62.221.199.226/BoijmansAudioVideo/EN\\5g.mp3',r.audio[-1][0])
self.assertEqual('D.G. Van Beuningen',r.audio[-1][1]['en'])
self.assertEqual(['74,6','59,9'],r.dimensions)
self.assertEqual('schilderij',r.objectname['nl'])
def test_background(self):
sample_response = file('apps/tms/samples/background.xml')
records = self.p.parse(sample_response)
r = records[0]
self.assertEqual(u'3200 (OK)',r.identifier)
self.assertEqual('Het 1605',r.background['nl'][:8])
self.assertEqual('The pain',r.background['en'][:8])
self.assertEqual('schilderij',r.objectname['nl'])
def test_parse_records_2(self):
sample_response = file('apps/tms/samples/coco-single-2.xml')
records = self.p.parse(sample_response)
r = records[0]
self.assertEqual(u'2515 (OK)',r.identifier)
self.assertEqual('1633 - 1635',r.temporal['nl'])
self.assertEqual(u'The martyrdom of Saint Livinus',r.title['2'])
self.assertEqual(u'De marteling van de Heilige Livinus',r.title['1'])
self.assertEqual('Dit is een episode',r.description['nl'][:18])
self.assertEqual('This is an episode',r.description['en'][:18])
self.assertEqual('Oude Kunst',r.departement)
self.assertEqual([u'Peter Paul Rubens'],r.creator)
self.assertEqual(u'2515 cd OK.jpg',r.primary_image)
self.assertEqual('olieverf op panee',r.resources[:17])
self.assertEqual('Verworven m' ,r.credits[:11])
self.assertEqual('Zaal 13' ,r.location)
self.assertEqual(4 ,len(r.link))
self.assertEqual('www.rubensonline.be/showDetail.asp?artworkID=100659]' ,r.link[0])
def test_parse_multiple_records(self):
sample_response = file('apps/tms/samples/coco-1-20f.xml')
records = self.p.parse(sample_response)
self.assertEqual(20,len(records))
r = records[1]
self.assertEqual('1633 - 1635',r.temporal['nl'])
self.assertEqual(u'The martyrdom of Saint Livinus',r.title['2'])
self.assertEqual(u'De marteling van de Heilige Livinus',r.title['1'])
self.assertEqual('Dit is een episode',r.description['nl'][:18])
self.assertEqual('This is an episode',r.description['en'][:18])
self.assertEqual('Oude Kunst',r.departement)
self.assertEqual([u'Peter Paul Rubens'],r.creator)
self.assertEqual(u'2515 cd OK.jpg',r.primary_image)
self.assertEqual('olieverf op panee',r.resources[:17])
self.assertEqual('Verworven m' ,r.credits[:11])
self.assertEqual('Zaal 13' ,r.location)
self.assertEqual(4 ,len(r.link))
self.assertEqual('www.rubensonline.be/showDetail.asp?artworkID=100659]' ,r.link[0])
class TestTMSAuthorParser(TestCase):
def setUp(self):
self.p = TMSAuthorParser(disable_validation = True)
def test_author(self):
sample_response = file('apps/tms/samples/author1.xml')
authors = self.p.parse(sample_response)
a = authors[0]
self.assertEqual(u'2616',a.ConstituentID)
self.assertEqual(u'C2616',a.ccidentifier)
self.assertEqual(u'Abraham van Beijeren',a.DisplayName)
self.assertEqual(u'1620',a.BeginDate)
self.assertEqual(u'1690',a.EndDate)
self.assertEqual(u'Abraham',a.FirstName)
self.assertEqual(u'Beijeren',a.LastName)
self.assertEqual(u'Den Haag 1620/1621 - Overschie 1690',a.DisplayDate)
self.assertEqual(u"Abraham van Beijeren's name appeared in 1816",a.biografie['en'][:44])
self.assertEqual(u'Abraham van Beijerens naam dook in 1816 op a',a.biografie['nl'][:44])
class TestAuthorManager(TestCase):
def test_author_update(self):
tms_object = TMSObject.records.find(identifier = 'St 90')
tms_object[0].update_author(lang='en')
self.assertEqual('Abraham van Beijeren', tms_object[0].author.DisplayName)
self.assertEqual('Abraham van Beijeren\'s name appeared in 1816', tms_object[0].author.biografie[:44])
def test_simple_query(self):
authors = TMSObject.authors.find('Abraham van Beijeren')
self.failUnless(authors[0] != None)
self.assertEqual('C2616', authors[0].tms_id)
self.assertEqual('Abraham van Beijeren', authors[0].author.DisplayName)
class TestManager(TestCase):
def test_simple_query(self):
tms_object = TMSObject.records.filter(id = '2515 (OK)', test_response = 'apps/tms/samples/coco-single-2.xml')[0]
self.failUnless(tms_object != None)
self.assertEqual('2515 (OK)', tms_object.tms_id)
self.assertEqual(u'Peter Paul Rubens', tms_object.record.creator[0])
def test_query_with_language(self):
tms_object = TMSObject.records.filter(id = '2515 (OK)', test_response = 'apps/tms/samples/coco-single-2.xml', lang='en')[0]
self.failUnless(tms_object != None)
self.assertEqual('2515 (OK)', tms_object.tms_id)
self.assertEqual(u'De marteling van de Heilige Livinus', tms_object.record.title)
def test_query_persists_tms_object(self):
tms_object = TMSObject.records.filter(id = '2515 (OK)', test_response = 'apps/tms/samples/coco-single-2.xml', lang='en')[0]
self.failUnless(tms_object != None)
try:
persisted_to = TMSObject.objects.get(tms_id = '2515 (OK)')
except TMSObject.DoesNotExist:
self.fail('tms object has not been persisted')
self.assertEqual('2515 (OK)', persisted_to.tms_id)
def test_search_page(self):
tms_objects = TMSObject.records.filter(query = 'fab:objectname=schilderij', start=1, end=10, lang='en')
self.assertEqual(10, len(tms_objects))
o = tms_objects[2]
self.assertEqual('1990 (OK)',o.record.identifier)
class TestQueryProcessor(TestCase):
def setUp(self):
self.p = TMSParser(disable_validation = True)
if settings.INTEGRATION_TEST:
self.run=True
else:
self.run=False
def test_simple_query_process(self):
if not self.run: return
qp = QueryProcessor()
# r.identifier
response = qp.sru(query='dc.identifier = "id:2515 (OK)"')
self.assertTrue(self.p.validate(StringIO(response)))
# r.title
response = qp.sru(query='dc.title any "search string"')
pa = TMSParser()
self.assertTrue(self.p.validate(StringIO(response)))
# r.creator
response = qp.sru(query='dc.creator any "search string"')
pa = TMSParser()
self.assertTrue(self.p.validate(StringIO(response)))
def test_search_page_queries(self):
qp = QueryProcessor()
#title
response = qp.cit(query = 'dc:title=The martyrdom')
r = self.p.parse(StringIO(response))[0]
self.assertEqual('2515 (OK)',r.identifier)
#creator
response = qp.cit(query = 'fab:creator=Rubens',start=1,end=10)
rs = self.p.parse(StringIO(response))
r = rs[0]
self.assertEqual('2515 (OK)',r.identifier)
#description
response = qp.cit(query = 'dc:description=missionary')
rs = self.p.parse(StringIO(response))
r = rs[0]
self.assertEqual('2515 (OK)',r.identifier)
#temporal
response = qp.cit(query = 'fab:temporal=1633')
rs = self.p.parse(StringIO(response))
r = rs[0]
self.assertEqual('2515 (OK)',r.identifier)
#material
response = qp.cit(query = 'fab:resources=glas')
rs = self.p.parse(StringIO(response))
r = rs[0]
self.assertEqual('99 (KN&V)',r.identifier)
#objectname
response = qp.cit(query = 'fab:objectname=schilderij',start=1,end=10)
rs = self.p.parse(StringIO(response))
r = rs[1]
self.assertEqual('1982 (OK)',r.identifier)
def test_find(self):
if not self.run: return
qp = QueryProcessor()
response = qp.find(identifier = 'id:2515 (OK)')
self.assertTrue(self.p.validate(StringIO(response)))
try:
response = qp.find(identifier = 'id:2515 (OK)', title = 'title')
self.fail('an exception shouldve been thrown')
except NotImplementedError:
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment