first commit
This commit is contained in:
228
vendor/encore/laravel-admin/tests/UserGridTest.php
vendored
Normal file
228
vendor/encore/laravel-admin/tests/UserGridTest.php
vendored
Normal file
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
|
||||
use Encore\Admin\Auth\Database\Administrator;
|
||||
use Tests\Models\Profile as ProfileModel;
|
||||
use Tests\Models\User as UserModel;
|
||||
|
||||
class UserGridTest extends TestCase
|
||||
{
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->be(Administrator::first(), 'admin');
|
||||
}
|
||||
|
||||
public function testIndexPage()
|
||||
{
|
||||
$this->visit('admin/users')
|
||||
->see('All users')
|
||||
->seeInElement('tr th', 'Username')
|
||||
->seeInElement('tr th', 'Email')
|
||||
->seeInElement('tr th', 'Mobile')
|
||||
->seeInElement('tr th', 'Full name')
|
||||
->seeInElement('tr th', 'Avatar')
|
||||
->seeInElement('tr th', 'Post code')
|
||||
->seeInElement('tr th', 'Address')
|
||||
->seeInElement('tr th', 'Position')
|
||||
->seeInElement('tr th', 'Color')
|
||||
->seeInElement('tr th', '开始时间')
|
||||
->seeInElement('tr th', '结束时间')
|
||||
->seeInElement('tr th', 'Color')
|
||||
->seeInElement('tr th', 'Created at')
|
||||
->seeInElement('tr th', 'Updated at');
|
||||
|
||||
$action = url('/admin/users');
|
||||
|
||||
$this->seeElement("form[action='$action'][method=get]")
|
||||
->seeElement("form[action='$action'][method=get] input[name=id]")
|
||||
->seeElement("form[action='$action'][method=get] input[name=username]")
|
||||
->seeElement("form[action='$action'][method=get] input[name=email]")
|
||||
->seeElement("form[action='$action'][method=get] input[name='profile[start_at][start]']")
|
||||
->seeElement("form[action='$action'][method=get] input[name='profile[start_at][end]']")
|
||||
->seeElement("form[action='$action'][method=get] input[name='profile[end_at][start]']")
|
||||
->seeElement("form[action='$action'][method=get] input[name='profile[end_at][end]']");
|
||||
|
||||
$this->seeInElement('a[href="/admin/users?_export_=all"]', 'All')
|
||||
->seeInElement('a[href="/admin/users/create"]', 'New');
|
||||
}
|
||||
|
||||
protected function seedsTable($count = 100)
|
||||
{
|
||||
factory(\Tests\Models\User::class, $count)
|
||||
->create()
|
||||
->each(function ($u) {
|
||||
$u->profile()->save(factory(\Tests\Models\Profile::class)->make());
|
||||
$u->tags()->saveMany(factory(\Tests\Models\Tag::class, 5)->make());
|
||||
});
|
||||
}
|
||||
|
||||
public function testGridWithData()
|
||||
{
|
||||
$this->seedsTable();
|
||||
|
||||
$this->visit('admin/users')
|
||||
->see('All users');
|
||||
|
||||
$this->assertCount(100, UserModel::all());
|
||||
$this->assertCount(100, ProfileModel::all());
|
||||
}
|
||||
|
||||
public function testGridPagination()
|
||||
{
|
||||
$this->seedsTable(65);
|
||||
|
||||
$this->visit('admin/users')
|
||||
->see('All users');
|
||||
|
||||
$this->visit('admin/users?page=2');
|
||||
$this->assertCount(20, $this->crawler()->filter('td a i[class*=fa-edit]'));
|
||||
|
||||
$this->visit('admin/users?page=3');
|
||||
$this->assertCount(20, $this->crawler()->filter('td a i[class*=fa-edit]'));
|
||||
|
||||
$this->visit('admin/users?page=4');
|
||||
$this->assertCount(5, $this->crawler()->filter('td a i[class*=fa-edit]'));
|
||||
|
||||
$this->click(1)->seePageIs('admin/users?page=1');
|
||||
$this->assertCount(20, $this->crawler()->filter('td a i[class*=fa-edit]'));
|
||||
}
|
||||
|
||||
public function testEqualFilter()
|
||||
{
|
||||
$this->seedsTable(50);
|
||||
|
||||
$this->visit('admin/users')
|
||||
->see('All users');
|
||||
|
||||
$this->assertCount(50, UserModel::all());
|
||||
$this->assertCount(50, ProfileModel::all());
|
||||
|
||||
$id = rand(1, 50);
|
||||
|
||||
$user = UserModel::find($id);
|
||||
|
||||
$this->visit('admin/users?id='.$id)
|
||||
->seeInElement('td', $user->username)
|
||||
->seeInElement('td', $user->email)
|
||||
->seeInElement('td', $user->mobile)
|
||||
->seeElement("img[src='{$user->avatar}']")
|
||||
->seeInElement('td', "{$user->profile->first_name} {$user->profile->last_name}")
|
||||
->seeInElement('td', $user->postcode)
|
||||
->seeInElement('td', $user->address)
|
||||
->seeInElement('td', "{$user->profile->latitude} {$user->profile->longitude}")
|
||||
->seeInElement('td', $user->color)
|
||||
->seeInElement('td', $user->start_at)
|
||||
->seeInElement('td', $user->end_at);
|
||||
}
|
||||
|
||||
public function testLikeFilter()
|
||||
{
|
||||
$this->seedsTable(50);
|
||||
|
||||
$this->visit('admin/users')
|
||||
->see('All users');
|
||||
|
||||
$this->assertCount(50, UserModel::all());
|
||||
$this->assertCount(50, ProfileModel::all());
|
||||
|
||||
$users = UserModel::where('username', 'like', '%mi%')->get();
|
||||
|
||||
$this->visit('admin/users?username=mi');
|
||||
|
||||
$this->assertCount($this->crawler()->filter('table tr')->count() - 1, $users);
|
||||
|
||||
foreach ($users as $user) {
|
||||
$this->seeInElement('td', $user->username);
|
||||
}
|
||||
}
|
||||
|
||||
public function testFilterRelation()
|
||||
{
|
||||
$this->seedsTable(50);
|
||||
|
||||
$user = UserModel::with('profile')->find(rand(1, 50));
|
||||
|
||||
$this->visit('admin/users?email='.$user->email)
|
||||
->seeInElement('td', $user->username)
|
||||
->seeInElement('td', $user->email)
|
||||
->seeInElement('td', $user->mobile)
|
||||
->seeElement("img[src='{$user->avatar}']")
|
||||
->seeInElement('td', "{$user->profile->first_name} {$user->profile->last_name}")
|
||||
->seeInElement('td', $user->postcode)
|
||||
->seeInElement('td', $user->address)
|
||||
->seeInElement('td', "{$user->profile->latitude} {$user->profile->longitude}")
|
||||
->seeInElement('td', $user->color)
|
||||
->seeInElement('td', $user->start_at)
|
||||
->seeInElement('td', $user->end_at);
|
||||
}
|
||||
|
||||
public function testDisplayCallback()
|
||||
{
|
||||
$this->seedsTable(1);
|
||||
|
||||
$user = UserModel::with('profile')->find(1);
|
||||
|
||||
$this->visit('admin/users')
|
||||
->seeInElement('th', 'Column1 not in table')
|
||||
->seeInElement('th', 'Column2 not in table')
|
||||
->seeInElement('td', "full name:{$user->profile->first_name} {$user->profile->last_name}")
|
||||
->seeInElement('td', "{$user->email}#{$user->profile->color}");
|
||||
}
|
||||
|
||||
public function testHasManyRelation()
|
||||
{
|
||||
factory(\Tests\Models\User::class, 10)
|
||||
->create()
|
||||
->each(function ($u) {
|
||||
$u->profile()->save(factory(\Tests\Models\Profile::class)->make());
|
||||
$u->tags()->saveMany(factory(\Tests\Models\Tag::class, 5)->make());
|
||||
});
|
||||
|
||||
$this->visit('admin/users')
|
||||
->seeElement('td code');
|
||||
|
||||
$this->assertCount(50, $this->crawler()->filter('td code'));
|
||||
}
|
||||
|
||||
public function testGridActions()
|
||||
{
|
||||
$this->seedsTable(15);
|
||||
|
||||
$this->visit('admin/users');
|
||||
|
||||
$this->assertCount(15, $this->crawler()->filter('td a i[class*=fa-edit]'));
|
||||
$this->assertCount(15, $this->crawler()->filter('td a i[class*=fa-trash]'));
|
||||
}
|
||||
|
||||
public function testGridRows()
|
||||
{
|
||||
$this->seedsTable(10);
|
||||
|
||||
$this->visit('admin/users')
|
||||
->seeInElement('td a[class*=btn]', 'detail');
|
||||
|
||||
$this->assertCount(5, $this->crawler()->filter('td a[class*=btn]'));
|
||||
}
|
||||
|
||||
public function testGridPerPage()
|
||||
{
|
||||
$this->seedsTable(98);
|
||||
|
||||
$this->visit('admin/users')
|
||||
->seeElement('select[class*=per-page][name=per-page]')
|
||||
->seeInElement('select option', 10)
|
||||
->seeInElement('select option[selected]', 20)
|
||||
->seeInElement('select option', 30)
|
||||
->seeInElement('select option', 50)
|
||||
->seeInElement('select option', 100);
|
||||
|
||||
$this->assertEquals('http://localhost:8000/admin/users?per_page=20', $this->crawler()->filter('select option[selected]')->attr('value'));
|
||||
|
||||
$perPage = rand(1, 98);
|
||||
|
||||
$this->visit('admin/users?per_page='.$perPage)
|
||||
->seeInElement('select option[selected]', $perPage)
|
||||
->assertCount($perPage + 1, $this->crawler()->filter('tr'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user