MenuCreationForm.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. * @return Browser
  59. */
  60. public function fill(Browser $browser, array $input)
  61. {
  62. $inputKeys = [
  63. 'title',
  64. 'icon',
  65. 'uri',
  66. ];
  67. $selectKeys = [
  68. 'parent_id',
  69. ];
  70. $multipleSelectKeys = [
  71. 'roles',
  72. ];
  73. foreach ($input as $key => $value) {
  74. if (in_array($key, $inputKeys, true)) {
  75. $browser->type($key, $value);
  76. continue;
  77. }
  78. if (in_array($key, $selectKeys, true)) {
  79. $selector = sprintf('select[name="%s"]', $key);
  80. $browser->within(new Select2($selector), function ($browser) use ($value) {
  81. $browser->choose($value);
  82. });
  83. continue;
  84. }
  85. if (in_array($key, $multipleSelectKeys, true)) {
  86. $selector = sprintf('select[name="%s[]"]', $key);
  87. $browser->within(new MultipleSelect2($selector), function ($browser) use ($value) {
  88. $browser->choose($value);
  89. });
  90. continue;
  91. }
  92. if ($key === 'permissions') {
  93. $browser->within(new Tree($key), function ($browser) use ($value) {
  94. $browser->expand();
  95. $browser->choose($value);
  96. });
  97. }
  98. }
  99. return $browser;
  100. }
  101. /**
  102. * 读取组件的元素快捷方式.
  103. *
  104. * @return array
  105. */
  106. public function elements()
  107. {
  108. return [
  109. '@form' => $this->selector,
  110. ];
  111. }
  112. }