def test_ccode_with_unicode(): domein = 'test' tests = [(u'key1',u'leftcode'), (u'key2',u'~!@#$%^&*()_+}{:";][=-/.,<>?`'), (u'key3',u'?érýúíó?ás??lzcn?'), (u'key4',u'?ë?ÿüïöä´¨???è?ùì'), (u'key5',u'òà???UIÕÃ?Ñ`~'), (u'key6',u"a\xac\u1234\u20ac\U00008000"), (u'key7',u"abc_\u03a0\u03a3\u03a9.txt"), (u'key8',u"?ÉRÝÚÍÓ?ÁS??LZCN??"), (u'key9',u"Ë?¨YܨIÏÏÖÄ???È?ÙÌÒ`À`Z?"), ] try: #clean before test botslib.changeq(u'''DELETE FROM ccode ''') botslib.changeq(u'''DELETE FROM ccodetrigger''') except: print 'Error while deleting: ',botslib.txtexc() raise try: botslib.changeq(u'''INSERT INTO ccodetrigger (ccodeid) VALUES (%(ccodeid)s)''', {'ccodeid':domein}) for key,value in tests: botslib.changeq(u'''INSERT INTO ccode (ccodeid_id,leftcode,rightcode,attr1,attr2,attr3,attr4,attr5,attr6,attr7,attr8) VALUES (%(ccodeid)s,%(leftcode)s,%(rightcode)s,'1','1','1','1','1','1','1','1')''', {'ccodeid':domein,'leftcode':key,'rightcode':value}) except: print 'Error while updating: ',botslib.txtexc() raise try: for key,value in tests: print 'key',key for row in botslib.query(u'''SELECT rightcode FROM ccode WHERE ccodeid_id = %(ccodeid)s AND leftcode = %(leftcode)s''', {'ccodeid':domein,'leftcode':key}): print ' ',key, type(row['rightcode']),type(value) if row['rightcode'] != value: print 'failure in test "%s": result "%s" is not equal to "%s"'%(key,row['rightcode'],value) else: print ' OK' break; else: print '??can not find testentry %s %s in db'%(key,value) except: print 'Error while quering db: ',botslib.txtexc() raise
def testroutetestmdn(self): lijst = utilsunit.getdir(os.path.join(botssys,'outfile/confirm/mdn/*')) self.failUnless(len(lijst)==0) for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', {'status':210,'statust':DONE,'idroute':'testmdn','confirmtype':'send-email-MDN','confirmasked':True}): self.failUnless(row[1]) self.failUnless(row[2]!=0) break else: self.failUnless(1==0) for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', {'status':510,'statust':DONE,'idroute':'testmdn','confirmtype':'ask-email-MDN','confirmasked':True}): self.failUnless(row[1]) self.failUnless(row[2]!=0) break else: self.failUnless(1==0)
def testroutetestcontrl(self): ''' test997 1: pickup ORDERS*1 ask confirm ORDERS*2 gen & send ORDERS*2 send confirm ORDERS*1 gen & send CONTRL*1 test997 2: receive CONTRL*1 confirm ORDERS*1 gen xml*1 receive ORDERS*2 ask confirm ORDERS*3 gen ORDERS*3 send confirm ORDERS*2 gen & send CONTRL*2 test997 3: receive CONTRL*2 confirm ORDERS*2 gen & send xml (to trash) send ORDERS*3 (to trash) send xml (to trash) ''' lijst = utilsunit.getdir(os.path.join(botssys, 'outfile/confirm/edifact/*')) self.failUnless(len(lijst) == 0) lijst = utilsunit.getdir(os.path.join(botssys, 'outfile/confirm/trash/*')) self.failUnless(len(lijst) == 6) counter = 0 for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', {'status': 400, 'statust': DONE, 'idroute': 'testcontrl', 'confirmtype': 'ask-edifact-CONTRL', 'confirmasked': True}): counter += 1 if counter == 1: self.failUnless(not row[str('confirmed')]) self.failUnless(row[str('confirmidta')] == 0) elif counter == 2: self.failUnless(row[str('confirmed')]) self.failUnless(row[str('confirmidta')] != 0) else: break else: self.failUnless(counter != 0) for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', {'status': 310, 'statust': DONE, 'idroute': 'testcontrl', 'confirmtype': 'send-edifact-CONTRL', 'confirmasked': True}): counter += 1 if counter <= 2: self.failUnless(row[str('confirmed')]) self.failUnless(row[str('confirmidta')] != 0) else: break else: self.failUnless(counter != 0)
def testroutetestcontrl(self): ''' test997 1: pickup ORDERS*1 ask confirm ORDERS*2 gen & send ORDERS*2 send confirm ORDERS*1 gen & send CONTRL*1 test997 2: receive CONTRL*1 confirm ORDERS*1 gen xml*1 receive ORDERS*2 ask confirm ORDERS*3 gen ORDERS*3 send confirm ORDERS*2 gen & send CONTRL*2 test997 3: receive CONTRL*2 confirm ORDERS*2 gen & send xml (to trash) send ORDERS*3 (to trash) send xml (to trash) ''' lijst = utilsunit.getdir(os.path.join(botssys,'outfile/confirm/edifact/*')) self.failUnless(len(lijst)==0) lijst = utilsunit.getdir(os.path.join(botssys,'outfile/confirm/trash/*')) self.failUnless(len(lijst)==6) counter=0 for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', {'status':400,'statust':DONE,'idroute':'testcontrl','confirmtype':'ask-edifact-CONTRL','confirmasked':True}): counter += 1 if counter == 1: self.failUnless(not row[str('confirmed')]) self.failUnless(row[str('confirmidta')]==0) elif counter == 2: self.failUnless(row[str('confirmed')]) self.failUnless(row[str('confirmidta')]!=0) else: break else: self.failUnless(counter!=0) for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', {'status':310,'statust':DONE,'idroute':'testcontrl','confirmtype':'send-edifact-CONTRL','confirmasked':True}): counter += 1 if counter <= 2: self.failUnless(row[str('confirmed')]) self.failUnless(row[str('confirmidta')]!=0) else: break else: self.failUnless(counter!=0)
def testroutetest997(self): ''' test997 1: pickup 850*1 ask confirm 850*2 gen & send 850*2 send confirm 850*1 gen & send 997*1 test997 2: receive 997*1 confirm 850*1 gen xml*1 receive 850*2 ask confirm 850*3 gen 850*3 send confirm 850*2 gen & send 997*2 test997 3: receive 997*2 confirm 850*2 gen & send xml (to trash) send 850*3 (to trash) send xml (to trash) ''' lijst = utilsunit.getdir(os.path.join(botssys,'outfile/confirm/x12/*')) self.failUnless(len(lijst)==0) lijst = utilsunit.getdir(os.path.join(botssys,'outfile/confirm/trash/*')) self.failUnless(len(lijst)==6) counter=0 for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', {'status':400,'statust':DONE,'idroute':'test997','confirmtype':'ask-x12-997','confirmasked':True}): counter += 1 if counter == 1: self.failUnless(not row[1]) self.failUnless(row[2]==0) elif counter == 2: self.failUnless(row[1]) self.failUnless(row[2]!=0) else: break else: self.failUnless(counter!=0) for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', {'status':310,'statust':DONE,'idroute':'test997','confirmtype':'send-x12-997','confirmasked':True}): counter += 1 if counter <= 2: self.failUnless(row[1]) self.failUnless(row[2]!=0) else: break else: self.failUnless(counter!=0)
def testroutetestmdn(self): lijst = utilsunit.getdir(os.path.join(botssys, "outfile/confirm/mdn/*")) self.failUnless(len(lijst) == 0) nr_rows = 0 for row in botslib.query( """SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s AND frommail != '' ORDER BY idta DESC """, { "status": 220, "statust": DONE, "idroute": "testmdn", "confirmtype": "send-email-MDN", "confirmasked": True, }, ): nr_rows += 1 print(row[str("idta")], row[str("confirmed")], row[str("confirmidta")]) self.failUnless(row[str("confirmed")]) self.failUnless(row[str("confirmidta")] != 0) else: self.failUnless(nr_rows == 1) nr_rows = 0 for row in botslib.query( """SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s AND frommail != '' ORDER BY idta DESC """, { "status": 500, "statust": DONE, "idroute": "testmdn", "confirmtype": "ask-email-MDN", "confirmasked": True, }, ): nr_rows += 1 self.failUnless(row[str("confirmed")]) self.failUnless(row[str("confirmidta")] != 0) else: self.failUnless(nr_rows == 1)
def testroutetestmdn(self): lijst = utilsunit.getdir(os.path.join(botssys, 'outfile/confirm/mdn/*')) self.failUnless(len(lijst) == 0) nr_rows = 0 for row in botslib.query( u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s AND frommail != '' ORDER BY idta DESC ''', { 'status': 220, 'statust': DONE, 'idroute': 'testmdn', 'confirmtype': 'send-email-MDN', 'confirmasked': True }): nr_rows += 1 print(row[str('idta')], row[str('confirmed')], row[str('confirmidta')]) self.failUnless(row[str('confirmed')]) self.failUnless(row[str('confirmidta')] != 0) else: self.failUnless(nr_rows == 1) nr_rows = 0 for row in botslib.query( u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s AND frommail != '' ORDER BY idta DESC ''', { 'status': 500, 'statust': DONE, 'idroute': 'testmdn', 'confirmtype': 'ask-email-MDN', 'confirmasked': True }): nr_rows += 1 self.failUnless(row[str('confirmed')]) self.failUnless(row[str('confirmidta')] != 0) else: self.failUnless(nr_rows == 1)
def test_plugin(): for row in botslib.query( u'''SELECT COUNT(*) as count FROM partner WHERE isgroup = %(isgroup)s ''', {'isgroup': False}): if row[str('count')] != 5: raise Exception('error partner count') break else: raise Exception('no partner count?') for row in botslib.query( u'''SELECT COUNT(*) as count FROM partner WHERE isgroup = %(isgroup)s ''', {'isgroup': True}): if row[str('count')] != 3: raise Exception('error partner count') break else: raise Exception('no partner count?') for row in botslib.query( u'''SELECT COUNT(*) as count FROM partnergroup WHERE from_partner_id=%(from_partner_id)s ''', {'from_partner_id': 'plugintest1'}): if row[str('count')] != 3: raise Exception('error partner count') break else: raise Exception('no partner count?') for row in botslib.query( u'''SELECT to_partner_id FROM partnergroup WHERE from_partner_id=%(from_partner_id)s ''', {'from_partner_id': 'plugintest2'}): if row[str('to_partner_id')] != 'plugingroup2': raise Exception('error partner count') for row in botslib.query( u'''SELECT COUNT(*) as count FROM partnergroup WHERE to_partner_id=%(to_partner_id)s ''', {'to_partner_id': 'plugingroup2'}): if row[str('count')] != 2: raise Exception('error partner count') break else: raise Exception('no partner count?')
def getreportlastrun(): for row in botslib.query(u'''SELECT * FROM report ORDER BY idta DESC '''): return row raise Exception('no report')
def main(inn, out): out.put({'BOTSID': 'Group', 'SenderId': inn.ta_info['frompartner']}) out.put({'BOTSID': 'Group', 'ReceiverId': inn.ta_info['topartner']}) out.put({'BOTSID': 'Group', 'Code': inn.get({'BOTSID': 'ST'}, {'BOTSID': 'AK1', 'AK101': None})}) out.put({'BOTSID': 'Group', 'Status': inn.get({'BOTSID': 'ST'}, {'BOTSID': 'AK9', 'AK901': None})}) out.put({'BOTSID': 'Group', 'AdvStatus': inn.get({'BOTSID': 'ST'}, {'BOTSID': 'AK9', 'AK905': None})}) for ak2 in inn.getloop({'BOTSID': 'ST'}, {'BOTSID': 'AK2'}): trans = out.putloop({'BOTSID': 'Group'}, {'BOTSID': 'Transaction'}) trans.put({'BOTSID': 'Transaction', 'Code': ak2.get({'BOTSID': 'AK2', 'AK201': None})}) reference = ak2.get({'BOTSID': 'AK2', 'AK202': None}) original_transaction = list( botslib.query("select * from ta where reference='{}'".format( reference.lstrip('0')))) if not original_transaction: raise TransactionNotFound( 'Could not find the related transaction ' 'in DB for reference {}'.format(reference)) trans.put({'BOTSID': 'Transaction', 'Number': original_transaction[0][33]}) trans.put({'BOTSID': 'Transaction', 'Status': ak2.get({'BOTSID': 'AK2'}, {'BOTSID': 'AK5', 'AK501': None})}) trans.put({'BOTSID': 'Transaction', 'AdvStatus': ak2.get({'BOTSID': 'AK2'}, {'BOTSID': 'AK5', 'AK502': None})})
def testroutetestmdn2(self): lijst = utilsunit.getdir( os.path.join(botssys, 'outfile/confirm/mdn2/*')) self.failUnless(len(lijst) == 0) for row in botslib.query( u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', { 'status': 510, 'statust': DONE, 'idroute': 'testmdn2', 'confirmtype': 'ask-email-MDN', 'confirmasked': True }): self.failUnless(not row[1]) self.failUnless(row[2] == 0) break else: self.failUnless(1 == 0)
def getlastreport(): for row in botslib.query(u'''SELECT * FROM report ORDER BY idta DESC '''): #~ print row return row
def geterrorlastrun(): for row in botslib.query(u'''SELECT * FROM filereport ORDER BY idta DESC '''): return row[str('errortext')] raise Exception('no filereport')
def geterrorlastrun(): for row in botslib.query(u'''SELECT * FROM filereport ORDER BY idta DESC '''): return row['errortext'] raise Exception('no filereport')
def testroutetestmdn(self): comclass = communication._comsession(channeldict={ 'idchannel': 'dutchic_desadv_out'}, idroute='dutchic_desadv', userscript=None, scriptname=None, command='new', rootidta=0) count = 0 for row in botslib.query(u'''SELECT idta FROM ta WHERE status=%(status)s AND statust=%(statust)s ORDER BY idta DESC ''', {'status': 520, 'statust': DONE, 'idroute': 'testmdn', 'confirmtype': 'send-email-MDN', 'confirmasked': True}): count += 1 sub_unique = botslib.unique('dutchic_desadv_out') ta = botslib.OldTransaction(row[str('idta')]) self.assertEqual(comclass.filename_formatter('*.edi', ta), str(sub_unique + 1) + '.edi', '') self.assertEqual(comclass.filename_formatter('*.edi', ta), str(sub_unique + 2) + '.edi', '') self.assertEqual(comclass.filename_formatter('*.edi', ta), str(sub_unique + 3) + '.edi', '') self.assertEqual(comclass.filename_formatter('{messagetype}/{editype}/{topartner}/{frompartner}/{botskey}_*', ta), 'DESADVD96AUNEAN005/edifact/8712345678920/8712345678910/VERZENDVB8_' + str(sub_unique + 4), '') self.assertEqual(comclass.filename_formatter( '*_{datetime:%Y-%m-%d}.edi', ta), str(sub_unique + 5) + '_' + datetime.datetime.now().strftime('%Y-%m-%d') + '.edi', '') self.assertEqual(comclass.filename_formatter('*_*.edi', ta), str(sub_unique + 6) + '_' + str(sub_unique + 6) + '.edi', '') self.assertEqual(comclass.filename_formatter('123.edi', ta), '123.edi', '') self.assertEqual(comclass.filename_formatter('{infile}', ta), 'desadv1.edi', '') self.assertEqual(comclass.filename_formatter('{infile:name}.txt', ta), 'desadv1.txt', '') self.assertEqual(comclass.filename_formatter('{infile:name}.{infile:ext}', ta), 'desadv1.edi', '') print('expect: <idta>.edi ', comclass.filename_formatter('{idta}.edi', ta)) self.assertRaises(botslib.CommunicationOutError, comclass.filename_formatter, '{tada}', ta) self.assertRaises(botslib.CommunicationOutError, comclass.filename_formatter, '{infile:test}', ta) if count == 1: # test only 1 incoming files break
def test_ccode_with_unicode(): domein = 'test' tests = [ (u'key1', u'leftcode'), (u'key2', u'~!@#$%^&*()_+}{:";][=-/.,<>?`'), (u'key3', u'?érýúíó?ás??lzcn?'), (u'key4', u'?ë?ÿüïöä´¨???è?ùì'), (u'key5', u'òà???UIÕÃ?Ñ`~'), (u'key6', u"a\xac\u1234\u20ac\U00008000"), (u'key7', u"abc_\u03a0\u03a3\u03a9.txt"), (u'key8', u"?ÉRÝÚÍÓ?ÁS??LZCN??"), (u'key9', u"Ë?¨YܨIÏÏÖÄ???È?ÙÌÒ`À`Z?"), ] try: #clean before test botslib.changeq(u'''DELETE FROM ccode ''') botslib.changeq(u'''DELETE FROM ccodetrigger''') except: print('Error while deleting: ', botslib.txtexc()) raise try: botslib.changeq( u'''INSERT INTO ccodetrigger (ccodeid) VALUES (%(ccodeid)s)''', {'ccodeid': domein}) for key, value in tests: botslib.changeq( u'''INSERT INTO ccode (ccodeid_id,leftcode,rightcode,attr1,attr2,attr3,attr4,attr5,attr6,attr7,attr8) VALUES (%(ccodeid)s,%(leftcode)s,%(rightcode)s,'1','1','1','1','1','1','1','1')''', { 'ccodeid': domein, 'leftcode': key, 'rightcode': value }) except: print('Error while updating: ', botslib.txtexc()) raise try: for key, value in tests: print('key', key) for row in botslib.query( u'''SELECT rightcode FROM ccode WHERE ccodeid_id = %(ccodeid)s AND leftcode = %(leftcode)s''', { 'ccodeid': domein, 'leftcode': key }): print(' ', key, type(row[str('rightcode')]), type(value)) if row[str('rightcode')] != value: print( 'failure in test "%s": result "%s" is not equal to "%s"' % (key, row['rightcode'], value)) else: print(' OK') break else: print('??can not find testentry %s %s in db' % (key, value)) except: print('Error while quering db: ', botslib.txtexc()) raise
def getreportlastrun(): ''' Return the results of the last run as a dict.''' for row in botslib.query(u'''SELECT * FROM report ORDER BY idta DESC '''): return dict(row) raise Exception('no report')
def getlastta(status): for row in botslib.query(u'''SELECT * FROM ta WHERE status=%(status)s ORDER BY idta DESC ''', {'status': status}): return row raise Exception('no ta')
def getlastta(status): for row in botslib.query( u'''SELECT * FROM ta WHERE status=%(status)s ORDER BY idta DESC ''', {'status': status}): return row raise Exception('no ta')
def getreportlastrun(): for row in botslib.query( """SELECT * FROM report ORDER BY idta DESC """ ): return row raise Exception("no report")
def geterrorlastrun(): for row in botslib.query( """SELECT * FROM filereport ORDER BY idta DESC """ ): return row[str("errortext")] raise Exception("no filereport")
def test_plugin(): for row in botslib.query(u'''SELECT COUNT(*) as count FROM partner WHERE isgroup = %(isgroup)s ''', {'isgroup':False}): if row['count'] != 5: raise Exception('error partner count') break else: raise Exception('no partner count?') for row in botslib.query(u'''SELECT COUNT(*) as count FROM partner WHERE isgroup = %(isgroup)s ''', {'isgroup':True}): if row['count'] != 3: raise Exception('error partner count') break else: raise Exception('no partner count?') for row in botslib.query(u'''SELECT COUNT(*) as count FROM partnergroup WHERE from_partner_id=%(from_partner_id)s ''', {'from_partner_id':'plugintest1'}): if row['count'] != 3: raise Exception('error partner count') break else: raise Exception('no partner count?') for row in botslib.query(u'''SELECT to_partner_id FROM partnergroup WHERE from_partner_id=%(from_partner_id)s ''', {'from_partner_id':'plugintest2'}): if row['to_partner_id'] != 'plugingroup2': raise Exception('error partner count') for row in botslib.query(u'''SELECT COUNT(*) as count FROM partnergroup WHERE to_partner_id=%(to_partner_id)s ''', {'to_partner_id':'plugingroup2'}): if row['count'] != 2: raise Exception('error partner count') break else: raise Exception('no partner count?')
def persist_lookup_ts(domein,botskey): ''' lookup persistent values in db. ''' for row in botslib.query('''SELECT ts FROM persist WHERE domein=%(domein)s AND botskey=%(botskey)s''', {'domein':domein,'botskey':botskey}): return row[str('ts')] return None
def getlastta(status): for row in botslib.query( """SELECT * FROM ta WHERE status=%(status)s ORDER BY idta DESC """, {"status": status}, ): return row raise Exception("no ta")
def testroutetestmdn(self): comclass = communication._comsession( channeldict={"idchannel": "dutchic_desadv_out"}, idroute="dutchic_desadv", userscript=None, scriptname=None, command="new", rootidta=0, ) count = 0 for row in botslib.query( """SELECT idta FROM ta WHERE status=%(status)s AND statust=%(statust)s ORDER BY idta DESC """, { "status": 520, "statust": DONE, "idroute": "testmdn", "confirmtype": "send-email-MDN", "confirmasked": True, }, ): count += 1 sub_unique = botslib.unique("dutchic_desadv_out") ta = botslib.OldTransaction(row[str("idta")]) self.assertEqual(comclass.filename_formatter("*.edi", ta), str(sub_unique + 1) + ".edi", "") self.assertEqual(comclass.filename_formatter("*.edi", ta), str(sub_unique + 2) + ".edi", "") self.assertEqual(comclass.filename_formatter("*.edi", ta), str(sub_unique + 3) + ".edi", "") self.assertEqual( comclass.filename_formatter("{messagetype}/{editype}/{topartner}/{frompartner}/{botskey}_*", ta), "DESADVD96AUNEAN005/edifact/8712345678920/8712345678910/VERZENDVB8_" + str(sub_unique + 4), "", ) self.assertEqual( comclass.filename_formatter("*_{datetime:%Y-%m-%d}.edi", ta), str(sub_unique + 5) + "_" + datetime.datetime.now().strftime("%Y-%m-%d") + ".edi", "", ) self.assertEqual( comclass.filename_formatter("*_*.edi", ta), str(sub_unique + 6) + "_" + str(sub_unique + 6) + ".edi", "" ) self.assertEqual(comclass.filename_formatter("123.edi", ta), "123.edi", "") self.assertEqual(comclass.filename_formatter("{infile}", ta), "desadv1.edi", "") self.assertEqual(comclass.filename_formatter("{infile:name}.txt", ta), "desadv1.txt", "") self.assertEqual(comclass.filename_formatter("{infile:name}.{infile:ext}", ta), "desadv1.edi", "") print("expect: <idta>.edi ", comclass.filename_formatter("{idta}.edi", ta)) self.assertRaises(botslib.CommunicationOutError, comclass.filename_formatter, "{tada}", ta) self.assertRaises(botslib.CommunicationOutError, comclass.filename_formatter, "{infile:test}", ta) if count == 1: # test only 1 incoming files break
def persist_lookup_ts(domein, botskey): ''' lookup persistent values in db. ''' for row in botslib.query( '''SELECT ts FROM persist WHERE domein=%(domein)s AND botskey=%(botskey)s''', { 'domein': domein, 'botskey': botskey }): return row[str('ts')] return None
def testroutetestmdn(self): lijst = utilsunit.getdir(os.path.join(botssys, 'outfile/confirm/mdn/*')) self.failUnless(len(lijst) == 0) nr_rows = 0 for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s AND frommail != '' ORDER BY idta DESC ''', {'status': 220, 'statust': DONE, 'idroute': 'testmdn', 'confirmtype': 'send-email-MDN', 'confirmasked': True}): nr_rows += 1 print(row[str('idta')], row[str('confirmed')], row[str('confirmidta')]) self.failUnless(row[str('confirmed')]) self.failUnless(row[str('confirmidta')] != 0) else: self.failUnless(nr_rows == 1) nr_rows = 0 for row in botslib.query(u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s AND frommail != '' ORDER BY idta DESC ''', {'status': 500, 'statust': DONE, 'idroute': 'testmdn', 'confirmtype': 'ask-email-MDN', 'confirmasked': True}): nr_rows += 1 self.failUnless(row[str('confirmed')]) self.failUnless(row[str('confirmidta')] != 0) else: self.failUnless(nr_rows == 1)
def indicate_rereceive(): count = 0 for row in botslib.query(u'''SELECT idta FROM filereport ORDER BY idta DESC '''): count += 1 botslib.changeq(u'''UPDATE filereport SET retransmit = 1 WHERE idta=%(idta)s ''', {'idta': row[str('idta')]}) if count >= 2: break
def indicate_rereceive(): count = 0 for row in botslib.query(u'''SELECT idta FROM filereport ORDER BY idta DESC '''): count += 1 botslib.changeq(u'''UPDATE filereport SET retransmit = 1 WHERE idta=%(idta)s ''',{'idta':row[str('idta')]}) if count >= 2: break
def indicate_send(): count = 0 for row in botslib.query(u'''SELECT idta FROM ta WHERE status=%(status)s ORDER BY idta DESC ''',{'status':EXTERNOUT}): count += 1 botslib.changeq(u'''UPDATE ta SET retransmit = %(retransmit)s WHERE idta=%(idta)s ''',{'retransmit':True,'idta':row[str('idta')]}) if count >= 2: break
def indicate_send(): count = 0 for row in botslib.query(u'''SELECT idta FROM ta WHERE status=%(status)s ORDER BY idta DESC ''', {'status': EXTERNOUT}): count += 1 botslib.changeq(u'''UPDATE ta SET retransmit = %(retransmit)s WHERE idta=%(idta)s ''', {'retransmit': True, 'idta': row[str('idta')]}) if count >= 2: break
def persist_lookup_ts(domein, botskey): """ lookup persistent values in db. """ for row in botslib.query( """SELECT ts FROM persist WHERE domein=%(domein)s AND botskey=%(botskey)s""", { "domein": domein, "botskey": botskey }, ): return row[str("ts")] return None
def indicate_rereceive(): count = 0 for row in botslib.query("""SELECT idta FROM filereport ORDER BY idta DESC """): count += 1 botslib.changeq( """UPDATE filereport SET retransmit = 1 WHERE idta=%(idta)s """, {"idta": row[str("idta")]}, ) if count >= 2: break
def lookup_partnerID(partnerID, qual): #if caching do lookup in cache. for row in botslib.query( u'''SELECT rightcode, attr1 FROM ccode WHERE ccodeid_id = %(ccodeid)s AND leftcode = %(leftcode)s''', { 'ccodeid': 'x12_partner', 'leftcode': partnerID }): ediID = row['rightcode'] qual = row['attr1'] break else: ediID = partnerID #if caching: put in cache return ediID, qual
def lookup_ediID(ediID, qual): #if caching, first do a lookup in the cache. for row in botslib.query( u'''SELECT leftcode FROM ccode WHERE ccodeid_id = %(ccodeid)s AND rightcode = %(rightcode)s AND attr1 = %(attr1)s ''', { 'ccodeid': 'x12_partner', 'rightcode': ediID.strip(), 'attr1': qual }): partnerID = row['leftcode'] break else: #if not found: return ediID. Most of the time partnerID is the same as ediID anyway partnerID = ediID #if caching: put in cache return partnerID
def indicate_send(): count = 0 for row in botslib.query( """SELECT idta FROM ta WHERE status=%(status)s ORDER BY idta DESC """, {"status": EXTERNOUT}, ): count += 1 botslib.changeq( """UPDATE ta SET retransmit = %(retransmit)s WHERE idta=%(idta)s """, { "retransmit": True, "idta": row[str("idta")] }, ) if count >= 2: break
def testroutetestcontrl(self): """ test997 1: pickup ORDERS*1 ask confirm ORDERS*2 gen & send ORDERS*2 send confirm ORDERS*1 gen & send CONTRL*1 test997 2: receive CONTRL*1 confirm ORDERS*1 gen xml*1 receive ORDERS*2 ask confirm ORDERS*3 gen ORDERS*3 send confirm ORDERS*2 gen & send CONTRL*2 test997 3: receive CONTRL*2 confirm ORDERS*2 gen & send xml (to trash) send ORDERS*3 (to trash) send xml (to trash) """ lijst = utilsunit.getdir(os.path.join(botssys, "outfile/confirm/edifact/*")) self.failUnless(len(lijst) == 0) lijst = utilsunit.getdir(os.path.join(botssys, "outfile/confirm/trash/*")) self.failUnless(len(lijst) == 6) counter = 0 for row in botslib.query( """SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC """, { "status": 400, "statust": DONE, "idroute": "testcontrl", "confirmtype": "ask-edifact-CONTRL", "confirmasked": True, }, ): counter += 1 if counter == 1: self.failUnless(not row[str("confirmed")]) self.failUnless(row[str("confirmidta")] == 0) elif counter == 2: self.failUnless(row[str("confirmed")]) self.failUnless(row[str("confirmidta")] != 0) else: break else: self.failUnless(counter != 0) for row in botslib.query( """SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC """, { "status": 310, "statust": DONE, "idroute": "testcontrl", "confirmtype": "send-edifact-CONTRL", "confirmasked": True, }, ): counter += 1 if counter <= 2: self.failUnless(row[str("confirmed")]) self.failUnless(row[str("confirmidta")] != 0) else: break else: self.failUnless(counter != 0)
def testroutetestmdn(self): comclass = communication._comsession( channeldict={'idchannel': 'dutchic_desadv_out'}, idroute='dutchic_desadv', userscript=None, scriptname=None, command='new', rootidta=0) count = 0 for row in botslib.query( u'''SELECT idta FROM ta WHERE status=%(status)s AND statust=%(statust)s ORDER BY idta DESC ''', { 'status': 520, 'statust': DONE, 'idroute': 'testmdn', 'confirmtype': 'send-email-MDN', 'confirmasked': True }): count += 1 sub_unique = botslib.unique('dutchic_desadv_out') ta = botslib.OldTransaction(row['idta']) self.assertEqual(comclass.filename_formatter('*.edi', ta), str(sub_unique + 1) + '.edi', '') self.assertEqual(comclass.filename_formatter('*.edi', ta), str(sub_unique + 2) + '.edi', '') self.assertEqual(comclass.filename_formatter('*.edi', ta), str(sub_unique + 3) + '.edi', '') self.assertEqual( comclass.filename_formatter( '{messagetype}/{editype}/{topartner}/{frompartner}/{botskey}_*', ta), 'DESADVD96AUNEAN005/edifact/8712345678920/8712345678910/VERZENDVB8_' + str(sub_unique + 4), '') self.assertEqual( comclass.filename_formatter('*_{datetime:%Y-%m-%d}.edi', ta), str(sub_unique + 5) + '_' + datetime.datetime.now().strftime('%Y-%m-%d') + '.edi', '') self.assertEqual( comclass.filename_formatter('*_*.edi', ta), str(sub_unique + 6) + '_' + str(sub_unique + 6) + '.edi', '') self.assertEqual(comclass.filename_formatter('123.edi', ta), '123.edi', '') self.assertEqual(comclass.filename_formatter('{infile}', ta), 'desadv1.edi', '') self.assertEqual( comclass.filename_formatter('{infile:name}.txt', ta), 'desadv1.txt', '') self.assertEqual( comclass.filename_formatter('{infile:name}.{infile:ext}', ta), 'desadv1.edi', '') print 'expect: <idta>.edi ', comclass.filename_formatter( '{idta}.edi', ta) self.assertRaises(botslib.CommunicationOutError, comclass.filename_formatter, '{tada}', ta) self.assertRaises(botslib.CommunicationOutError, comclass.filename_formatter, '{infile:test}', ta) if count == 1: #test only 1 incoming files break
def testroutetest997(self): ''' test997 1: pickup 850*1 ask confirm 850*2 gen & send 850*2 send confirm 850*1 gen & send 997*1 test997 2: receive 997*1 confirm 850*1 gen xml*1 receive 850*2 ask confirm 850*3 gen 850*3 send confirm 850*2 gen & send 997*2 test997 3: receive 997*2 confirm 850*2 gen & send xml (to trash) send 850*3 (to trash) send xml (to trash) ''' lijst = utilsunit.getdir(os.path.join(botssys, 'outfile/confirm/x12/*')) self.failUnless(len(lijst) == 0) lijst = utilsunit.getdir( os.path.join(botssys, 'outfile/confirm/trash/*')) self.failUnless(len(lijst) == 6) counter = 0 for row in botslib.query( u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', { 'status': 400, 'statust': DONE, 'idroute': 'test997', 'confirmtype': 'ask-x12-997', 'confirmasked': True }): counter += 1 if counter == 1: self.failUnless(not row['confirmed']) self.failUnless(row['confirmidta'] == 0) elif counter == 2: self.failUnless(row['confirmed']) self.failUnless(row['confirmidta'] != 0) else: break else: self.failUnless(counter != 0) for row in botslib.query( u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', { 'status': 310, 'statust': DONE, 'idroute': 'test997', 'confirmtype': 'send-x12-997', 'confirmasked': True }): counter += 1 if counter <= 2: self.failUnless(row['confirmed']) self.failUnless(row['confirmidta'] != 0) else: break else: self.failUnless(counter != 0)
def start(): try: botsinit.generalinit('config') botsinit.initenginelogging() except: print 'Error reading bots.ini (before database connection).' raise try: botsinit.connect() except: print 'Could not connect to database.' raise #*****************start test*************** domein = 'test' tests = [ (u'key1', u'leftcode'), (u'key2', u'~!@#$%^&*()_+}{:";][=-/.,<>?`'), (u'key3', u'?érýúíó?ás??lzcn?'), (u'key4', u'?ë?ÿüïöä´¨???è?ùì'), (u'key5', u'òà???UIÕÃ?Ñ`~'), (u'key6', u"a\xac\u1234\u20ac\U00008000"), (u'key7', u"abc_\u03a0\u03a3\u03a9.txt"), (u'key8', u"?ÉRÝÚÍÓ?ÁS??LZCN??"), (u'key9', u"Ë?¨YܨIÏÏÖÄ???È?ÙÌÒ`À`Z?"), ] try: #clean before test botslib.change(u'''DELETE FROM ccode ''') botslib.change(u'''DELETE FROM ccodetrigger''') except: print 'Error while deleting', botslib.txtexc() raise try: botslib.change( u'''INSERT INTO ccodetrigger (ccodeid) VALUES (%(ccodeid)s)''', {'ccodeid': domein}) for key, value in tests: botslib.change( u'''INSERT INTO ccode (ccodeid_id,leftcode,rightcode,attr1,attr2,attr3,attr4,attr5,attr6,attr7,attr8) VALUES (%(ccodeid)s,%(leftcode)s,%(rightcode)s,'1','1','1','1','1','1','1','1')''', { 'ccodeid': domein, 'leftcode': key, 'rightcode': value }) except: print 'Error while updating', botslib.txtexc() raise try: for key, value in tests: print 'key', key for row in botslib.query( u'''SELECT rightcode FROM ccode WHERE ccodeid_id = %(ccodeid)s AND leftcode = %(leftcode)s''', { 'ccodeid': domein, 'leftcode': key }): print ' ', key, type(row['rightcode']), type(value) if row['rightcode'] != value: print 'failure in test "%s": result "%s" is not equal to "%s"' % ( key, row['rightcode'], value) else: print ' OK' break else: print '??can not find testentry %s %s in db' % (key, value) except: print 'Error while quering db', botslib.txtexc() raise #*****************end test*************** botsglobal.db.close()
def testroutetestmdn(self): comclass = communication._comsession( channeldict={"idchannel": "dutchic_desadv_out"}, idroute="dutchic_desadv", userscript=None, scriptname=None, command="new", rootidta=0, ) count = 0 for row in botslib.query( """SELECT idta FROM ta WHERE status=%(status)s AND statust=%(statust)s ORDER BY idta DESC """, { "status": 520, "statust": DONE, "idroute": "testmdn", "confirmtype": "send-email-MDN", "confirmasked": True, }, ): count += 1 sub_unique = botslib.unique("dutchic_desadv_out") ta = botslib.OldTransaction(row[str("idta")]) self.assertEqual( comclass.filename_formatter("*.edi", ta), str(sub_unique + 1) + ".edi", "", ) self.assertEqual( comclass.filename_formatter("*.edi", ta), str(sub_unique + 2) + ".edi", "", ) self.assertEqual( comclass.filename_formatter("*.edi", ta), str(sub_unique + 3) + ".edi", "", ) self.assertEqual( comclass.filename_formatter( "{messagetype}/{editype}/{topartner}/{frompartner}/{botskey}_*", ta), "DESADVD96AUNEAN005/edifact/8712345678920/8712345678910/VERZENDVB8_" + str(sub_unique + 4), "", ) self.assertEqual( comclass.filename_formatter("*_{datetime:%Y-%m-%d}.edi", ta), str(sub_unique + 5) + "_" + datetime.datetime.now().strftime("%Y-%m-%d") + ".edi", "", ) self.assertEqual( comclass.filename_formatter("*_*.edi", ta), str(sub_unique + 6) + "_" + str(sub_unique + 6) + ".edi", "", ) self.assertEqual(comclass.filename_formatter("123.edi", ta), "123.edi", "") self.assertEqual(comclass.filename_formatter("{infile}", ta), "desadv1.edi", "") self.assertEqual( comclass.filename_formatter("{infile:name}.txt", ta), "desadv1.txt", "") self.assertEqual( comclass.filename_formatter("{infile:name}.{infile:ext}", ta), "desadv1.edi", "", ) print( "expect: <idta>.edi ", comclass.filename_formatter("{idta}.edi", ta), ) self.assertRaises(botslib.CommunicationOutError, comclass.filename_formatter, "{tada}", ta) self.assertRaises( botslib.CommunicationOutError, comclass.filename_formatter, "{infile:test}", ta, ) if count == 1: # test only 1 incoming files break
def testroutetest997(self): ''' test997 1: pickup 850; send 850 (ask confirm) and 997 test997 2: receive 997 and 850; send 997 test997 3: send 997 and 850 to trash test997 4: receive 997; 997 to trash ''' lijst = utilsunit.getdir(os.path.join(botssys, 'outfile/confirm/x12/*')) self.failUnless(len(lijst) == 0) lijst = utilsunit.getdir( os.path.join(botssys, 'outfile/confirm/trash/*')) self.failUnless(len(lijst) == 3) counter = 0 for row in botslib.query( u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', { 'status': 400, 'statust': DONE, 'idroute': 'test997', 'confirmtype': 'ask-x12-997', 'confirmasked': True }): counter += 1 if counter == 1: self.failUnless(not row[1]) self.failUnless(row[2] == 0) elif counter == 2: self.failUnless(row[1]) self.failUnless(row[2] != 0) else: break else: self.failUnless(counter != 0) for row in botslib.query( u'''SELECT idta,confirmed,confirmidta FROM ta WHERE status=%(status)s AND statust=%(statust)s AND idroute=%(idroute)s AND confirmtype=%(confirmtype)s AND confirmasked=%(confirmasked)s ORDER BY idta DESC ''', { 'status': 310, 'statust': DONE, 'idroute': 'test997', 'confirmtype': 'send-x12-997', 'confirmasked': True }): counter += 1 if counter <= 2: self.failUnless(row[1]) self.failUnless(row[2] != 0) else: break else: self.failUnless(counter != 0)