#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use FixMyStreet::App;
use FindBin;
use lib "$FindBin::Bin/../perllib";
use lib "$FindBin::Bin/../commonlib/perllib";
use_ok( 'Open311::PopulateServiceList' );
use_ok( 'Open311' );
my $processor = Open311::PopulateServiceList->new( council_list => [] );
ok $processor, 'created object';
subtest 'check basic functionality' => sub {
FixMyStreet::App->model('DB::Contact')->search( { area_id => 1 } )->delete();
my $xml = qq{
001
Cans left out 24x7
Garbage or recycling cans that have been left out for more than 24 hours after collection. Violators will be cited.
false
realtime
lorem, ipsum, dolor
sanitation
002
false
realtime
lorem, ipsum, dolor
street
Construction plate shifted
Metal construction plate covering the street or sidewalk has been moved.
003
false
realtime
lorem, ipsum, dolor
street
Curb or curb ramp defect
Sidewalk curb or ramp has problems such as cracking, missing pieces, holes, and/or chipped curb.
};
my $simple = XML::Simple->new();
my $obj;
eval {
$obj = $simple->XMLin( $xml );
};
my $council = FixMyStreet::App->model('DB::Open311Conf')->new( {
area_id => 1
} );
my $processor = Open311::PopulateServiceList->new( council_list => [] );
$processor->_current_council( $council );
$processor->process_services( $obj );
my $contact_count = FixMyStreet::App->model('DB::Contact')->search( { area_id => 1 } )->count();
is $contact_count, 3, 'correct number of contacts';
};
subtest 'check duplicate service name issues error' => sub {
FixMyStreet::App->model('DB::Contact')->search( { area_id => 1 } )->delete();
my $contact = FixMyStreet::App->model('DB::Contact')->create(
{
area_id => 1,
email => '009',
category => 'Cans left out 24x7',
confirmed => 1,
deleted => 0,
editor => $0,
whenedited => \'ms_current_timestamp()',
note => 'test contact',
}
);
ok $contact, 'contact created';
my $xml = qq{
001
Cans left out 24x7
Garbage or recycling cans that have been left out for more than 24 hours after collection. Violators will be cited.
false
realtime
lorem, ipsum, dolor
sanitation
002
false
realtime
lorem, ipsum, dolor
street
Construction plate shifted
Metal construction plate covering the street or sidewalk has been moved.
003
false
realtime
lorem, ipsum, dolor
street
Curb or curb ramp defect
Sidewalk curb or ramp has problems such as cracking, missing pieces, holes, and/or chipped curb.
};
my $simple = XML::Simple->new();
my $obj;
eval {
$obj = $simple->XMLin( $xml );
};
my $council = FixMyStreet::App->model('DB::Open311Conf')->new( {
area_id => 1
} );
my $processor = Open311::PopulateServiceList->new( council_list => [] );
$processor->_current_council( $council );
$processor->process_services( $obj );
$contact->discard_changes;
is $contact->email, '009', 'email unchanged';
is $contact->confirmed, 1, 'contact still confirmed';
is $contact->deleted, 0, 'contact still not deleted';
my $contact_count = FixMyStreet::App->model('DB::Contact')->search( { area_id => 1 } )->count();
is $contact_count, 3, 'correct number of contacts';
};
subtest 'check category name changed if updated' => sub {
FixMyStreet::App->model('DB::Contact')->search( { area_id => 1 } )->delete();
my $contact = FixMyStreet::App->model('DB::Contact')->create(
{
area_id => 1,
email => '001',
category => 'Bins left out 24x7',
confirmed => 1,
deleted => 0,
editor => $0,
whenedited => \'ms_current_timestamp()',
note => 'test contact',
}
);
ok $contact, 'contact created';
my $xml = qq{
001
Cans left out 24x7
Garbage or recycling cans that have been left out for more than 24 hours after collection. Violators will be cited.
false
realtime
lorem, ipsum, dolor
sanitation
002
false
realtime
lorem, ipsum, dolor
street
Construction plate shifted
Metal construction plate covering the street or sidewalk has been moved.
003
false
realtime
lorem, ipsum, dolor
street
Curb or curb ramp defect
Sidewalk curb or ramp has problems such as cracking, missing pieces, holes, and/or chipped curb.
};
my $simple = XML::Simple->new();
my $obj;
eval {
$obj = $simple->XMLin( $xml );
};
my $council = FixMyStreet::App->model('DB::Open311Conf')->new( {
area_id => 1
} );
my $processor = Open311::PopulateServiceList->new( council_list => [] );
$processor->_current_council( $council );
$processor->process_services( $obj );
$contact->discard_changes;
is $contact->email, '001', 'email unchanged';
is $contact->category, 'Cans left out 24x7', 'category changed';
is $contact->confirmed, 1, 'contact still confirmed';
is $contact->deleted, 0, 'contact still not deleted';
my $contact_count = FixMyStreet::App->model('DB::Contact')->search( { area_id => 1 } )->count();
is $contact_count, 3, 'correct number of contacts';
};
done_testing();