MenuCreationForm.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace Tests\Browser\Components\Form;
  3. use Laravel\Dusk\Browser;
  4. use Tests\Browser\Components\Component;
  5. use Tests\Browser\Components\Form\Field\MultipleSelect2;
  6. use Tests\Browser\Components\Form\Field\Select2;
  7. use Tests\Browser\Components\Form\Field\Tree;
  8. class MenuCreationForm extends Component
  9. {
  10. protected $selector;
  11. public function __construct($selector = 'form[method="POST"]')
  12. {
  13. $this->selector = $selector;
  14. }
  15. /**
  16. * 获取组件的 css selector.
  17. *
  18. * @return string
  19. */
  20. public function selector()
  21. {
  22. return '@form';
  23. }
  24. /**
  25. * 浏览器包含组件的断言
  26. *
  27. * @param Browser $browser
  28. * @return void
  29. */
  30. public function assert(Browser $browser)
  31. {
  32. $browser->assertSeeText(__('admin.submit'))
  33. ->assertSeeText(__('admin.reset'))
  34. ->within('@form', function (Browser $browser) {
  35. $browser
  36. ->assertSeeText(__('admin.parent_id'))
  37. ->assertSeeText(__('admin.title'))
  38. ->assertSeeText(__('admin.icon'))
  39. ->assertSeeText(__('admin.uri'))
  40. ->assertSeeText(__('admin.roles'))
  41. ->assertSeeText(__('admin.permission'))
  42. ->assertSeeText(__('admin.selectall'))
  43. ->assertSeeText(__('admin.expand'))
  44. ->hasInput('title')
  45. ->hasInput('icon')
  46. ->hasInput('uri')
  47. //->assertSelected('parent_id', 0)
  48. ->is(new Tree('permissions'))
  49. ->is(new Select2('select[name="parent_id"]'))
  50. ->is(new MultipleSelect2('select[name="roles[]"]'));
  51. });
  52. }
  53. /**
  54. * 注入表单.
  55. *
  56. * @param Browser $browser
  57. * @param array $input
  58. *
  59. * @return Browser
  60. */
  61. public function fill(Browser $browser, array $input)
  62. {
  63. $inputKeys = [
  64. 'title',
  65. 'icon',
  66. 'uri',
  67. ];
  68. $selectKeys = [
  69. 'parent_id',
  70. ];
  71. $multipleSelectKeys = [
  72. 'roles',
  73. ];
  74. foreach ($input as $key => $value) {
  75. if (in_array($key, $inputKeys, true)) {
  76. $browser->type($key, $value);
  77. continue;
  78. }
  79. if (in_array($key, $selectKeys, true)) {
  80. $selector = sprintf('select[name="%s"]', $key);
  81. $browser->within(new Select2($selector), function ($browser) use ($value) {
  82. $browser->choose($value);
  83. });
  84. continue;
  85. }
  86. if (in_array($key, $multipleSelectKeys, true)) {
  87. $selector = sprintf('select[name="%s[]"]', $key);
  88. $browser->within(new MultipleSelect2($selector), function ($browser) use ($value) {
  89. $browser->choose($value);
  90. });
  91. continue;
  92. }
  93. if ($key === 'permissions') {
  94. $browser->within(new Tree($key), function ($browser) use ($value) {
  95. $browser->expand();
  96. $browser->choose($value);
  97. });
  98. }
  99. }
  100. return $browser;
  101. }
  102. /**
  103. * 读取组件的元素快捷方式.
  104. *
  105. * @return array
  106. */
  107. public function elements()
  108. {
  109. return [
  110. '@form' => $this->selector,
  111. ];
  112. }
  113. }