Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
cahytinne committed Jul 30, 2015
1 parent 4e74327 commit fbfb5ef
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 3 deletions.
9 changes: 6 additions & 3 deletions atramhasis/scripts/import_rdf.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ def main(argv=sys.argv):
###
parser = argparse.ArgumentParser(
description='Import RDF file to a database',
usage='%s [--from path_rdf_file] [--to conn_string]\n '
'(example: "%s --from atramhasis/scripts/my_rdf.rdf --to sqlite:///atramhasis.sqlite")' % (cmd, cmd)
usage='{0} [--from path_rdf_file] [--to conn_string]\n '
'(example: "{1} --from atramhasis/scripts/my_rdf.rdf --to sqlite:///atramhasis.sqlite")'.format(cmd, cmd)
)
parser.add_argument('--from',
dest='rdf_file',
Expand All @@ -59,7 +59,10 @@ def main(argv=sys.argv):
default='sqlite:///atramhasis.sqlite'
)
args = parser.parse_args()
if not os.path.exists(args.rdf_file) or not validate_connection_string(args.to):
if not os.path.exists(args.rdf_file):
print('The input file {0} does not exists'.format(args.rdf_file))
sys.exit(1)
elif not validate_connection_string(args.to):
sys.exit(1)

# make session to output database
Expand Down
33 changes: 33 additions & 0 deletions tests/data/trees.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:skos="http://www.w3.org/2004/02/skos/core#"
>
<rdf:Description rdf:about="http://id.trees.org/1">
<skos:inScheme rdf:resource="urn:x-skosprovider:tree"/>
<dcterms:identifier>1</dcterms:identifier>
<skos:prefLabel xml:lang="en">The Larch</skos:prefLabel>
<rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/>
<skos:definition xml:lang="en">A type of tree.</skos:definition>
<skos:prefLabel xml:lang="nl">De Lariks</skos:prefLabel>
</rdf:Description>
<rdf:Description rdf:about="http://id.trees.org/3">
<dcterms:identifier rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">3</dcterms:identifier>
<skos:member rdf:resource="http://id.trees.org/2"/>
<skos:prefLabel xml:lang="nl">Bomen per soort</skos:prefLabel>
<rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Collection"/>
<skos:inScheme rdf:resource="urn:x-skosprovider:tree"/>
<skos:member rdf:resource="http://id.trees.org/1"/>
<skos:prefLabel xml:lang="en">Trees by species</skos:prefLabel>
</rdf:Description>
<rdf:Description rdf:about="http://id.trees.org/2">
<skos:altLabel xml:lang="nl">De Paardekastanje</skos:altLabel>
<skos:inScheme rdf:resource="urn:x-skosprovider:tree"/>
<skos:altLabel xml:lang="fr">la châtaigne</skos:altLabel>
<skos:prefLabel xml:lang="en">The Chestnut</skos:prefLabel>
<skos:definition xml:lang="en">A different type of tree.</skos:definition>
<rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/>
<dcterms:identifier>2</dcterms:identifier>
</rdf:Description>
</rdf:RDF>
65 changes: 65 additions & 0 deletions tests/test_import_scripts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
import os
import sys
from pyramid.paster import get_appsettings
import unittest

from sqlalchemy import engine_from_config
from sqlalchemy.orm import sessionmaker
from zope.sqlalchemy import ZopeTransactionExtension

from skosprovider_sqlalchemy.models import Base
from skosprovider_sqlalchemy.providers import SQLAlchemyProvider
from skosprovider.utils import dict_dumper

from atramhasis.scripts import import_rdf

here = os.path.dirname(__file__)
settings = get_appsettings(os.path.join(here, '../', 'tests/conf_test.ini'))


class ImportTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
settings['sqlalchemy.url'] = 'sqlite:///%s/dbtest.sqlite' % here
cls.engine = engine_from_config(settings, prefix='sqlalchemy.')
Base.metadata.drop_all(cls.engine)
Base.metadata.create_all(cls.engine)

def setUp(self):
Base.metadata.drop_all(self.engine)
Base.metadata.create_all(self.engine)
Base.metadata.bind = self.engine
self.session_maker = sessionmaker(
bind=self.engine,
extension=ZopeTransactionExtension()
)

def tearDown(self):
Base.metadata.drop_all(self.engine)

def test_import_rdf(self):
sys.argv = ['import_rdf', '--from', 'data/trees.xml', '--to', 'sqlite:///dbtest.sqlite']
import_rdf.main(sys.argv)

sql_prov = SQLAlchemyProvider({'id': 'TREES', 'conceptscheme_id': 1}, self.session_maker)
dump = dict_dumper(sql_prov)

self.assertEqual(len(dump), 3)
obj_1 = [item for item in dump if item['uri'] == 'http://id.trees.org/2'][0]
self.assertEqual(obj_1['broader'], [])
self.assertEqual(obj_1['id'], 2)
self.assertEqual(obj_1['member_of'], [3])
self.assertEqual(obj_1['narrower'], [])
label_en = [label for label in obj_1['labels'] if label['language'] == 'en'][0]
self.assertDictEqual(label_en, {'label': 'The Chestnut', 'language': 'en', 'type': 'prefLabel'})
label_nl = [label for label in obj_1['labels'] if label['language'] == 'nl'][0]
self.assertDictEqual(label_nl, {'label': 'De Paardekastanje', 'language': 'nl', 'type': 'altLabel'})
label_fr = [label for label in obj_1['labels'] if label['language'] == 'fr'][0]
self.assertDictEqual(label_fr, {'label': u'la châtaigne', 'language': 'fr', 'type': 'altLabel'})
self.assertDictEqual(obj_1['notes'][0],
{'language': 'en', 'note': 'A different type of tree.', 'type': 'definition'})




0 comments on commit fbfb5ef

Please sign in to comment.