View | Details | Raw Unified | Return to bug 7688
Collapse All | Expand All

(-)a/t/Serials/GetNextSeq.t (+234 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
use Modern::Perl;
4
use Test::More tests => 43;
5
use C4::Serials;
6
7
# TEST CASE 1 - 1 variable, from 1 to 4
8
my $subscription = {
9
    lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
10
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
11
    skip_serialseq => 0,
12
    irregularity => '',
13
    locale => 'en',
14
};
15
my $pattern = {
16
             add1 =>  1,          add2 =>  0,          add3 =>  0,
17
           every1 =>  1,        every2 =>  0,        every3 =>  0,
18
    whenmorethan1 =>  4, whenmorethan2 =>  0, whenmorethan3 =>  0,
19
           setto1 =>  1,        setto2 =>  0,        setto3 =>  0,
20
    numberingmethod => 'X: {X}',
21
    numbering1 => '',
22
    numbering2 => '',
23
    numbering3 => '',
24
};
25
26
my $seq = _next_seq($subscription, $pattern);
27
is($seq, 'X: 2');
28
$seq = _next_seq($subscription, $pattern);
29
is($seq, 'X: 3');
30
$seq = _next_seq($subscription, $pattern);
31
is($seq, 'X: 4');
32
$seq = _next_seq($subscription, $pattern);
33
is($seq, 'X: 1');
34
$seq = _next_seq($subscription, $pattern);
35
is($seq, 'X: 2');
36
37
# TEST CASE 2 - 1 variable, use 'dayname' numbering, from 1 to 7
38
$subscription = {
39
    lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
40
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
41
    skip_serialseq => 0,
42
    irregularity => '',
43
    locale => 'C',
44
};
45
$pattern = {
46
             add1 =>  1,          add2 =>  0,          add3 =>  0,
47
           every1 =>  1,        every2 =>  0,        every3 =>  0,
48
    whenmorethan1 =>  7, whenmorethan2 =>  0, whenmorethan3 =>  0,
49
           setto1 =>  1,        setto2 =>  0,        setto3 =>  0,
50
    numberingmethod => 'X: {X}',
51
    numbering1 => 'dayname',
52
    numbering2 => '',
53
    numbering3 => '',
54
};
55
56
$seq = _next_seq($subscription, $pattern);
57
is($seq, 'X: Tuesday');
58
$seq = _next_seq($subscription, $pattern);
59
is($seq, 'X: Wednesday');
60
$seq = _next_seq($subscription, $pattern);
61
is($seq, 'X: Thursday');
62
$seq = _next_seq($subscription, $pattern);
63
is($seq, 'X: Friday');
64
$seq = _next_seq($subscription, $pattern);
65
is($seq, 'X: Saturday');
66
$seq = _next_seq($subscription, $pattern);
67
is($seq, 'X: Sunday');
68
$seq = _next_seq($subscription, $pattern);
69
is($seq, 'X: Monday');
70
71
# TEST CASE 3 - 1 variable, use 'monthname' numbering, from 0 to 11 by step of 2
72
$subscription = {
73
    lastvalue1 => 0, lastvalue2 => 1, lastvalue3 => 1,
74
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
75
    skip_serialseq => 0,
76
    irregularity => '',
77
    locale => 'C',  # locale set to 'C' to ensure we'll have english strings
78
};
79
$pattern = {
80
             add1 =>  2,          add2 =>  0,          add3 =>  0,
81
           every1 =>  1,        every2 =>  0,        every3 =>  0,
82
    whenmorethan1 => 11, whenmorethan2 =>  0, whenmorethan3 =>  0,
83
           setto1 =>  0,        setto2 =>  0,        setto3 =>  0,
84
    numberingmethod => 'X: {X}',
85
    numbering1 => 'monthname',
86
    numbering2 => '',
87
    numbering3 => '',
88
};
89
90
$seq = _next_seq($subscription, $pattern);
91
is($seq, 'X: March');
92
$seq = _next_seq($subscription, $pattern);
93
is($seq, 'X: May');
94
$seq = _next_seq($subscription, $pattern);
95
is($seq, 'X: July');
96
$seq = _next_seq($subscription, $pattern);
97
is($seq, 'X: September');
98
$seq = _next_seq($subscription, $pattern);
99
is($seq, 'X: November');
100
$seq = _next_seq($subscription, $pattern);
101
is($seq, 'X: January');
102
$seq = _next_seq($subscription, $pattern);
103
is($seq, 'X: March');
104
105
# TEST CASE 4 - 1 variable, use 'season' numbering, from 0 to 3
106
# Months starts at 0, this implies subscription's lastvalue1 should be 0,
107
# together with setto1 and whenmorethan1 should be 11
108
$subscription = {
109
    lastvalue1 => 0, lastvalue2 => 1, lastvalue3 => 1,
110
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
111
    skip_serialseq => 0,
112
    irregularity => '',
113
    locale => 'C',  # locale set to 'C' to ensure we'll have english strings
114
};
115
$pattern = {
116
             add1 =>  1,          add2 =>  0,          add3 =>  0,
117
           every1 =>  1,        every2 =>  0,        every3 =>  0,
118
    whenmorethan1 =>  3, whenmorethan2 =>  0, whenmorethan3 =>  0,
119
           setto1 =>  0,        setto2 =>  0,        setto3 =>  0,
120
    numberingmethod => 'X: {X}',
121
    numbering1 => 'season',
122
    numbering2 => '',
123
    numbering3 => '',
124
};
125
126
$seq = _next_seq($subscription, $pattern);
127
is($seq, 'X: Summer');
128
$seq = _next_seq($subscription, $pattern);
129
is($seq, 'X: Fall');
130
$seq = _next_seq($subscription, $pattern);
131
is($seq, 'X: Winter');
132
$seq = _next_seq($subscription, $pattern);
133
is($seq, 'X: Spring');
134
$seq = _next_seq($subscription, $pattern);
135
is($seq, 'X: Summer');
136
137
# TEST CASE 5 - 2 variables, from 1 to 12, and from 1 to 4
138
$subscription = {
139
    lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
140
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
141
    skip_serialseq => 0,
142
    irregularity => '',
143
    locale => 'C',  # locale set to 'C' to ensure we'll have english strings
144
};
145
$pattern = {
146
             add1 =>  1,          add2 =>  1,          add3 =>  0,
147
           every1 =>  1,        every2 =>  4,        every3 =>  0,
148
    whenmorethan1 =>  4, whenmorethan2 => 12, whenmorethan3 =>  0,
149
           setto1 =>  1,        setto2 =>  1,        setto3 =>  0,
150
    numberingmethod => 'Y: {Y}, X: {X}',
151
    numbering1 => '',
152
    numbering2 => '',
153
    numbering3 => '',
154
};
155
156
$seq = _next_seq($subscription, $pattern);
157
is($seq, 'Y: 1, X: 2');
158
$seq = _next_seq($subscription, $pattern);
159
is($seq, 'Y: 1, X: 3');
160
$seq = _next_seq($subscription, $pattern);
161
is($seq, 'Y: 1, X: 4');
162
$seq = _next_seq($subscription, $pattern);
163
is($seq, 'Y: 2, X: 1');
164
$seq = _next_seq($subscription, $pattern);
165
is($seq, 'Y: 2, X: 2');
166
# Back to the future
167
for (my $i = 0; $i < 39; $i++) {
168
    $seq = _next_seq($subscription, $pattern);
169
}
170
$seq = _next_seq($subscription, $pattern);
171
is($seq, 'Y: 12, X: 2');
172
$seq = _next_seq($subscription, $pattern);
173
is($seq, 'Y: 12, X: 3');
174
$seq = _next_seq($subscription, $pattern);
175
is($seq, 'Y: 12, X: 4');
176
$seq = _next_seq($subscription, $pattern);
177
is($seq, 'Y: 1, X: 1');
178
179
# TEST CASE 6 - 3 variables, from 1 to 12, from 1 to 8, and from 1 to 4
180
$subscription = {
181
    lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
182
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
183
    skip_serialseq => 0,
184
    irregularity => '',
185
    locale => 'C',  # locale set to 'C' to ensure we'll have english strings
186
};
187
$pattern = {
188
             add1 =>  1,          add2 =>  1,          add3 =>  1,
189
           every1 =>  1,        every2 =>  4,        every3 =>  32,
190
    whenmorethan1 =>  4, whenmorethan2 =>  8, whenmorethan3 =>  12,
191
           setto1 =>  1,        setto2 =>  1,        setto3 =>  1,
192
    numberingmethod => 'Z: {Z}, Y: {Y}, X: {X}',
193
    numbering1 => '',
194
    numbering2 => '',
195
    numbering3 => '',
196
};
197
198
$seq = _next_seq($subscription, $pattern);
199
is($seq, 'Z: 1, Y: 1, X: 2');
200
$seq = _next_seq($subscription, $pattern);
201
is($seq, 'Z: 1, Y: 1, X: 3');
202
$seq = _next_seq($subscription, $pattern);
203
is($seq, 'Z: 1, Y: 1, X: 4');
204
$seq = _next_seq($subscription, $pattern);
205
is($seq, 'Z: 1, Y: 2, X: 1');
206
for (my $i = 0; $i < 24; $i++) {
207
    $seq = _next_seq($subscription, $pattern);
208
}
209
$seq = _next_seq($subscription, $pattern);
210
is($seq, 'Z: 1, Y: 8, X: 2');
211
$seq = _next_seq($subscription, $pattern);
212
is($seq, 'Z: 1, Y: 8, X: 3');
213
$seq = _next_seq($subscription, $pattern);
214
is($seq, 'Z: 1, Y: 8, X: 4');
215
$seq = _next_seq($subscription, $pattern);
216
is($seq, 'Z: 2, Y: 1, X: 1');
217
for (my $i = 0; $i < 350; $i++) {
218
    $seq = _next_seq($subscription, $pattern);
219
}
220
$seq = _next_seq($subscription, $pattern);
221
is($seq, 'Z: 12, Y: 8, X: 4');
222
$seq = _next_seq($subscription, $pattern);
223
is($seq, 'Z: 1, Y: 1, X: 1');
224
225
226
sub _next_seq {
227
    my ($subscription, $pattern) = @_;
228
    my $seq;
229
    ($seq, $subscription->{lastvalue1}, $subscription->{lastvalue2},
230
        $subscription->{lastvalue3}, $subscription->{innerloop1},
231
        $subscription->{innerloop2}, $subscription->{innerloop3}) =
232
            GetNextSeq($subscription, $pattern);
233
    return $seq;
234
}
(-)a/t/db_dependent/Serials/GetNextSeq.t (-1 / +278 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
3
use C4::Context;
4
use Test::More tests => 32;
5
use Modern::Perl;
6
7
my $dbh = C4::Context->dbh;
8
$dbh->{RaiseError} = 1;
9
$dbh->{AutoCommit} = 0;
10
11
use C4::Serials::Frequency;
12
use C4::Serials;
13
14
my $frequency = {
15
    description => "One issue per day",
16
    unit => 'day',
17
    issuesperunit => 1,
18
    unitsperissue => 1,
19
};
20
my $id = AddSubscriptionFrequency($frequency);
21
22
# TEST CASE 1 - 1 variable, from 1 to 4
23
my $pattern = {
24
             add1 =>  1,          add2 =>  0,          add3 =>  0,
25
           every1 =>  1,        every2 =>  0,        every3 =>  0,
26
    whenmorethan1 =>  4, whenmorethan2 =>  0, whenmorethan3 =>  0,
27
           setto1 =>  1,        setto2 =>  0,        setto3 =>  0,
28
    numberingmethod => 'X: {X}',
29
    numbering1 => '',
30
    numbering2 => '',
31
    numbering3 => '',
32
};
33
34
my $subscription = {
35
    periodicity => $id,
36
    firstacquidate => '1970-01-01',
37
    lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
38
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
39
    skip_serialseq => 1,
40
    irregularity => '3;5',
41
    countissuesperunit => 1,
42
    locale => 'en',
43
};
44
my $publisheddate = $subscription->{firstacquidate};
45
46
my $seq = _next_seq($subscription, $pattern, $publisheddate);
47
is($seq, 'X: 2');
48
$publisheddate = GetNextDate($subscription, $publisheddate);
49
$seq = _next_seq($subscription, $pattern, $publisheddate);
50
is($seq, 'X: 4');
51
$publisheddate = GetNextDate($subscription, $publisheddate);
52
$seq = _next_seq($subscription, $pattern, $publisheddate);
53
is($seq, 'X: 2');
54
$publisheddate = GetNextDate($subscription, $publisheddate);
55
$seq = _next_seq($subscription, $pattern, $publisheddate);
56
is($seq, 'X: 3');
57
58
# TEST CASE 2 - 1 variable, use 'dayname' numbering, from 1 to 7
59
$subscription = {
60
    periodicity => $id,
61
    firstacquidate => '1970-01-01',
62
    lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
63
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
64
    skip_serialseq => 1,
65
    irregularity => '3;4;6',
66
    countissuesperunit => 1,
67
    locale => 'C',
68
};
69
$pattern = {
70
             add1 =>  1,          add2 =>  0,          add3 =>  0,
71
           every1 =>  1,        every2 =>  0,        every3 =>  0,
72
    whenmorethan1 =>  7, whenmorethan2 =>  0, whenmorethan3 =>  0,
73
           setto1 =>  1,        setto2 =>  0,        setto3 =>  0,
74
    numberingmethod => 'X: {X}',
75
    numbering1 => 'dayname',
76
    numbering2 => '',
77
    numbering3 => '',
78
};
79
80
$publisheddate = $subscription->{firstacquidate};
81
82
$seq = _next_seq($subscription, $pattern, $publisheddate);
83
is($seq, 'X: Tuesday');
84
$publisheddate = GetNextDate($subscription, $publisheddate);
85
$seq = _next_seq($subscription, $pattern, $publisheddate);
86
is($seq, 'X: Friday');
87
$publisheddate = GetNextDate($subscription, $publisheddate);
88
$seq = _next_seq($subscription, $pattern, $publisheddate);
89
is($seq, 'X: Sunday');
90
$publisheddate = GetNextDate($subscription, $publisheddate);
91
$seq = _next_seq($subscription, $pattern, $publisheddate);
92
is($seq, 'X: Monday');
93
$publisheddate = GetNextDate($subscription, $publisheddate);
94
$seq = _next_seq($subscription, $pattern, $publisheddate);
95
is($seq, 'X: Tuesday');
96
97
# TEST CASE 3 - 1 variable, use 'monthname' numbering, from 0 to 11 by step of 2
98
$subscription = {
99
    periodicity => $id,
100
    firstacquidate => '1970-01-01',
101
    lastvalue1 => 0, lastvalue2 => 1, lastvalue3 => 1,
102
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
103
    skip_serialseq => 1,
104
    irregularity => '3;4;6',
105
    countissuesperunit => 1,
106
    locale => 'C',
107
};
108
$pattern = {
109
             add1 =>  2,          add2 =>  0,          add3 =>  0,
110
           every1 =>  1,        every2 =>  0,        every3 =>  0,
111
    whenmorethan1 => 11, whenmorethan2 =>  0, whenmorethan3 =>  0,
112
           setto1 =>  0,        setto2 =>  0,        setto3 =>  0,
113
    numberingmethod => 'X: {X}',
114
    numbering1 => 'monthname',
115
    numbering2 => '',
116
    numbering3 => '',
117
};
118
119
$publisheddate = $subscription->{firstacquidate};
120
121
$seq = _next_seq($subscription, $pattern, $publisheddate);
122
is($seq, 'X: March');
123
$publisheddate = GetNextDate($subscription, $publisheddate);
124
$seq = _next_seq($subscription, $pattern, $publisheddate);
125
is($seq, 'X: September');
126
$publisheddate = GetNextDate($subscription, $publisheddate);
127
$seq = _next_seq($subscription, $pattern, $publisheddate);
128
is($seq, 'X: January');
129
$publisheddate = GetNextDate($subscription, $publisheddate);
130
$seq = _next_seq($subscription, $pattern, $publisheddate);
131
is($seq, 'X: March');
132
$publisheddate = GetNextDate($subscription, $publisheddate);
133
$seq = _next_seq($subscription, $pattern, $publisheddate);
134
is($seq, 'X: May');
135
136
# TEST CASE 4 - 1 variable, use 'season' numbering, from 0 to 3
137
$subscription = {
138
    periodicity => $id,
139
    firstacquidate => '1970-01-01',
140
    lastvalue1 => 0, lastvalue2 => 1, lastvalue3 => 1,
141
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
142
    skip_serialseq => 1,
143
    irregularity => '3;4;6',
144
    countissuesperunit => 1,
145
    locale => 'C',
146
};
147
$pattern = {
148
             add1 =>  1,          add2 =>  0,          add3 =>  0,
149
           every1 =>  1,        every2 =>  0,        every3 =>  0,
150
    whenmorethan1 =>  3, whenmorethan2 =>  0, whenmorethan3 =>  0,
151
           setto1 =>  0,        setto2 =>  0,        setto3 =>  0,
152
    numberingmethod => 'X: {X}',
153
    numbering1 => 'season',
154
    numbering2 => '',
155
    numbering3 => '',
156
};
157
158
$publisheddate = $subscription->{firstacquidate};
159
160
$seq = _next_seq($subscription, $pattern, $publisheddate);
161
is($seq, 'X: Summer');
162
$publisheddate = GetNextDate($subscription, $publisheddate);
163
$seq = _next_seq($subscription, $pattern, $publisheddate);
164
is($seq, 'X: Spring');
165
$publisheddate = GetNextDate($subscription, $publisheddate);
166
$seq = _next_seq($subscription, $pattern, $publisheddate);
167
is($seq, 'X: Fall');
168
$publisheddate = GetNextDate($subscription, $publisheddate);
169
$seq = _next_seq($subscription, $pattern, $publisheddate);
170
is($seq, 'X: Winter');
171
$publisheddate = GetNextDate($subscription, $publisheddate);
172
$seq = _next_seq($subscription, $pattern, $publisheddate);
173
is($seq, 'X: Spring');
174
175
# TEST CASE 5 - 2 variables, from 1 to 12, and from 1 to 4
176
$subscription = {
177
    periodicity => $id,
178
    firstacquidate => '1970-01-01',
179
    lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
180
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
181
    skip_serialseq => 1,
182
    irregularity => '3;4;6',
183
    countissuesperunit => 1,
184
    locale => 'C',
185
};
186
$pattern = {
187
             add1 =>  1,          add2 =>  1,          add3 =>  0,
188
           every1 =>  1,        every2 =>  4,        every3 =>  0,
189
    whenmorethan1 =>  4, whenmorethan2 => 12, whenmorethan3 =>  0,
190
           setto1 =>  1,        setto2 =>  1,        setto3 =>  0,
191
    numberingmethod => 'Y: {Y}, X: {X}',
192
    numbering1 => '',
193
    numbering2 => '',
194
    numbering3 => '',
195
};
196
197
$publisheddate = $subscription->{firstacquidate};
198
199
$seq = _next_seq($subscription, $pattern, $publisheddate);
200
is($seq, 'Y: 1, X: 2');
201
$publisheddate = GetNextDate($subscription, $publisheddate);
202
$seq = _next_seq($subscription, $pattern, $publisheddate);
203
is($seq, 'Y: 2, X: 1');
204
$publisheddate = GetNextDate($subscription, $publisheddate);
205
$seq = _next_seq($subscription, $pattern, $publisheddate);
206
is($seq, 'Y: 2, X: 3');
207
$publisheddate = GetNextDate($subscription, $publisheddate);
208
$seq = _next_seq($subscription, $pattern, $publisheddate);
209
is($seq, 'Y: 2, X: 4');
210
$publisheddate = GetNextDate($subscription, $publisheddate);
211
$seq = _next_seq($subscription, $pattern, $publisheddate);
212
is($seq, 'Y: 3, X: 1');
213
214
# TEST CASE 6 - 3 variables, from 1 to 12, from 1 to 8, and from 1 to 4
215
$subscription = {
216
    periodicity => $id,
217
    firstacquidate => '1970-01-01',
218
    lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
219
    innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
220
    skip_serialseq => 1,
221
    irregularity => '3;4;6;110',
222
    countissuesperunit => 1,
223
    locale => 'C',
224
};
225
$pattern = {
226
             add1 =>  1,          add2 =>  1,          add3 =>  1,
227
           every1 =>  1,        every2 =>  4,        every3 => 32,
228
    whenmorethan1 =>  4, whenmorethan2 =>  8, whenmorethan3 => 12,
229
           setto1 =>  1,        setto2 =>  1,        setto3 =>  1,
230
    numberingmethod => 'Z: {Z}, Y: {Y}, X: {X}',
231
    numbering1 => '',
232
    numbering2 => '',
233
    numbering3 => '',
234
};
235
236
$publisheddate = $subscription->{firstacquidate};
237
238
$seq = _next_seq($subscription, $pattern, $publisheddate);
239
is($seq, 'Z: 1, Y: 1, X: 2');
240
$publisheddate = GetNextDate($subscription, $publisheddate);
241
$seq = _next_seq($subscription, $pattern, $publisheddate);
242
is($seq, 'Z: 1, Y: 2, X: 1');
243
$publisheddate = GetNextDate($subscription, $publisheddate);
244
$seq = _next_seq($subscription, $pattern, $publisheddate);
245
is($seq, 'Z: 1, Y: 2, X: 3');
246
$publisheddate = GetNextDate($subscription, $publisheddate);
247
$seq = _next_seq($subscription, $pattern, $publisheddate);
248
is($seq, 'Z: 1, Y: 2, X: 4');
249
for (my $i = 0; $i < 100; $i++) {
250
    $publisheddate = GetNextDate($subscription, $publisheddate);
251
    $seq = _next_seq($subscription, $pattern, $publisheddate);
252
}
253
$publisheddate = GetNextDate($subscription, $publisheddate);
254
$seq = _next_seq($subscription, $pattern, $publisheddate);
255
is($seq, 'Z: 4, Y: 4, X: 1');
256
# 110th is here
257
$publisheddate = GetNextDate($subscription, $publisheddate);
258
$seq = _next_seq($subscription, $pattern, $publisheddate);
259
is($seq, 'Z: 4, Y: 4, X: 3');
260
$publisheddate = GetNextDate($subscription, $publisheddate);
261
$seq = _next_seq($subscription, $pattern, $publisheddate);
262
is($seq, 'Z: 4, Y: 4, X: 4');
263
$publisheddate = GetNextDate($subscription, $publisheddate);
264
$seq = _next_seq($subscription, $pattern, $publisheddate);
265
is($seq, 'Z: 4, Y: 5, X: 1');
266
267
268
$dbh->rollback;
269
270
sub _next_seq {
271
    my ($subscription, $pattern, $publisheddate) = @_;
272
    my $seq;
273
    ($seq, $subscription->{lastvalue1}, $subscription->{lastvalue2},
274
        $subscription->{lastvalue3}, $subscription->{innerloop1},
275
        $subscription->{innerloop2}, $subscription->{innerloop3}) =
276
            GetNextSeq($subscription, $pattern, $publisheddate);
277
    return $seq;
278
}

Return to bug 7688