HasManyTest.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace Tests\Browser\Cases\Form;
  3. use Laravel\Dusk\Browser;
  4. use Tests\Browser\Pages\PainterCreatePage;
  5. use Tests\Browser\Pages\PainterEditPage;
  6. use Tests\Models\Painter;
  7. use Tests\Models\Painting;
  8. use Tests\TestCase;
  9. /**
  10. * 一对多表单功能测试.
  11. *
  12. * @group form:has-many
  13. */
  14. class HasManyTest extends TestCase
  15. {
  16. /**
  17. * 测试新增页面.
  18. *
  19. * @throws \Throwable
  20. */
  21. public function testCreatePage()
  22. {
  23. $this->browse(function (Browser $browser) {
  24. $browser->visit(new PainterCreatePage());
  25. });
  26. }
  27. /**
  28. * 测试新增记录.
  29. *
  30. * @throws \Throwable
  31. */
  32. public function testAddNewRecord()
  33. {
  34. $this->browse(function (Browser $browser) {
  35. $data = $this->data();
  36. $browser
  37. ->visit(new PainterCreatePage())
  38. ->fill($data)
  39. ->submit();
  40. $paintings = $data['paintings'];
  41. unset($data['paintings']);
  42. $painter = Painter::query()->where($data)->first();
  43. $this->assertTrue($painter instanceof Painter);
  44. $this->assertEquals($painter->id, 1);
  45. // painting表数据
  46. $this->assertEquals(count($paintings), Painting::count());
  47. foreach ($paintings as $painting) {
  48. $painting['painter_id'] = $painter->id;
  49. $this->seeInDatabase((new Painting())->getTable(), $painting);
  50. }
  51. });
  52. }
  53. /**
  54. * 测试编辑页面
  55. *
  56. * @throws \Throwable
  57. */
  58. public function testEditPage()
  59. {
  60. $this->browse(function (Browser $browser) {
  61. $data = $this->data();
  62. $painter = $this->save($data);
  63. $browser->visit(new PainterEditPage($painter));
  64. });
  65. }
  66. /**
  67. * @param array $data
  68. *
  69. * @return Painter
  70. */
  71. protected function save($data)
  72. {
  73. $painter = new Painter();
  74. $painter->fill($data)->save();
  75. foreach ($data['paintings'] as $painting) {
  76. $painting['painter_id'] = $painter->getKey();
  77. $painter->paintings()->insert($painting);
  78. }
  79. return $painter;
  80. }
  81. /**
  82. * @return array
  83. */
  84. protected function data()
  85. {
  86. return [
  87. 'username' => 'uuu',
  88. 'bio' => 'bxbxbxbxbxbx',
  89. 'paintings' => [
  90. [
  91. 'title' => '蒙娜丽莎',
  92. 'body' => '(* ̄︶ ̄)',
  93. 'completed_at' => now(),
  94. ],
  95. [
  96. 'title' => '鸡蛋',
  97. 'body' => '(* ̄︶ ̄)',
  98. 'completed_at' => now(),
  99. ],
  100. ],
  101. ];
  102. }
  103. }