UserFormTest.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. namespace Dcat\Admin\Tests\Feature;
  3. use Tests\Models\User as UserModel;
  4. use Dcat\Admin\Tests\TestCase;
  5. /**
  6. * @group user-form
  7. */
  8. class UserFormTest extends TestCase
  9. {
  10. public function testCreatePage()
  11. {
  12. $this->visit('admin/tests/users/create')
  13. ->seeElement('input[type=text][name=username]')
  14. ->seeElement('input[type=email][name=email]')
  15. ->seeElement('input[type=text][name=mobile]')
  16. // ->seeElement('input[type=file][name=avatar]')
  17. ->seeElement('hr')
  18. ->seeElement("input[type=text][name='profile[first_name]']")
  19. ->seeElement("input[type=text][name='profile[last_name]']")
  20. ->seeElement("input[type=text][name='profile[postcode]']")
  21. ->seeElement("textarea[name='profile[address]'][rows=15]")
  22. ->seeElement("input[type=hidden][name='profile[latitude]']")
  23. ->seeElement("input[type=hidden][name='profile[longitude]']")
  24. ->seeElement("input[type=text][name='profile[color]']")
  25. ->seeElement("input[type=text][name='profile[start_at]']")
  26. ->seeElement("input[type=text][name='profile[end_at]']")
  27. ->seeElement('span[class=help-block] i[class*=fa-info-circle]')
  28. ->seeInElement('span[class=help-block]', 'Please input your postcode')
  29. ->seeElement('span[class=help-block] i[class*=fa-image]')
  30. ->seeInElement('span[class=help-block]', '上传头像')
  31. ->seeElement("select[name='tags[]'][multiple=multiple]")
  32. ->seeInElement('a[html-field]', 'html...');
  33. }
  34. public function testSubmitForm()
  35. {
  36. $data = [
  37. 'username' => 'John Doe',
  38. 'email' => 'hello@world.com',
  39. 'mobile' => '13421234123',
  40. 'password' => '123456',
  41. 'password_confirmation' => '123456',
  42. //"avatar" => "test.jpg",
  43. 'profile' => [
  44. 'first_name' => 'John',
  45. 'last_name' => 'Doe',
  46. 'postcode' => '123456',
  47. 'address' => 'Jinshajiang RD',
  48. 'latitude' => '131.2123123456',
  49. 'longitude' => '21.342123456',
  50. 'color' => '#ffffff',
  51. 'start_at' => date('Y-m-d H:i:s', time()),
  52. 'end_at' => date('Y-m-d H:i:s', time()),
  53. ],
  54. ];
  55. $this->visit('admin/tests/users/create')
  56. // ->attach(__DIR__.'/assets/test.jpg', 'avatar')
  57. ->submitForm('Submit', $data);
  58. $this->seePageIs('admin/tests/users')
  59. ->seeInElement('td', 1)
  60. ->seeInElement('td', $data['username'])
  61. ->seeInElement('td', $data['email'])
  62. ->seeInElement('td', $data['mobile'])
  63. ->seeInElement('td', "{$data['profile']['first_name']} {$data['profile']['last_name']}")
  64. ->seeElement('td img')
  65. ->seeInElement('td', $data['profile']['postcode'])
  66. ->seeInElement('td', $data['profile']['address'])
  67. // ->seeInElement('td', "{$data['profile']['latitude']} {$data['profile']['longitude']}")
  68. ->seeInElement('td', $data['profile']['color'])
  69. ->seeInElement('td', $data['profile']['start_at'])
  70. ->seeInElement('td', $data['profile']['end_at']);
  71. $this->assertCount(1, UserModel::all());
  72. $this->seeInDatabase('test_users', ['username' => $data['username']]);
  73. $this->seeInDatabase('test_users', ['email' => $data['email']]);
  74. $this->seeInDatabase('test_users', ['mobile' => $data['mobile']]);
  75. $this->seeInDatabase('test_users', ['password' => $data['password']]);
  76. $this->seeInDatabase('test_user_profiles', ['first_name' => $data['profile']['first_name']]);
  77. $this->seeInDatabase('test_user_profiles', ['last_name' => $data['profile']['last_name']]);
  78. $this->seeInDatabase('test_user_profiles', ['postcode' => $data['profile']['postcode']]);
  79. $this->seeInDatabase('test_user_profiles', ['address' => $data['profile']['address']]);
  80. $this->seeInDatabase('test_user_profiles', ['latitude' => $data['profile']['latitude']]);
  81. $this->seeInDatabase('test_user_profiles', ['longitude' => $data['profile']['longitude']]);
  82. $this->seeInDatabase('test_user_profiles', ['color' => $data['profile']['color']]);
  83. $this->seeInDatabase('test_user_profiles', ['start_at' => $data['profile']['start_at']]);
  84. $this->seeInDatabase('test_user_profiles', ['end_at' => $data['profile']['end_at']]);
  85. // $avatar = UserModel::first()->avatar;
  86. // $this->assertFileExists(public_path('uploads/'.$avatar));
  87. }
  88. protected function seedsTable($count = 100)
  89. {
  90. factory(\Tests\Models\User::class, $count)
  91. ->create()
  92. ->each(function ($u) {
  93. $u->profile()->save(factory(\Tests\Models\Profile::class)->make());
  94. $u->tags()->saveMany(factory(\Tests\Models\Tag::class, 5)->make());
  95. });
  96. }
  97. public function testEditForm()
  98. {
  99. $this->seedsTable(10);
  100. $id = mt_rand(1, 10);
  101. $user = UserModel::with('profile')->find($id);
  102. $this->visit("admin/tests/users/$id/edit")
  103. ->seeElement("input[type=text][name=username][value='{$user->username}']")
  104. ->seeElement("input[type=email][name=email][value='{$user->email}']")
  105. ->seeElement("input[type=text][name=mobile][value='{$user->mobile}']")
  106. ->seeElement('hr')
  107. ->seeElement("input[type=text][name='profile[first_name]'][value='{$user->profile->first_name}']")
  108. ->seeElement("input[type=text][name='profile[last_name]'][value='{$user->profile->last_name}']")
  109. ->seeElement("input[type=text][name='profile[postcode]'][value='{$user->profile->postcode}']")
  110. ->seeInElement("textarea[name='profile[address]']", $user->profile->address)
  111. // ->seeElement("input[type=hidden][name='profile[latitude]'][value='{$user->profile->latitude}']")
  112. // ->seeElement("input[type=hidden][name='profile[longitude]'][value='{$user->profile->longitude}']")
  113. ->seeElement("input[type=text][name='profile[color]'][value='{$user->profile->color}']")
  114. ->seeElement("input[type=text][name='profile[start_at]'][value='{$user->profile->start_at}']")
  115. ->seeElement("input[type=text][name='profile[end_at]'][value='{$user->profile->end_at}']")
  116. ->seeElement("select[name='tags[]'][multiple=multiple]");
  117. $this->assertCount(50, $this->crawler()->filter("select[name='tags[]'] option"));
  118. $this->assertCount(5, $this->crawler()->filter("select[name='tags[]'] option[selected]"));
  119. }
  120. public function testUpdateForm()
  121. {
  122. $this->seedsTable(10);
  123. $id = mt_rand(1, 10);
  124. $this->visit("admin/tests/users/$id/edit")
  125. ->type('hello world', 'username')
  126. ->type('123', 'password')
  127. ->type('123', 'password_confirmation')
  128. ->press('Submit')
  129. ->seePageIs('admin/tests/users')
  130. ->seeInDatabase('test_users', ['username' => 'hello world']);
  131. $user = UserModel::with('profile')->find($id);
  132. $this->assertEquals($user->username, 'hello world');
  133. }
  134. public function testUpdateFormWithRule()
  135. {
  136. $this->seedsTable(10);
  137. $id = mt_rand(1, 10);
  138. $this->visit("admin/tests/users/$id/edit")
  139. ->type('', 'email')
  140. ->press('Submit')
  141. ->seePageIs("admin/tests/users/$id/edit")
  142. ->see('The email field is required');
  143. $this->type('xxaxx', 'email')
  144. ->press('Submit')
  145. ->seePageIs("admin/tests/users/$id/edit")
  146. ->see('The email must be a valid email address.');
  147. $this->visit("admin/tests/users/$id/edit")
  148. ->type('123', 'password')
  149. ->type('1234', 'password_confirmation')
  150. ->press('Submit')
  151. ->seePageIs("admin/tests/users/$id/edit")
  152. ->see('The Password confirmation does not match.');
  153. $this->type('xx@xx.xx', 'email')
  154. ->type('123', 'password')
  155. ->type('123', 'password_confirmation')
  156. ->press('Submit')
  157. ->seePageIs('admin/tests/users')
  158. ->seeInDatabase('test_users', ['email' => 'xx@xx.xx']);
  159. }
  160. public function testFormFooter()
  161. {
  162. $this->seedsTable(1);
  163. $this->visit('admin/tests/users/1/edit')
  164. ->seeElement('input[type=checkbox][value=1]')
  165. ->seeElement('input[type=checkbox][value=3]');
  166. }
  167. }