public function paymentDateChange(UnitTester $I)
 {
     $user = \BB\Entities\User::create(['given_name' => 'Jon', 'family_name' => 'Doe', 'email' => '*****@*****.**']);
     $I->assertEquals(0, $user->payment_day);
     $user->payment_day = 10;
     $user->save();
     $I->assertEquals(10, $user->payment_day);
     $user->payment_day = 28;
     $user->save();
     $I->assertEquals(28, $user->payment_day);
     $user->payment_day = 31;
     $user->save();
     $I->assertEquals(1, $user->payment_day);
 }
 /**
  * @param array   $memberData The new members details
  * @param boolean $isAdminCreating Is the user making the change an admin
  * @return User
  */
 public function registerMember(array $memberData, $isAdminCreating)
 {
     if (empty($memberData['profile_photo_private'])) {
         $memberData['profile_photo_private'] = false;
     }
     if (empty($memberData['password'])) {
         unset($memberData['password']);
     }
     $memberData['hash'] = str_random(30);
     $memberData['rules_agreed'] = $memberData['rules_agreed'] ? Carbon::now() : null;
     $user = $this->model->create($memberData);
     $this->profileDataRepository->createProfile($user->id);
     $this->addressRepository->saveUserAddress($user->id, $memberData['address'], $isAdminCreating);
     return $user;
 }
<?php

use BB\Entities\Payment;
use BB\Entities\User;
$I = new UnitTester($scenario);
$I->wantTo('confirm the payment helper fetches the correct payment date');
//Create a user record
$user = User::create(['given_name' => 'Test', 'family_name' => 'Person', 'email' => '*****@*****.**']);
$date = \BB\Helpers\MembershipPayments::lastUserPaymentDate($user->id);
$I->assertFalse($date, 'Date should be false as no payments exist');
//Create some payment records
\BB\Entities\SubscriptionCharge::create(['user_id' => $user->id, 'charge_date' => '2014-01-01', 'payment_date' => '2014-01-01', 'status' => 'paid']);
Payment::create(['reason' => 'subscription', 'source' => 'other', 'user_id' => $user->id, 'amount' => 20, 'amount_minus_fee' => 20, 'status' => 'paid', 'created_at' => '2014-01-01']);
\BB\Entities\SubscriptionCharge::create(['user_id' => $user->id, 'charge_date' => '2014-06-01', 'status' => 'processing']);
Payment::create(['reason' => 'subscription', 'source' => 'other', 'user_id' => $user->id, 'amount' => 20, 'amount_minus_fee' => 20, 'status' => 'pending', 'created_at' => '2014-06-01']);
\BB\Entities\SubscriptionCharge::create(['user_id' => $user->id, 'charge_date' => '2014-08-01', 'status' => 'cancelled']);
Payment::create(['reason' => 'subscription', 'source' => 'other', 'user_id' => $user->id, 'amount' => 20, 'amount_minus_fee' => 20, 'status' => 'cancelled', 'created_at' => '2014-08-01']);
//Now we have some payments re-fetch the last payment date
$date = \BB\Helpers\MembershipPayments::lastUserPaymentDate($user->id);
//Make sure its a date that's returned
$I->assertEquals(get_parent_class($date), 'DateTime');
//Confirm the datetime matched the first payment record, the only paid one
$I->assertEquals(new \Carbon\Carbon('2014-01-01'), $date);
 public function createMember()
 {
     return User::create(['given_name' => 'Test', 'family_name' => 'Person', 'email' => '*****@*****.**']);
 }