+my $builder = t::lib::TestBuilder->new;
+
+my $schema = Koha::Database->new->schema;
+
+subtest 'Test generation of annual barcodes from DB values' => sub {
+
+ plan tests => 4;
+
+ $schema->storage->txn_begin;
+ $builder->schema->resultset( 'Issue' )->delete_all;
+ $builder->schema->resultset( 'Item' )->delete_all;
+
+ my $barcodeobj;
+
+ warning_like { $barcodeobj = C4::Barcodes->new('annual'); } [ qr/No max barcode (.*) found\. Using initial value\./ ], "(annual) Expected complaint regarding no max barcode found";
+
+ my $barcodevalue = $barcodeobj->value();
+
+ my $item_1 = $builder->build({
+ source => 'Item',
+ value => {
+ barcode => $barcodevalue
+ }
+ });
+
+ is($barcodevalue,$barcodeobj->db_max(), "(annual) First barcode saved to db is equal to db_max" );
+
+ #This is just setting the value ahead an arbitrary amount before adding a second barcode to db
+ $barcodevalue = $barcodeobj->next_value();
+ $barcodevalue = $barcodeobj->next_value($barcodevalue);
+ $barcodevalue = $barcodeobj->next_value($barcodevalue);
+ $barcodevalue = $barcodeobj->next_value($barcodevalue);
+ $barcodevalue = $barcodeobj->next_value($barcodevalue);
+
+ my $item_2 = $builder->build({
+ source => 'Item',
+ value => {
+ barcode => $barcodevalue
+ }
+ });
+
+ $barcodeobj = C4::Barcodes->new('annual');
+
+ is($barcodevalue,$barcodeobj->db_max(), '(annual) db_max should equal the greatest barcode in the db when more than 1 present');
+ ok($barcodeobj->value() gt $barcodevalue, '(annual) new barcode object should be created with value greater and last value inserted into db');
+
+ $schema->storage->txn_rollback;
+};
+
+subtest 'Test generation of hbyymmincr barcodes from DB values' => sub {
+
+ plan tests => 5;
+
+ $schema->storage->txn_begin;
+ $builder->schema->resultset( 'Issue' )->delete_all;
+ $builder->schema->resultset( 'Item' )->delete_all;
+
+ my $branchcode_1 = "LETTERS"; #NOTE: This barcode type supports only letters in the branchcode
+ my $barcodeobj;
+
+ warnings_are { $barcodeobj = C4::Barcodes->new('hbyymmincr'); }
+ [ "HBYYMM Barcode created with no branchcode, default is blank",
+ "No existing hbyymmincr barcodes found. Reverting to initial value.",
+ "HBYYMM Barcode was not passed a branch, default is blank"]
+ , "(hbyymmincr) Expected complaint regarding no max barcode found";
+
+
+ warning_like { $barcodeobj = C4::Barcodes->new('hbyymmincr',$branchcode_1); }
+ [ qr/No existing hbyymmincr barcodes found\. Reverting to initial value\./],
+ "(hbyymmincr) Expected complaint regarding no max barcode found";
+
+ my $barcodevalue = $barcodeobj->value();
+
+ my $item_1 = $builder->build({
+ source => 'Item',
+ value => {
+ barcode => $barcodevalue
+ }
+ });
+
+ is($barcodevalue,$barcodeobj->db_max(), "(hbyymmincr) First barcode saved to db is equal to db_max" );
+
+ #This is just setting the value ahead an arbitrary amount before adding a second barcode to db
+ $barcodevalue = $barcodeobj->next_value();
+ $barcodevalue = $barcodeobj->next_value($barcodevalue);
+ $barcodevalue = $barcodeobj->next_value($barcodevalue);
+ $barcodevalue = $barcodeobj->next_value($barcodevalue);
+ $barcodevalue = $barcodeobj->next_value($barcodevalue);
+
+ my $item_2 = $builder->build({
+ source => 'Item',
+ value => {
+ barcode => $barcodevalue
+ }
+ });
+
+ $barcodeobj = C4::Barcodes->new('hbyymmincr',$branchcode_1);
+
+ is($barcodevalue,$barcodeobj->db_max(), '(hbyymmincr) db_max should equal the greatest barcode in the db when more than 1 present');
+ ok($barcodeobj->value() gt $barcodevalue, '(hbyymmincr) new barcode object should be created with value greater and last value inserted into db');
+
+ $schema->storage->txn_rollback;
+};
+
+
+$schema->storage->txn_begin;
+
+$builder->schema->resultset( 'Issue' )->delete_all;
+$builder->schema->resultset( 'Item' )->delete_all;
+