Skip to content

Commit

Permalink
unittest voor json
Browse files Browse the repository at this point in the history
  • Loading branch information
RFWiegerinck committed Oct 21, 2016
1 parent 2edaa9a commit 49cd52f
Showing 1 changed file with 33 additions and 37 deletions.
70 changes: 33 additions & 37 deletions tests/unit_tests_rob/test07r_jsonb.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,15 @@

from psycopg2.extras import DictCursor
from sqlalchemy import create_engine, text

from pyelt.pipeline import Pipeline
from tests.unit_tests_rob.global_test_suite import test_system_config, get_global_test_pipeline, init_db
from tests.unit_tests_rob.test_mappings import init_source_to_sor_mappings, init_sor_to_dv_mappings
from main import get_root_path
from tests.unit_tests_rob import test_domain
from tests.unit_tests_rob.test_configs import test_config, jsontest_config


class TestCase_RunProces(unittest.TestCase):
print('init_db:\n')
# init_db()
# uitgeschreven eigen versie voor init_db(), vanwege andere settings vergeleken met overige rob_unittests
engine = create_engine(test_config['conn_dwh'])

sql = """
Expand All @@ -22,13 +19,11 @@ class TestCase_RunProces(unittest.TestCase):
DROP SCHEMA IF EXISTS rdv CASCADE;
DROP SCHEMA IF EXISTS dv CASCADE;
DROP SCHEMA IF EXISTS sys CASCADE;
"""

query = text(sql)
engine.execute(query)


def setUp(self):
print("setup:")

Expand Down Expand Up @@ -59,22 +54,20 @@ def test01b_pipeline_run(self):
self.pipeline.run()
self.pipeline.run()


""" meerdere malen de pipeline gerund, want het leek erop dat de jsonb velden "extra" en "extra" random
gevuld werden met de twee gedefineerde jsonb objecten, dat wordt opgemerkt door vaker te runnen"""

test_row_count(self, 'sor_test.patient_hstage', 1)
test_row_count(self, 'dv.patient_hub', 1)
test_row_count(self, 'dv.patient_sat', 1)


def test02_dv_update(self):

print("test_run2:\n")

path = jsontest_config['data_path']
self.pipe.mappings[0].file_name = path + 'test2.csv' # deceased boolean van True naar False en bijhorende datum verwijderd

# deceased boolean van True naar False en bijhorende datum verwijderd:
self.pipe.mappings[0].file_name = path + 'test2.csv'
self.pipeline.run()

test_row_count(self, 'sor_test.patient_hstage', 2)
Expand All @@ -94,9 +87,12 @@ def test02b_dv_update(self):
test_row_count(self, 'dv.patient_hub', 1)
test_row_count(self, 'dv.patient_sat', 3)

result = get_field_value_from_table("""extra->'extra::jsonb' ->> 'contactpersoon'""", 'dwh2a.dv.patient_sat', """_runid = 0.08""")
result = get_field_value_from_table("""extra->'extra::jsonb' ->> 'contactpersoon'""", 'dwh2a.dv.patient_sat',
"""_runid = 0.08""")

result = result[0][0]
self.assertEqual(result,'Janny Jansen','ik verwachtte dat dit JSONB object onderdeel aangepast zou worden naar Janny Jansen')
self.assertEqual(result, 'Janny Jansen',
'ik verwachtte dat dit JSONB object onderdeel aangepast zou worden naar Janny Jansen')

def test03_order_changed(self):
""" de volgorde van de key in een json-object is veranderd (nu eerst achternaam daarna pas voornaam)"""
Expand All @@ -108,69 +104,70 @@ def test03_order_changed(self):

self.pipeline.run()

test_row_count(self, 'sor_test.patient_hstage',4)
test_row_count(self, 'sor_test.patient_hstage', 4)
test_row_count(self, 'dv.patient_hub', 1)
test_row_count(self, 'dv.patient_sat', 3)

result = get_field_value_from_table("""jsonb_object_keys(extra->'extra::jsonb') """, 'dwh2a.dv.patient_sat', """_runid = 0.08 limit 1""")
result = get_field_value_from_table("""jsonb_object_keys(extra->'extra::jsonb') """, 'dwh2a.dv.patient_sat',
"""_runid = 0.08 limit 1""")
result = result[0][0]
self.assertEqual(result,'voornaam','ik verwachtte dat de eerste key "voornaam" zou zijn')
self.assertEqual(result, 'voornaam', 'ik verwachtte dat de eerste key "voornaam" zou zijn')

def test04_extra_pair(self):
""" toevoegen van extra key/value pair; """

print("test_run4:\n")

path = jsontest_config['data_path']
self.pipe.mappings[0].file_name = path + 'test5.csv' # JSONB extra key/value pair; kennelijk wordt een nieuw pair voor de reeds aanwezige pairs geplaatst.

# JSONB extra key/value pair; kennelijk wordt 'n nieuw pair in postgres voor de reeds aanwezige pairs geplaatst:
self.pipe.mappings[0].file_name = path + 'test5.csv'
self.pipeline.run()

test_row_count(self, 'sor_test.patient_hstage',5)
test_row_count(self, 'sor_test.patient_hstage', 5)
test_row_count(self, 'dv.patient_hub', 1)
test_row_count(self, 'dv.patient_sat', 4)

result = get_field_value_from_table("""jsonb_object_keys(extra->'extra::jsonb') """, 'dwh2a.dv.patient_sat', """_runid = 0.10 """)
result = len(result) # het aantal keys in de dictionary
result = get_field_value_from_table("""jsonb_object_keys(extra->'extra::jsonb') """, 'dwh2a.dv.patient_sat',
"""_runid = 0.10 """)
result = len(result) # het aantal keys in de dictionary

self.assertEqual(result,4,'ik verwachtte dat er 4 keys zouden worden gevonden')
self.assertEqual(result, 4, 'ik verwachtte dat er 4 keys zouden worden gevonden')

def test05_remove_pair(self):
""" verwijderen van ('origineel') key/value pair; """

print("test_run5:\n")

path = jsontest_config['data_path']
self.pipe.mappings[0].file_name = path + 'test6.csv' # JSONB extra key/value pair; kennelijk wordt een nieuw pair voor de reeds aanwezige pairs geplaatst.
self.pipe.mappings[0].file_name = path + 'test6.csv'

self.pipeline.run()

test_row_count(self, 'sor_test.patient_hstage',6)
test_row_count(self, 'sor_test.patient_hstage', 6)
test_row_count(self, 'dv.patient_hub', 1)
test_row_count(self, 'dv.patient_sat', 5)

result = get_field_value_from_table("""jsonb_object_keys(extra->'extra::jsonb') """, 'dwh2a.dv.patient_sat', """_runid = 0.11 """)
result = len(result) # het aantal keys in de dictionary
result = get_field_value_from_table("""jsonb_object_keys(extra->'extra::jsonb') """, 'dwh2a.dv.patient_sat',
"""_runid = 0.11 """)
result = len(result) # het aantal keys in de dictionary
print(result)
self.assertEqual(result,3,'ik verwachtte dat er 3 keys zouden worden gevonden')





self.assertEqual(result, 3, 'ik verwachtte dat er 3 keys zouden worden gevonden')

############################################################


def test_row_count(unittest, table_name, count):
test_sql = "SELECT * FROM " + table_name
result = execute_sql(test_sql)
unittest.assertEqual(len(result), count, table_name)


def get_field_value_from_table(fieldname, table_name, sql_condition):
sql = """select {0} from {1} where {2}""".format(fieldname, table_name, sql_condition)
result = execute_sql(sql)
return result


def get_field_value_from_dv_table(fieldname, entity_name, sat_name, bk, sql_conditions_list):
if sat_name != '':
sat_name2 = '_{}'.format(sat_name)
Expand All @@ -187,14 +184,16 @@ def get_field_value_from_dv_table(fieldname, entity_name, sat_name, bk, sql_cond
sql = """select s.{1}
from {0}{2}_sat{3} s
inner join {0}{2}_hub h on s._id = h._id
where h.bk = '{4}'{5}""".format('pyelt_unittests.dv.', fieldname, entity_name, sat_name2, bk, sql_condition)
where h.bk = '{4}'{5}""".format('pyelt_unittests.dv.', fieldname, entity_name, sat_name2, bk, \
sql_condition)
result = execute_sql(sql)

return result


def execute_sql(sql):
# conn = psycopg2.connect("""host='localhost' dbname='pyelt_unittests' user='postgres' password='{}'""".format(get_your_password()))
engine = create_engine(test_config['conn_dwh']) # je hebt hier een andere config nodig dan die in de global_test_suite staat!
# je hebt hier een andere config nodig dan die in de global_test_suite staat!:
engine = create_engine(test_config['conn_dwh'])
conn = engine.raw_connection()
cursor = conn.cursor(cursor_factory=DictCursor)
cursor.execute(sql)
Expand All @@ -205,8 +204,5 @@ def execute_sql(sql):
return result





if __name__ == '__main__':
unittest.main()

0 comments on commit 49cd52f

Please sign in to comment.