@@ -39,6 +39,7 @@ my $body = $mech->create_body_ok(2498, 'Sutton Council', $params, {
3939});
4040my $kingston = $mech -> create_body_ok(2480, ' Kingston Council' , { %$params , cobrand => ' kingston' });
4141my $user = $mech -> create_user_ok(' test@example.net' , name => ' Normal User' );
42+ my $user2 = $mech -> create_user_ok(' test2@example.net' , name => ' Normal User The Second' );
4243my $staff = $mech -> create_user_ok(' staff@example.net' , name => ' Staff User' , from_body => $body -> id);
4344$staff -> user_body_permissions-> create({ body => $body , permission_type => ' report_edit' });
4445
@@ -945,6 +946,105 @@ FixMyStreet::override_config {
945946 $mech -> content_like(qr / Complaint against time.*LBS-123/ );
946947 $mech -> content_like(qr / Failure to Deliver.*LBS-789/ );
947948 };
949+
950+ subtest " Container request cancellations" => sub {
951+ my ($container_request_report ) = $mech -> create_problems_for_body(
952+ 1, $body -> id,
953+ ' Container request' , {
954+ cobrand => ' sutton' ,
955+ external_id => ' container-request-event-guid' ,
956+ cobrand_data => ' waste' ,
957+ user => $user ,
958+ }
959+ );
960+ $container_request_report -> set_extra_fields({
961+ name => ' service_id' ,
962+ value => 940, # Domestic Refuse Collection
963+ });
964+ $container_request_report -> update;
965+ my $open_container_request_event = {
966+ Id => ' 112112321' ,
967+ ServiceId => 940, # Domestic Refuse Collection
968+ ClientReference => ' LBS-789' ,
969+ EventTypeId => 3129, # Container request
970+ EventDate => { DateTime => " 2025-02-03T08:00:00Z" },
971+ Data => { ExtensibleDatum => [
972+ { Value => 2, DatatypeName => ' Source' },
973+ {
974+ ChildData => { ExtensibleDatum => [
975+ { Value => 1, DatatypeName => ' Action' },
976+ { Value => 1, DatatypeName => ' Container Type' }, # Refuse container
977+ ] },
978+ },
979+ ] },
980+ Guid => ' container-request-event-guid' ,
981+ };
982+ $e -> mock(' GetServiceUnitsForObject' , sub { $bin_data });
983+ $e -> mock(' GetEventsForObject' , sub { [$open_container_request_event ] });
984+
985+ my $cancellation_url = " /waste/12345/request/cancel/" . $container_request_report -> id;
986+ my $cancel_form_title = " Cancel your non-recyclable refuse container request" ;
987+ set_fixed_time(' 2025-02-05T08:00:00Z' );
988+
989+ subtest " Link shown" => sub {
990+ $mech -> get_ok(' /waste/12345' );
991+ $mech -> content_contains($cancellation_url );
992+ };
993+
994+ foreach ((
995+ {
996+ scenario => " Staff" ,
997+ can_cancel => 1,
998+ user => $staff ,
999+ },
1000+ {
1001+ scenario => " The user that made the request" ,
1002+ can_cancel => 1,
1003+ user => $user ,
1004+ },
1005+ {
1006+ scenario => " Random user" ,
1007+ can_cancel => 0,
1008+ user => $user2 ,
1009+ },
1010+ )) {
1011+ my $can_cancel = $_ -> {can_cancel };
1012+ my $can_cancel_text = $can_cancel ? ' can cancel' : " can't cancel" ;
1013+ my $scenario = $_ -> {scenario };
1014+ my $u = $_ -> {user };
1015+ subtest " $scenario $can_cancel_text " => sub {
1016+ $mech -> log_in_ok($u -> email);
1017+ $mech -> get_ok($cancellation_url );
1018+ if ($can_cancel ) {
1019+ $mech -> content_contains($cancel_form_title );
1020+ } else {
1021+ $mech -> content_lacks($cancel_form_title );
1022+ }
1023+ };
1024+ }
1025+
1026+ subtest " Cancel" => sub {
1027+ $mech -> log_in_ok($user -> email);
1028+ $mech -> get_ok($cancellation_url );
1029+ $mech -> content_contains($cancel_form_title );
1030+ $mech -> content_contains(" I acknowledge that the payment will not be refunded" );
1031+ $mech -> submit_form_ok( { with_fields => { confirm => 1 } } );
1032+ $mech -> content_contains(" Your non-recyclable refuse container request has been cancelled." );
1033+ $container_request_report -> discard_changes;
1034+ is $container_request_report -> state, ' cancelled' ;
1035+ my $latest_comment = $container_request_report -> comments-> search(
1036+ {},
1037+ { order_by => { -desc => ' id' } },
1038+ )-> first;
1039+ is $latest_comment -> text, " Request cancelled" ;
1040+ };
1041+
1042+ subtest " Link not shown after already cancelled" => sub {
1043+ $mech -> log_in_ok($user -> email);
1044+ $mech -> content_lacks($cancellation_url );
1045+ };
1046+ };
1047+
9481048};
9491049
9501050sub get_report_from_redirect {
0 commit comments