Files
2020-06-24 22:58:34 -04:00

159 lines
6.0 KiB
Python

'''
Test everything!
functions must begin with 'test'
'''
import unittest, logging, kf_850, mf_850
from download_transmissions import load_ftp_credentials
from kf_850 import massageSTM, massageKFI
from mf_850 import getSunburyCust, split_string_by_position, trim_elements
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine("mssql+pyodbc://jsisbprod", echo=False)
Base = declarative_base(engine)
metadata = Base.metadata
def loadSession():
global engine
Session = sessionmaker(bind=engine)
session = Session()
return session
class Download_Transmissions_Tests(unittest.TestCase):
'''
Tests relating to download_tranmissions.py
'''
'''
load_ftp_credentials looks up FTP site credentials in a sqlite db that's not committed to the code repo
'''
def test_load_ftp_credentials(self):
codes = ['wf', 'kf', 'mf', 'mg', 'tsg', 'atx', 'htx', 'acf', 'stm']
for code in codes:
test = load_ftp_credentials(code)
self.assertEqual(len(test), 3) # Did we get a list back with _exactly_ 3 elements?
self.assertTrue(all(isinstance(n, basestring) for n in test)) # Are each of those elements strings?
class Kravet_Inbound_850_Tests(unittest.TestCase):
'''
Tests relating to kf_850.py
'''
'''
Kravet seems to hand key cross references in with a number of varying formats which are incorrect.
I've identified the most common and created massageSTM() to fix them
'''
def test_massageSTM(self):
#create dummy logger
logger = logging.getLogger('Unit_Testing')
logger.disabled = True
kf_850.logger = logger
test_input = ['KIRSTEN 73383*2015', 'MULBERRY 73151*COL.825']
expected_output = ['KIRSTEN*2015', 'MULBERRY*0825']
for inn, outt in zip(test_input, expected_output):
self.assertEqual(outt, massageSTM(inn))
'''
Right now this simply trims off the first 4 characters of the xref if 'GWF-' is present at the beginning of the string.
'''
def test_massageKFI(self):
#create dummy logger
logger = logging.getLogger('Unit_Testing')
logger.disabled = True
kf_850.logger = logger
test_input = ['GWF-3421.516.0']
expected_output = ['3421.516.0']
for inn, outt in zip(test_input, expected_output):
self.assertEqual(outt, massageKFI(inn))
def test_lookUpSunburyItem(self):
#create dummy logger
logger = logging.getLogger('Unit_Testing')
logger.disabled = True
kf_850.logger = logger
session = loadSession()
test_input = [ ['BLISS VELVET*2405','3194'], ['DUME*0601','3191'], ['PAISLEY WALK*6103','3190'] ]
expected_output = ['0000041463', '0000006576', '0000032327']
for inn, outt in zip(test_input, expected_output):
self.assertEqual(kf_850.lookUpSunburyItem(session, inn[0], inn[1]), outt)
session.close()
class Maharam_Inbound_850_Tests(unittest.TestCase):
'''
Tests relating to mf_850.py
'''
addressList = ['45 RASONS CT', '74 HORSEBLOCK ROAD', '175 MUFFIN LANE']
cityList = ['HAUPPAUGE', 'YAPHANK', 'CUYAHOGA FALLS']
accountList = [343900, 3439, 343905]
def test_normal_order(self):
for addr, city, acc in zip(self.addressList, self.cityList, self.accountList):
message = "%s, %s should be account %s" % (addr, city, acc)
self.assertEqual(getSunburyCust('', addr, city), acc, msg=message)
'''
If order is custom contract hccb will be something other than an empty string
We should always get account 659000 for contract orders
'''
def test_contract_order(self):
for addr, city in zip(self.addressList, self.cityList):
self.assertEqual(getSunburyCust('Y', addr, city), 659000, msg='hccb = y but function did not return 659000')
self.assertNotEqual(getSunburyCust('', addr, city), 659000, msg='hccb = \'\' but function returned 659000')
'''
Unkown addresses (those not in the lists above) should resolve to 343999
'''
def test_unknown_address(self):
self.assertEqual(getSunburyCust('', 'Castle Black', 'The Wall'), 343999, msg="Castle Black, The Wall should be account 343999")
'''
'''
def test_lookUpSunburyItem(self):
#create dummy logger
logger = logging.getLogger('Unit_Testing')
logger.disabled = True
mf_850.logger = logger
session = loadSession()
test_input = [ ['464040','004','343904'], ['466166','007','343904'], ['466166','002','3439'] ]
expected_output = ['0000025195', '0000041949', '0000041944']
for inn, outt in zip(test_input, expected_output):
self.assertEqual(mf_850.lookUpSunburyItem(session, inn[0], inn[1], inn[2]), outt)
session.close()
'''
trim_elements takes a list as input and returns a list of the same length with any whitespace characters
removed from the beginning/end of each element.
'''
def test_trim_elements(self):
test_input = [' Pennywise The Dancing Clown ', 'Jon Snow ', 'Paul Atreides\n\r', ' \tBobby B.\t']
expected_output = ['Pennywise The Dancing Clown', 'Jon Snow', 'Paul Atreides', 'Bobby B.']
self.assertEqual(trim_elements(test_input), expected_output)
'''
Maharam is still transmitting fixed length data to us *yuck*
The function takes 1 string and a list of ints
the string is chopped up into len(ints) elements each element being ints[n] in length
'''
def test_split_string_by_position(self):
test_string = 'Pennywise The Dancing ClownJon SnowPaul AtreidesBobby B.'
lens = [27, 8, 13, 8]
expected_output = ['Pennywise The Dancing Clown', 'Jon Snow', 'Paul Atreides', 'Bobby B.']
self.assertEqual(split_string_by_position(test_string, lens), expected_output)
if __name__ == '__main__':
unittest.main()