From 9ab969ef6e2d217c4a2fedd88b1ed855a4c62f3d Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@biblibre.com>
Date: Wed, 27 Mar 2013 16:53:56 +0100
Subject: [PATCH] Bug 8435: Followup add unit tests for can_edit_subscription

---
 C4/Serials.pm              |   11 +++++++-
 t/db_dependent/Serials_2.t |   63 +++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 69 insertions(+), 5 deletions(-)

diff --git a/C4/Serials.pm b/C4/Serials.pm
index 4649dae..1aa7360 100644
--- a/C4/Serials.pm
+++ b/C4/Serials.pm
@@ -20,6 +20,7 @@ package C4::Serials;
 
 use strict;
 use warnings;
+use C4::Auth qw(haspermission);
 use C4::Context;
 use C4::Dates qw(format_date format_date_in_iso);
 use Date::Calc qw(:all);
@@ -2521,13 +2522,21 @@ sub subscriptionCurrentlyOnOrder {
     return $sth->fetchrow_array;
 }
 
+=head2 can_edit_subscription
+
+    $can = can_edit_subscription( $subscriptionid[, $userid] );
+
+Return 1 if the subscription is editable by the current logged user (or a given $userid), else 0.
+
+=cut
+
 sub can_edit_subscription {
     my ( $subscription, $userid ) = @_;
     my $flags = C4::Context->userenv->{flags};
     $userid ||= C4::Context->userenv->{'id'};
     my $independant_branches = C4::Context->preference('IndependantBranches');
     return 1 unless $independant_branches;
-    if( $flags % 2 == 1
+    if( $flags % 2 == 1 # superlibrarian
         or C4::Auth::haspermission( $userid, {serials => 'superserials'}),
         or C4::Auth::haspermission( $userid, {serials => 'edit_subscription'}),
         or not defined $subscription->{branchcode}
diff --git a/t/db_dependent/Serials_2.t b/t/db_dependent/Serials_2.t
index 01cf853..7c37dee 100644
--- a/t/db_dependent/Serials_2.t
+++ b/t/db_dependent/Serials_2.t
@@ -1,10 +1,65 @@
 #!/usr/bin/perl
-use strict;
-use warnings;
+use Modern::Perl;
 
-use Test::More;
+use Test::More tests => 4;
 
 use_ok('C4::Serials');
+use_ok('C4::Budgets');
+
 my $supplierlist=eval{GetSuppliersWithLateIssues()};
 ok(length($@)==0,"No SQL problem in GetSuppliersWithLateIssues");
-done_testing();
+
+my $biblionumber = 1;
+my $budgetid;
+my $bpid = AddBudgetPeriod({
+    budget_period_startdate => '01-01-2015',
+    budget_period_enddate   => '31-12-2015',
+    budget_description      => "budget desc"
+});
+
+my $budget_id = AddBudget({
+    budget_code        => "ABCD",
+    budget_amount      => "123.132",
+    budget_name        => "Périodiques",
+    budget_notes       => "This is a note",
+    budget_description => "Serials",
+    budget_active      => 1,
+    budget_period_id   => $bpid
+});
+
+my $subscriptionid = NewSubscription(
+    undef,      "",     undef, undef, $budget_id, $biblionumber, '01-01-2013',undef,
+    undef,      undef,  undef, undef, undef,      undef,         undef,  undef,
+    undef,      undef,  undef, undef, undef,      undef,         undef,  undef,
+    undef,      undef,  undef, undef, undef,      undef,         undef,  1,
+    "notes",    undef,  undef, undef, undef,      undef,         undef,  0,
+    "intnotes", 0,      undef, undef, 0,          undef,         '31-12-2013',
+);
+die unless $subscriptionid;
+
+# Can edit a subscription
+my @USERENV = (
+    1,
+    'test',
+    'MASTERTEST',
+    'Test',
+    'Test',
+    't',
+    0,
+    0,
+);
+
+C4::Context->_new_userenv ('DUMMY_SESSION_ID');
+C4::Context->set_userenv ( @USERENV );
+my $userenv = C4::Context->userenv;
+
+my $subscription = GetSubscription( $subscriptionid );
+
+is( C4::Serials::can_edit_subscription($subscription), 1, "User can edit a subscription with an empty branchcode");
+#TODO add UT when C4::Auth->set_permissions (or setuserflags) will exist.
+
+
+# cleaning
+DelSubscription( $subscription->{subscriptionid} );
+DelBudgetPeriod($bpid);
+DelBudget($budget_id);
-- 
1.7.10.4