import unittest import decimal from pyaccuwage.fields import TextField from pyaccuwage.fields import IntegerField from pyaccuwage.fields import StateField from pyaccuwage.fields import BlankField from pyaccuwage.fields import ZeroField from pyaccuwage.fields import MoneyField from pyaccuwage.fields import ValidationError from pyaccuwage.model import Model class TestTextField(unittest.TestCase): def testStringShortOptional(self): field = TextField(max_length=6, required=False) field.validate() # optional field.value = 'Hello' field.validate() self.assertEqual(field.get_data(), b'HELLO ') def testStringShortRequired(self): field = TextField(max_length=6, required=True) with self.assertRaises(ValidationError): field.validate() field.value = 'Hello' field.validate() self.assertEqual(field.get_data(), b'HELLO ') def testStringLongOptional(self): field = TextField(max_length=6, required=False) field.value = 'Hello, World!' # too long self.assertEqual(len(field.get_data()), field.max_length) class TestModelOutput(unittest.TestCase): class TestModel(Model): record_length = 128 record_identifier = 'TEST' # 4 bytes field1 = TextField(max_length=16) field2 = IntegerField(max_length=16) blank1 = BlankField(max_length=16) zero1 = ZeroField(max_length=16) money = MoneyField(max_length=32) state_txt = StateField() state_num = StateField(use_numeric=True) blank2 = BlankField(max_length=24) def setUp(self): self.model = TestModelOutput.TestModel() def testModelOutput(self): model = self.model model.field1.value = 'Hello, sir!' model.field2.value = 12345 model.money.value = decimal.Decimal('1234.56') model.state_txt.value = 'IA' model.state_num.value = 'IA' expected = b''.join([ b'TEST', b'HELLO, SIR!'.ljust(16), b'12345'.zfill(16), b' ' * 16, b'0' * 16, b'123456'.zfill(32), b'IA', b'19', b' ' * 24, ]) self.assertEqual(model.output(), expected)