rattail/tests/test_barcodes.py
Lance Edgar 92c03f5d8d General header / Unicode cleanup.
This hopefully updates all module headers such that the file encoding is
utf-8, and uses Unicode literals, etc.
2014-11-18 23:29:26 -06:00

151 lines
4.9 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from unittest import TestCase
from rattail import barcodes
class ModuleTests(TestCase):
def test_upc_check_digit(self):
data = [
('07430500132', 1),
('03600029145', 2),
('03600024145', 7),
('01010101010', 5),
('07430503112', 0),
]
for in_, out in data:
self.assertEqual(barcodes.upc_check_digit(in_), out)
def test_luhn_check_digit(self):
data = [
('7992739871', 3),
('4992739871', 6),
('123456781234567', 0),
]
for in_, out in data:
self.assertEqual(barcodes.luhn_check_digit(in_), out)
def test_price_check_digit(self):
data = [
('0512', 3),
]
for in_, out in data:
self.assertEqual(barcodes.price_check_digit(in_), out)
# short string
self.assertRaises(ValueError, barcodes.price_check_digit, '123')
# long string
self.assertRaises(ValueError, barcodes.price_check_digit, '12345')
# not a string
self.assertRaises(ValueError, barcodes.price_check_digit, 1234)
def test_upce_to_upca(self):
# without input check digit
data = [
('123450', '01200000345'),
('123451', '01210000345'),
('123452', '01220000345'),
('123453', '01230000045'),
('123454', '01234000005'),
('123455', '01234500005'),
('123456', '01234500006'),
('123457', '01234500007'),
('123458', '01234500008'),
('123459', '01234500009'),
('654321', '06510000432'),
('425261', '04210000526'),
('234903', '02340000090'),
('234567', '02345600007'),
('234514', '02345000001'),
('639712', '06320000971'),
('867933', '08670000093'),
('913579', '09135700009'),
('421184', '04211000008'),
]
for in_, out in data:
self.assertEqual(barcodes.upce_to_upca(in_), out)
# with input check digit
data = [
('01234505', '01200000345'),
('01234514', '01210000345'),
('01234523', '01220000345'),
('01234531', '01230000045'),
('01234543', '01234000005'),
('01234558', '01234500005'),
('01234565', '01234500006'),
('01234572', '01234500007'),
('01234589', '01234500008'),
('01234596', '01234500009'),
('06543217', '06510000432'),
('04252614', '04210000526'),
('02349036', '02340000090'),
('02345673', '02345600007'),
('02345147', '02345000001'),
('06397126', '06320000971'),
('08679339', '08670000093'),
('09135796', '09135700009'),
('04211842', '04211000008'),
]
for in_, out in data:
self.assertEqual(barcodes.upce_to_upca(in_), out)
# with output check digit
data = [
('123450', '012000003455'),
('123451', '012100003454'),
('123452', '012200003453'),
('123453', '012300000451'),
('123454', '012340000053'),
('123455', '012345000058'),
('123456', '012345000065'),
('123457', '012345000072'),
('123458', '012345000089'),
('123459', '012345000096'),
('654321', '065100004327'),
('425261', '042100005264'),
('234903', '023400000906'),
('234567', '023456000073'),
('234514', '023450000017'),
('639712', '063200009716'),
('867933', '086700000939'),
('913579', '091357000096'),
('421184', '042110000082'),
]
for in_, out in data:
self.assertEqual(
barcodes.upce_to_upca(in_, include_check_digit=True), out)
# with input and output check digits
data = [
('01234505', '012000003455'),
('01234514', '012100003454'),
('01234523', '012200003453'),
('01234531', '012300000451'),
('01234543', '012340000053'),
('01234558', '012345000058'),
('01234565', '012345000065'),
('01234572', '012345000072'),
('01234589', '012345000089'),
('01234596', '012345000096'),
('06543217', '065100004327'),
('04252614', '042100005264'),
('02349036', '023400000906'),
('02345673', '023456000073'),
('02345147', '023450000017'),
('06397126', '063200009716'),
('08679339', '086700000939'),
('09135796', '091357000096'),
('04211842', '042110000082'),
]
for in_, out in data:
self.assertEqual(
barcodes.upce_to_upca(in_, include_check_digit=True), out)