|
@@ -0,0 +1,111 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace Tests\Browser\Pages;
|
|
|
+
|
|
|
+use Laravel\Dusk\Browser;
|
|
|
+use Tests\Browser\Components\Form\Field\HasMany;
|
|
|
+
|
|
|
+class PainterCreatePage extends Page
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * Get the URL for the page.
|
|
|
+ *
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public function url()
|
|
|
+ {
|
|
|
+ return test_admin_path('tests/painters/create');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Assert that the browser is on the page.
|
|
|
+ *
|
|
|
+ * @param Browser $browser
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function assert(Browser $browser)
|
|
|
+ {
|
|
|
+ $browser->assertPathIs($this->url())
|
|
|
+ ->with('@form', function (Browser $browser) {
|
|
|
+ $browser->assertSeeText('Paintings')
|
|
|
+ ->with(new HasMany('paintings'), function (Browser $browser) {
|
|
|
+ // 点击新增
|
|
|
+ $browser->add();
|
|
|
+ // 点击删除
|
|
|
+ $browser->removeLast();
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Get the element shortcuts for the page.
|
|
|
+ *
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function elements()
|
|
|
+ {
|
|
|
+ return [
|
|
|
+ '@form' => 'form[method="POST"]',
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 注入表单.
|
|
|
+ *
|
|
|
+ * @param Browser $browser
|
|
|
+ * @param array $input
|
|
|
+ *
|
|
|
+ * @return Browser
|
|
|
+ */
|
|
|
+ public function fill(Browser $browser, array $input)
|
|
|
+ {
|
|
|
+ return $browser->with('@form', function (Browser $browser) use ($input) {
|
|
|
+ $inputKeys = [
|
|
|
+ 'username',
|
|
|
+ 'bio',
|
|
|
+ ];
|
|
|
+
|
|
|
+ foreach ($input as $key => $value) {
|
|
|
+ if (in_array($key, $inputKeys, true)) {
|
|
|
+ $browser->type($key, $value);
|
|
|
+
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($key === 'paintings') {
|
|
|
+ $browser->within(new HasMany($key), function (Browser $browser) use ($value) {
|
|
|
+ foreach ($value as $input) {
|
|
|
+ $browser->add();
|
|
|
+
|
|
|
+ $browser->withLastFormGroup(function (Browser $browser) use ($input) {
|
|
|
+ foreach ($input as $k => $v) {
|
|
|
+ $browser->script(
|
|
|
+ <<<JS
|
|
|
+ $('{$browser->resolver->format('.'.$k)}').val('$v');
|
|
|
+JS
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提交表单.
|
|
|
+ *
|
|
|
+ * @param Browser $browser
|
|
|
+ *
|
|
|
+ * @return Browser
|
|
|
+ */
|
|
|
+ public function submit(Browser $browser)
|
|
|
+ {
|
|
|
+ return $browser->with('@form', function (Browser $browser) {
|
|
|
+ $browser->press(__('admin.submit'));
|
|
|
+ $browser->waitForTextInBody(__('admin.save_succeeded'), 2);
|
|
|
+ $browser->waitForLocation(test_admin_path('tests/painters'), 1);
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|