Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/tests/test_gb_vat.doctest
blob: 1196511aacd0486016b2327715b18a4a95568b1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
test_gb_vat.doctest - more detailed doctests for stdnum.gb.vat module

Copyright (C) 2012, 2013 Arthur de Jong

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA


This file contains more detailed doctests for the stdnum.gb.vat. It
tries to cover more corner cases and detailed functionality that is not
really useful as module documentation.

>>> from stdnum.gb import vat


>>> numbers = '''
...
... GB 002 4257 28
... GB 003232345
... GB 100 1950 75
... GB 100190874
... GB 102675046
... GB 232177091
... GB 242338087388
... GB 311 405 025
... GB 362 5866 29
... GB 417 2280 71
... GB 436 0630 72
... GB 495 2781 05
... GB 507 5768 25
... GB 521 6763 52
... GB 586 367 295
... GB 591 9373 01
... GB 605 8678 15
... GB 662 8564 06
... GB 698 550 577
... GB 733 4428 41
... GB 770 381 235
... GB 784 9117 89
... GB 808 6365 12
... GB 812 8333 44
... GB 818243334
... GB 823 531 352
... GB 829 9594 59
... GB 845788960
... GB 879 7056 62
... GB 881 3758 91
... GB 913 3041 68
... GB 933210951
... GB 975 8664 50
... GB 977 4872 51
... GB 980780684
... GB 997 7094 44
... GB260311213
... GB653599494
... GB974053902
...
... '''
>>> [x for x in numbers.splitlines() if x and not vat.validate(x)]
[]

Normal values that should just work.

>>> vat.validate('980780684')  # standard number
'980780684'
>>> vat.validate('100190874')  # standard number restarting
'100190874'
>>> vat.validate('242338087388')  # branch trader
'242338087388'
>>> vat.validate('GD100')  # government department
'GD100'
>>> vat.validate('HA501')  # health authority
'HA501'
>>> vat.validate('GD888810003')  # government department for EU
'GD888810003'
>>> vat.validate('HA888856782')  # health authority for EU
'HA888856782'


Invalid long numbers:

>>> vat.validate('802311781')  # invalid check digit
Traceback (most recent call last):
    ...
InvalidChecksum: ...
>>> vat.validate('9807806842')  # too long for standard number
Traceback (most recent call last):
    ...
InvalidLength: ...
>>> vat.validate('9807806B4')  # invalid digit
Traceback (most recent call last):
    ...
InvalidFormat: ...
>>> vat.validate('GD8888567B2')  # invalid digit for EU health authority
Traceback (most recent call last):
    ...
InvalidFormat: ...
>>> vat.validate('001234567')  # invalid checksum
Traceback (most recent call last):
    ...
InvalidChecksum: ...


Some variations on the short format:

>>> vat.validate('ZZ100')  # unknown code
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> vat.validate('GD600')  # government department with high number
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> vat.validate('HA201')  # health authority with low number
Traceback (most recent call last):
    ...
InvalidComponent: ...


Some variations on the EU format:

>>> vat.validate('GD888860018')  # government department with high number
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> vat.validate('HA888820107')  # health authority with low number
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> vat.validate('HA888856700') # health authority with invalid checksum
Traceback (most recent call last):
    ...
InvalidChecksum: ...


Formatting tests:

>>> vat.format('980780684')  # standard number
'980 7806 84'
>>> vat.format('HA501')  # health authority
'HA501'
>>> vat.format('242338087388')  # branch trader
'242 3380 87 388'