1+ __author__ = 'tonycastronova'
2+ __author__ = 'david valentin'
3+
4+ #import unittest
5+
6+ from odm2api .ODMconnection import dbconnection
7+ from odm2api .ODM2 .services .readService import ReadODM2
8+ from odm2api .ODM2 .services .createService import CreateODM2
9+ from odm2api .ODM2 .services .updateService import UpdateODM2
10+ from odm2api .ODM2 .services .deleteService import DeleteODM2
11+
12+ from tests import test_connection as testConnection
13+ import pytest
14+ xfail = pytest .mark .xfail
15+ skipif = xfail = pytest .mark .skipif
16+ #from pytest import raises use pytest.raises()
17+
18+
19+ dbs = testConnection .dbs_test
20+
21+ # @pytest.fixture(scope="session", params = dbs)
22+ # def setup(request):
23+ # return testConnection.Connection(request)
24+
25+ class odmConnection ():
26+ pass
27+ #class test_sqlite(unittest.TestCase):
28+ # class Testsqlite():
29+ @pytest .fixture (scope = "function" , params = dbs )
30+ #@classmethod
31+ def setup ( request ):
32+
33+ # build an empty database for testing
34+ # conn = dbconnection.createConnection('sqlite', ':memory:')
35+ db = request .param
36+ print ("dbtype" , db [0 ], db [1 ])
37+ session_factory = dbconnection .createConnection (db [1 ], db [2 ], db [3 ], db [4 ], db [5 ], echo = True )
38+ assert session_factory is not None , ("failed to create a session for " , db [0 ], db [1 ])
39+ assert session_factory .engine is not None , ("failed: session has no engine " , db [0 ], db [1 ])
40+ # dbconnection._setSchema(conn.engine)
41+ dbConn = odmConnection
42+ # build connectors for read, write, update, and delete operations
43+ dbConn .odmread = ReadODM2 (session_factory )
44+ dbConn .odmcreate = CreateODM2 (session_factory )
45+ dbConn .odmupdate = UpdateODM2 (session_factory )
46+ dbConn .odmdelete = DeleteODM2 (session_factory )
47+
48+ # initialize the in-memory database, loop through each command (skip first and last lines)
49+ #build = open('./tests/spatialite/build_empty.sqlite').read()
50+ if (db [2 ] == ':memory:' ):
51+ build = open ('./tests/schemas/sqlite/ODM2_for_SQLite.sql' ).read ()
52+ for line in build .split (';\n ' ):
53+ session_factory .getSession ().execute (line )
54+
55+ print 'database initialization completed successfully'
56+ return dbConn
57+
58+ def test_SessionNotFailed (setup ):
59+ # goal of this is to see that if we force errors like a null value, or duplicate that the session does not fail
60+
61+ # create some people
62+ setup .odmcreate .createPerson (firstName = "tony" ,
63+ lastName = 'castronova' ,
64+ middleName = 'michael' )
65+
66+ with pytest .raises (Exception ) as excinfo :
67+ # this one should fail due to a not null constraint
68+ setup .odmcreate .createPerson (firstName = None ,
69+ lastName = 'castronova' ,
70+ middleName = 'michael' )
71+
72+ assert 'People.PersonFirstName may not be NULL' in str (excinfo .value )
73+
74+ # now add again
75+ setup .odmcreate .createPerson (firstName = "tony" ,
76+ lastName = 'castronova' ,
77+ middleName = None )
78+
79+
80+ # with pytest.raises(Exception) as excinfo:
81+ # # duplicate
82+ # setup.odmcreate.createPerson(firstName="tony",
83+ # lastName='castronova',
84+ # middleName='michael')
85+ #
86+ # assert 'People.PersonFirstName may not be NULL' in str(excinfo.value)
87+
88+ setup .odmcreate .createPerson (firstName = "john" ,
89+ lastName = 'doe' )
90+
91+
92+ people = setup .odmread .getPeople ()
93+ assert len (people ) == 3 , "People should have been 3"
94+
95+ # @classmethod
96+ # def tearDownClass(self):
97+ # del self.odmread
98+ # del self.odmcreate
99+ # del self.odmupdate
100+ # del self.odmdelete
101+
102+ def test_createPerson (setup ):
103+
104+ # create some people
105+ setup .odmcreate .createPerson (firstName = "tony" ,
106+ lastName = 'castronova' ,
107+ middleName = 'michael' )
108+
109+ setup .odmcreate .createPerson (firstName = "tony" ,
110+ lastName = 'castronova' ,
111+ middleName = None )
112+ setup .odmcreate .createPerson (firstName = "john" ,
113+ lastName = 'doe' )
114+
115+ people = setup .odmread .getPeople ()
116+ assert len (people ) == 3 , "People should have been 3"
117+
118+ def test_personFail (setup ):
119+ with pytest .raises (Exception ) as excinfo :
120+ # this one should fail due to a not null constraint
121+ setup .odmcreate .createPerson (firstName = None ,
122+ lastName = 'castronova' ,
123+ middleName = 'michael' )
124+
125+ assert 'People.PersonFirstName may not be NULL' in str (excinfo .value )
126+
127+ def test_createVariable (setup ):
128+
129+ # create some variables
130+ setup .odmcreate .createVariable ( code = 'Phos_TOT' ,
131+ name = 'Phosphorus, total dissolved' ,
132+ vType = 'Hydrology' ,
133+ nodv = - 999 ,
134+ speciation = None ,
135+ definition = None )
136+ setup .odmcreate .createVariable ( code = 'Phos_TOT2' ,
137+ name = 'Phosphorus, total dissolved' ,
138+ vType = 'Hydrology' ,
139+ nodv = - 999 ,
140+ speciation = 'mg/L' ,
141+ definition = None )
142+ setup .odmcreate .createVariable ( code = 'Phos_TOT3' ,
143+ name = 'Phosphorus, total dissolved' ,
144+ vType = 'Hydrology' ,
145+ nodv = - 999 ,
146+ speciation = None ,
147+ definition = 'some definition' )
148+
149+ with pytest .raises (Exception ) as excinfo :
150+ # insert duplicate
151+ setup .odmcreate .createVariable (code = 'Phos_TOT' ,
152+ name = 'Phosphorus, total dissolved' ,
153+ vType = 'Hydrology' ,
154+ nodv = - 999 ,
155+ speciation = None ,
156+ definition = None )
157+
158+ assert 'VariableCode is not unique' in str (excinfo .value )
159+
160+ vars = setup .odmread .getVariables ()
161+
162+ assert len (vars ) == 3
163+
164+
165+
166+ def test_createMethod (setup ):
167+ setup .odmcreate .createMethod (code = 'mycode' ,
168+ name = 'my test method' ,
169+ vType = 'test method type' ,
170+ orgId = None ,
171+ link = None ,
172+ description = 'method description' )
173+ setup .odmcreate .createMethod (code = 'mycode2' ,
174+ name = 'my test method' ,
175+ vType = 'test method type' ,
176+ orgId = 1 ,
177+ link = None ,
178+ description = 'method description' )
179+ setup .odmcreate .createMethod (code = 'mycode3' ,
180+ name = 'my test method' ,
181+ vType = 'test method type' ,
182+ orgId = None ,
183+ link = None ,
184+ description = None )
185+ methods = setup .odmread .getMethods ()
186+
187+ assert len (methods ) == 3
188+
189+
190+ def test_ProcessingLevel (setup ):
191+ setup .odmcreate .createProcessingLevel (code = "testlevel" ,
192+ definition = "this is a test processing level" ,
193+ explanation = None )
194+ res = setup .odmread .getProcessingLevels ()
195+
196+ assert len (res ) == 1
197+
198+ @skipif (True , reason = "Needs data" )
199+ def test_createSamplingFeature (setup ):
200+
201+
202+ res = setup .odmread .getSamplingFeatures ()
203+
204+ assert len (res ) == 1
205+ @skipif (True , reason = "Needs data" )
206+ def test_createUnit (setup ):
207+
208+ res = setup .odmread .getUnits ()
209+
210+ assert len (res ) == 1
211+ @skipif (True , reason = "Needs data" )
212+ def test_createOrganization (setup ):
213+ res = setup .odmread .getOrganizations ()
214+
215+ assert len (res ) == 1
216+
217+
218+ @skipif (True , reason = "Needs data" )
219+ def test_createAffiliation (setup ):
220+ res = setup .odmread .getAffiliationsByPerson ()
221+
222+ assert len (res ) == 1
223+
224+ @skipif (True , reason = "Needs data" )
225+ def test_createDataset (setup ):
226+ res = setup .odmread .getDataSets ()
227+
228+ assert len (res ) == 1
229+ @skipif (True , reason = "Needs data" )
230+ def test_createDatasetResults (setup ):
231+ res = setup .odmread .getProcessingLevels ()
232+
233+ assert len (res ) == 1
234+ @skipif (True , reason = "Needs data" )
235+ def test_createAction (setup ):
236+ # todo: this function is missing
237+ # res = self.odmread.getActions()
238+
239+ assert 0 == 1
240+ @skipif (True , reason = "Needs data" )
241+ def test_createActionBy (setup ):
242+ # todo; this function is missing
243+ # res = self.odmread.getActionsBy()
244+
245+ assert 0 == 1
246+ @skipif (True , reason = "Needs data" )
247+ def test_createFeatureAction (setup ):
248+
249+ # todo: this function is missing
250+ # res = self.odmread.getFeatureActions()
251+
252+ assert 0 == 1
253+ @skipif (True , reason = "Needs data" )
254+ def test_createResult (setup ):
255+ res = setup .odmread .getResults ()
256+
257+ assert len (res ) == 1
258+ @skipif (True , reason = "Needs data" )
259+ def test_createTimeSeriesResult (setup ):
260+ res = setup .odmread .getTimeSeriesResults ()
261+
262+ assert len (res ) == 1
263+ @skipif (True , reason = "Needs data" )
264+ def test_createTimeSeriesResultValues (setup ):
265+ res = setup .odmread .getTimeSeriesResultValues ()
266+
267+ assert len (res ) == 1
268+ @skipif (True , reason = "Needs data" )
269+ def test_createSite (setup ):
270+ res = setup .odmread .getAllSites ()
271+
272+ assert len (res ) == 1
273+ @skipif (True , reason = "Needs data" )
274+ def test_createSpatialReference (setup ):
275+ res = setup .odmread .getSpatialReferenceByCode ()
276+
277+ assert len (res ) == 1
278+ @skipif (True , reason = "Needs data" )
279+ def test_createDeploymentAction (setup ):
280+ res = setup .odmread .getAllDeploymentAction ()
281+
282+ assert len (res ) == 1
283+
284+ def test_createModel (setup ):
285+
286+ # create model (expected: record inserted)
287+ setup .odmcreate .createModel (code = 'model' ,
288+ name = 'mymodel' ,
289+ description = 'my test model' )
290+
291+ # create with no description (expected: record inserted)
292+ setup .odmcreate .createModel (code = 'model2' ,
293+ name = 'mymodel' ,
294+ description = None )
295+
296+
297+ res = setup .odmread .getAllModels ()
298+
299+ assert len (res ) == 2
300+
301+ res = setup .odmread .getModelByCode ('model' )
302+ assert res is not None
303+ assert res .ModelCode == 'model'
304+
305+ with pytest .raises (Exception ) as excinfo :
306+ # create model with duplicate code (expected: fail to insert record)
307+ setup .odmcreate .createModel (code = 'model' ,
308+ name = 'mymodel2' ,
309+ description = 'my test model2' )
310+ assert 'ModelCode is not unique' in str (excinfo .value )
311+
312+
313+ def test_createRelatedModel (setup ):
314+ # create a relationship type
315+ setup .odmcreate .getSession ().execute (
316+ "insert into cv_relationshiptype values ('coupled', 'coupled model', 'models that have been coupled together', 'modeling', NULL)" )
317+ # create model (expected: record inserted)
318+ m1 = setup .odmcreate .createModel (code = 'model' ,
319+ name = 'mymodel' ,
320+ description = 'my test model' )
321+ # create model (expected: record inserted)
322+ m2 = setup .odmcreate .createModel (code = 'model2' ,
323+ name = 'mymodel2' ,
324+ description = 'my test model2' )
325+
326+ # create related records
327+ setup .odmcreate .createRelatedModel (modelid = m1 .ModelID ,
328+ relatedModelID = m2 .ModelID ,
329+ relationshipType = 'coupled' )
330+
331+ m1r = setup .odmread .getModelByCode ('model' )
332+ assert m1r is not None
333+ assert m1r .ModelCode == 'model'
334+
335+ m2r = setup .odmread .getModelByCode ('model2' )
336+ assert m2r is not None
337+ assert m2r .ModelCode == 'model2'
338+
339+ m1rel = setup .odmread .getRelatedModelsByCode ('model' )
340+ assert len (m1rel ) == 1
341+
342+ m2rel = setup .odmread .getRelatedModelsByCode ('model2' )
343+ assert len (m2rel ) == 0
344+
345+ @skipif (True , reason = "Needs data" )
346+ def test_createSimulation (setup ):
347+ res = setup .odmread .getAllSimulations ()
348+
349+ assert len (res ) == 1
0 commit comments