140 lines
3.6 KiB
PHP
140 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\Presenters;
|
|
|
|
use Carbon\Carbon;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Tests\TestCase;
|
|
use Vanguard\Presenters\UserPresenter;
|
|
use Vanguard\Support\Enum\UserStatus;
|
|
|
|
class UserPresenterTest extends TestCase
|
|
{
|
|
protected $user;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->user = new PresentableUser;
|
|
}
|
|
|
|
public function testName()
|
|
{
|
|
$this->assertEquals('John Doe', $this->user->present()->name);
|
|
}
|
|
|
|
/** @test */
|
|
public function nameOrEmail()
|
|
{
|
|
$this->assertEquals('John Doe', $this->user->present()->nameOrEmail);
|
|
|
|
$this->user->first_name = '';
|
|
$this->assertEquals('Doe', $this->user->present()->nameOrEmail);
|
|
|
|
$this->user->last_name = '';
|
|
$this->assertEquals('john.doe@test.com', $this->user->present()->nameOrEmail);
|
|
}
|
|
|
|
/** @test */
|
|
public function avatar()
|
|
{
|
|
$this->assertEquals(url('assets/img/profile.png'), $this->user->present()->avatar);
|
|
|
|
$this->user->avatar = '//www.gravatar.com/avatar';
|
|
$this->assertEquals('//www.gravatar.com/avatar', $this->user->present()->avatar);
|
|
|
|
$this->user->avatar = 'http://somewebsite.com/avatar.png';
|
|
$this->assertEquals('http://somewebsite.com/avatar.png', $this->user->present()->avatar);
|
|
|
|
$this->user->avatar = 'foo.png';
|
|
$this->assertEquals(url('upload/users/foo.png'), $this->user->present()->avatar);
|
|
}
|
|
|
|
/** @test */
|
|
public function birthday()
|
|
{
|
|
$this->assertEquals('N/A', $this->user->present()->birthday);
|
|
|
|
$this->user->birthday = Carbon::now()->subYears(20);
|
|
$this->assertEquals($this->user->birthday->toDateString(), $this->user->present()->birthday);
|
|
}
|
|
|
|
/** @test */
|
|
public function fullAddress()
|
|
{
|
|
$this->assertEquals('Some Country', $this->user->present()->fullAddress);
|
|
|
|
$this->user->address = 'Street 123';
|
|
$this->assertEquals('Street 123, Some Country', $this->user->present()->fullAddress);
|
|
|
|
$this->user->country_id = null;
|
|
$this->user->country = null;
|
|
$this->assertEquals('Street 123', $this->user->present()->fullAddress);
|
|
|
|
$this->user->address = '';
|
|
$this->assertEquals('N/A', $this->user->present()->fullAddress);
|
|
}
|
|
|
|
/** @test */
|
|
public function lastLogin()
|
|
{
|
|
$this->assertEquals('N/A', $this->user->present()->lastLogin);
|
|
|
|
$date = Carbon::now()->subDay(1);
|
|
$this->user->last_login = $date->copy();
|
|
$this->assertEquals($date->diffForHumans(), $this->user->present()->lastLogin);
|
|
}
|
|
|
|
/** @test */
|
|
public function labelClass()
|
|
{
|
|
$this->assertEquals('success', $this->user->present()->labelClass);
|
|
|
|
$this->user->status = UserStatus::BANNED;
|
|
$this->assertEquals('danger', $this->user->present()->labelClass);
|
|
|
|
$this->user->status = UserStatus::UNCONFIRMED;
|
|
$this->assertEquals('warning', $this->user->present()->labelClass);
|
|
}
|
|
}
|
|
|
|
class PresentableUser extends Model
|
|
{
|
|
use \Vanguard\Presenters\Traits\Presentable;
|
|
|
|
protected $presenter = UserPresenter::class;
|
|
|
|
public $first_name = 'John';
|
|
|
|
public $last_name = 'Doe';
|
|
|
|
public $email = 'john.doe@test.com';
|
|
|
|
public $avatar = null;
|
|
|
|
public $birthday = null;
|
|
|
|
public $country_id = 1;
|
|
|
|
public $country;
|
|
|
|
public $address = '';
|
|
|
|
public $last_login = null;
|
|
|
|
public $status = UserStatus::ACTIVE;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->country = new StubCountry;
|
|
}
|
|
}
|
|
|
|
class StubCountry
|
|
{
|
|
public $id = 1;
|
|
|
|
public $name = 'Some Country';
|
|
}
|