Parcourir la source

Merge branch '2.0' into gitee2

jqh il y a 4 ans
Parent
commit
0462a5f374

+ 48 - 48
.env.testing

@@ -1,48 +1,48 @@
-APP_NAME=Laravel
-APP_ENV=testing
-APP_KEY=base64:nkWw/7lEOZCPLLEaa1oWsHOgPQGxMszomZoJvgy/XHk=
-APP_DEBUG=true
-APP_URL=http://localhost:8000
-
-LOG_CHANNEL=stack
-
-DB_CONNECTION=mysql
-DB_HOST=127.0.0.1
-DB_PORT=3306
-DB_DATABASE=laravel
-DB_USERNAME=root
-DB_PASSWORD=
-
-CODECOV_TOKEN=8124bc76-384b-4528-8875-a33ee1e1ee19
-
-BROADCAST_DRIVER=log
-CACHE_DRIVER=file
-QUEUE_CONNECTION=sync
-SESSION_DRIVER=file
-SESSION_LIFETIME=120
-
-REDIS_HOST=127.0.0.1
-REDIS_PASSWORD=null
-REDIS_PORT=6379
-
-MAIL_MAILER=smtp
-MAIL_HOST=smtp.mailtrap.io
-MAIL_PORT=2525
-MAIL_USERNAME=null
-MAIL_PASSWORD=null
-MAIL_ENCRYPTION=null
-MAIL_FROM_ADDRESS=null
-MAIL_FROM_NAME="${APP_NAME}"
-
-AWS_ACCESS_KEY_ID=
-AWS_SECRET_ACCESS_KEY=
-AWS_DEFAULT_REGION=us-east-1
-AWS_BUCKET=
-
-PUSHER_APP_ID=
-PUSHER_APP_KEY=
-PUSHER_APP_SECRET=
-PUSHER_APP_CLUSTER=mt1
-
-MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
-MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
+APP_NAME=Laravel
+APP_ENV=testing
+APP_KEY=base64:nkWw/7lEOZCPLLEaa1oWsHOgPQGxMszomZoJvgy/XHk=
+APP_DEBUG=true
+APP_URL=http://127.0.0.1:8300
+
+LOG_CHANNEL=stack
+
+DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=laravel
+DB_USERNAME=root
+DB_PASSWORD=123456
+
+CODECOV_TOKEN=8124bc76-384b-4528-8875-a33ee1e1ee19
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=file
+QUEUE_CONNECTION=sync
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_MAILER=smtp
+MAIL_HOST=smtp.mailtrap.io
+MAIL_PORT=2525
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_ENCRYPTION=null
+MAIL_FROM_ADDRESS=null
+MAIL_FROM_NAME="${APP_NAME}"
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+AWS_DEFAULT_REGION=us-east-1
+AWS_BUCKET=
+
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=
+PUSHER_APP_CLUSTER=mt1
+
+MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

+ 192 - 0
.github/workflows/dusk.yml

@@ -0,0 +1,192 @@
+name: Dcat Admin Dusk
+
+on:
+  push:
+    branches: [ 2.0 ]
+  pull_request:
+    branches: [ 2.0 ]
+
+jobs:
+  laravel5:
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
+        with:
+          php-version: '7.1'
+
+      - uses: actions/checkout@v2
+
+      - name: Composer Update
+        run: composer self-update --2
+
+      - name: Setup MySQL
+        # You may pin to the exact commit or the version.
+        # uses: mirromutth/mysql-action@de1fba8b3f90ce8db80f663a7043be3cf3231248
+        uses: mirromutth/mysql-action@v1.1
+        with:
+          # Version of MySQL to use
+          mysql version: 5.7
+          # MYSQL_ROOT_PASSWORD - root superuser password
+          mysql root password: 123456
+          # MYSQL_DATABASE - name for the default database that is created
+          mysql database: laravel
+          # MYSQL_USER - create the specified user with superuser power for created database
+          mysql user: root
+          # MYSQL_PASSWORD - specified superuser password which user is power for created database
+          mysql password: 123456
+
+      - name: Install Dependencies
+        run: |
+          composer create-project --prefer-dist laravel/laravel laravel-tests 5.*
+          sh ./tests/bin/install-dep.sh
+
+      - name: Install Admin
+        run: sh ./tests/bin/install-admin.sh
+
+#      - name: Install Xvfb
+#        run: sudo apt-get install xvfb
+
+      - name: Start Server
+        run: sh ./tests/bin/start.sh
+
+      - name: Run test suite
+        run: cd ./laravel-tests && php artisan dusk
+
+  laravel6:
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
+        with:
+          php-version: '7.3'
+
+      - uses: actions/checkout@v2
+
+      - name: Composer Update
+        run: composer self-update --2
+
+      - name: Setup MySQL
+        # You may pin to the exact commit or the version.
+        # uses: mirromutth/mysql-action@de1fba8b3f90ce8db80f663a7043be3cf3231248
+        uses: mirromutth/mysql-action@v1.1
+        with:
+          # Version of MySQL to use
+          mysql version: 5.7
+          # MYSQL_ROOT_PASSWORD - root superuser password
+          mysql root password: 123456
+          # MYSQL_DATABASE - name for the default database that is created
+          mysql database: laravel
+          # MYSQL_USER - create the specified user with superuser power for created database
+          mysql user: root
+          # MYSQL_PASSWORD - specified superuser password which user is power for created database
+          mysql password: 123456
+
+      - name: Install Dependencies
+        run: |
+          composer create-project --prefer-dist laravel/laravel laravel-tests 6.*
+          sh ./tests/bin/install-dep.sh
+
+      - name: Install Admin
+        run: sh ./tests/bin/install-admin.sh
+
+#      - name: Install Xvfb
+#        run: sudo apt-get install xvfb
+
+      - name: Start Server
+        run: sh ./tests/bin/start.sh
+
+      - name: Run test suite
+        run: cd ./laravel-tests && php artisan dusk
+
+  laravel7:
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
+        with:
+          php-version: '7.3'
+
+      - uses: actions/checkout@v2
+
+      - name: Composer Update
+        run: composer self-update --2
+
+      - name: Setup MySQL
+        # You may pin to the exact commit or the version.
+        # uses: mirromutth/mysql-action@de1fba8b3f90ce8db80f663a7043be3cf3231248
+        uses: mirromutth/mysql-action@v1.1
+        with:
+          # Version of MySQL to use
+          mysql version: 5.7
+          # MYSQL_ROOT_PASSWORD - root superuser password
+          mysql root password: 123456
+          # MYSQL_DATABASE - name for the default database that is created
+          mysql database: laravel
+          # MYSQL_USER - create the specified user with superuser power for created database
+          mysql user: root
+          # MYSQL_PASSWORD - specified superuser password which user is power for created database
+          mysql password: 123456
+
+      - name: Install Dependencies
+        run: |
+          composer create-project --prefer-dist laravel/laravel laravel-tests 7.*
+          sh ./tests/bin/install-dep.sh
+
+      - name: Install Admin
+        run: sh ./tests/bin/install-admin.sh
+
+#      - name: Install Xvfb
+#        run: sudo apt-get install xvfb
+
+      - name: Start Server
+        run: sh ./tests/bin/start.sh
+
+      - name: Run test suite
+        run: cd ./laravel-tests && php artisan dusk
+
+  laravel8:
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
+        with:
+          php-version: '8.0'
+
+      - uses: actions/checkout@v2
+
+      - name: Composer Update
+        run: composer self-update --2
+
+      - name: Setup MySQL
+        # You may pin to the exact commit or the version.
+        # uses: mirromutth/mysql-action@de1fba8b3f90ce8db80f663a7043be3cf3231248
+        uses: mirromutth/mysql-action@v1.1
+        with:
+          # Version of MySQL to use
+          mysql version: 5.7
+          # MYSQL_ROOT_PASSWORD - root superuser password
+          mysql root password: 123456
+          # MYSQL_DATABASE - name for the default database that is created
+          mysql database: laravel
+          # MYSQL_USER - create the specified user with superuser power for created database
+          mysql user: root
+          # MYSQL_PASSWORD - specified superuser password which user is power for created database
+          mysql password: 123456
+
+      - name: Install Dependencies
+        run: |
+          composer create-project --prefer-dist laravel/laravel laravel-tests 8.*
+          sh ./tests/bin/install-dep.sh
+
+      - name: Install Admin
+        run: sh ./tests/bin/install-admin.sh
+
+      - name: Install Xvfb
+        run: sudo apt-get install xvfb
+
+      - name: Start Server
+        run: sh ./tests/bin/start.sh
+
+      - name: Run test suite
+        run: cd ./laravel-tests && php artisan dusk

+ 0 - 66
.travis.yml

@@ -1,66 +0,0 @@
-sudo: required
-language: php
-dist: trusty
-
-php:
-  - 7.1
-  - 7.2
-  - 7.3
-#  - 7.4
-
-addons:
-  chrome: stable
-
-matrix:
-  fast_finish: true
-
-services:
-  - mysql
-
-install:
-#  - wget - https://dl.google.com/dl/linux/direct/google-chrome-stable_current_amd64.deb
-  - sudo apt-get clean
-  - sudo apt-get update
-  - sudo apt-get install dpkg -f
-#  - sudo apt-get -f install
-#  - sudo apt upgrade dpkg
-  - sudo dpkg -i /tmp/google-chrome-stable_current_amd64.deb
-  - mysql -e 'create database if not exists laravel;'
-  - composer self-update --2
-  - travis_retry composer create-project --prefer-dist laravel/laravel laravel-tests
-  - cp -f ./tests/resources/stubs/artisan ./laravel-tests/
-  - cp -f ./tests/resources/stubs/ComposerConfigCommand.php ./laravel-tests/app/
-  - mkdir ./laravel-tests/dcat-admin
-  - cp -rf ./config ./laravel-tests/dcat-admin
-  - cp -rf ./database ./laravel-tests/dcat-admin
-  - cp -rf ./resources ./laravel-tests/dcat-admin
-  - cp -rf ./src ./laravel-tests/dcat-admin
-  - cp -rf ./tests ./laravel-tests/dcat-admin
-  - cp -rf ./composer.json ./laravel-tests/dcat-admin
-  - rm -rf ./laravel-tests/tests
-  - cp -rf ./tests ./laravel-tests/tests
-  - cp -f ./phpunit.dusk.xml ./laravel-tests
-  - cp -f ./.env.testing ./laravel-tests/.env
-  - cd ./laravel-tests
-  - php artisan admin:composer-config
-  - travis_retry composer require dcat/laravel-admin:*@dev
-  - travis_retry composer require laravel/dusk --dev # --ignore-platform-reqs
-#  - travis_retry composer require --dev staudenmeir/dusk-updater:"^1.1"
-  - php artisan admin:publish --force
-  - php artisan admin:install
-  - php artisan migrate:rollback
-  - php artisan dusk:chrome-driver 89
-#  - php artisan dusk:update 79
-  - cp -f ./tests/routes.php ./app/Admin/
-  - cp -rf ./tests/resources/config ./config/
-
-before_script:
-  - export DISPLAY=:99.0
-  - sh -e /etc/init.d/xvfb start
-  - chmod 777 ./vendor/laravel/dusk/bin/chromedriver-linux
-  - ./vendor/laravel/dusk/bin/chromedriver-linux --headless --disable-gpu --remote-debugging-port=9515 http://localhost &
-  - php artisan serve &
-
-script:
-  - php artisan dusk
-

+ 1 - 1
config/admin.php

@@ -242,7 +242,7 @@ return [
         ],
 
         // Image and file access protocol http or https.
-        'domain_type' => 'default'
+        'domain_type' => 'default',
     ],
 
     /*

+ 2 - 2
resources/views/filter/container.blade.php

@@ -3,7 +3,7 @@
         border-top: 1px solid #eee;
         margin-top: 10px;
         margin-bottom: -.5rem!important;
-        padding: 1.8rem 1.8rem 0;
+        padding: 1.8rem;
     }
 </style>
 
@@ -30,4 +30,4 @@
 
         </form>
     </div>
-</div>
+</div>

+ 1 - 3
resources/views/form/hasmany.blade.php

@@ -29,7 +29,7 @@
 
         @endforeach
     </div>
-    
+
 
     <template class="{{$columnClass}}-tpl">
         <div class="has-many-{{$columnClass}}-form fields-group">
@@ -77,8 +77,6 @@
     });
 
     $(container).on('click', '.remove', function () {
-        $(this).closest('form')[0].reset();
-
         var $form = $(this).closest('.has-many-{{ $columnClass  }}-form');
         $form.hide();
         $form.find('.{{ Dcat\Admin\Form\NestedForm::REMOVE_FLAG_CLASS }}').val(1);

+ 0 - 2
resources/views/form/hasmanytable.blade.php

@@ -98,8 +98,6 @@
     });
 
     $(container).on('click', '.remove', function () {
-        $(this).closest('form')[0].reset();
-
         var $form = $(this).closest('.has-many-{{ $columnClass }}-form');
 
         $form.hide();

+ 2 - 1
resources/views/grid/pagination.blade.php

@@ -6,7 +6,7 @@
     <li class="page-item previous"><a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev"></a></li>
     @endif
 
-    <!-- Pagination Elements -->
+    @if(! empty($elements))
     @foreach ($elements as $element)
         <!-- "Three Dots" Separator -->
         @if (is_string($element))
@@ -24,6 +24,7 @@
             @endforeach
         @endif
     @endforeach
+    @endif
 
     <!-- Next Page Link -->
     @if ($paginator->hasMorePages())

+ 5 - 13
resources/views/grid/table-pagination.blade.php

@@ -1,13 +1,5 @@
-@if ($grid->allowPagination())
-    <div class="box-footer d-block clearfix ">
-        {!! $grid->paginator()->render() !!}
-    </div>
-@else
-    <div class="box-footer d-block clearfix text-80 " style="height:48px;line-height:25px;">
-        @if ($grid->rows()->isEmpty())
-            {!! trans('admin.pagination.range', ['first' => '<b>0</b>', 'last' => '<b>'.$grid->rows()->count().'</b>', 'total' => '<b>'.$grid->rows()->count().'</b>',]) !!}
-        @else
-            {!! trans('admin.pagination.range', ['first' => '<b>1</b>', 'last' => '<b>'.$grid->rows()->count().'</b>', 'total' => '<b>'.$grid->rows()->count().'</b>',]) !!}
-        @endif
-    </div>
-@endif
+@if ($grid->allowPagination())
+    <div class="box-footer d-block clearfix ">
+        {!! $grid->paginator()->render() !!}
+    </div>
+@endif

+ 1 - 1
src/Form/Field/KeyValue.php

@@ -22,7 +22,7 @@ class KeyValue extends Field
 
     public function setValueLabel(?string $label)
     {
-        $this->keyLabel = $label;
+        $this->valueLabel = $label;
 
         return $this;
     }

+ 1 - 1
src/Form/NestedForm.php

@@ -292,7 +292,7 @@ class NestedForm extends WidgetForm
 
         $field->attribute(Field::BUILD_IGNORE, true);
 
-        if (method_exists($this->form, 'builder')) {
+        if ($this->form && method_exists($this->form, 'builder')) {
             $this->form->builder()->pushField((clone $field)->display(false));
         }
 

+ 10 - 21
src/Grid/Concerns/HasPaginator.php

@@ -30,11 +30,6 @@ trait HasPaginator
      */
     protected $paginatorClass = Tools\Paginator::class;
 
-    /**
-     * @var \Closure
-     */
-    protected $paginationCallback;
-
     /**
      * Paginate the grid.
      *
@@ -49,6 +44,16 @@ trait HasPaginator
         $this->model()->setPerPage($perPage);
     }
 
+    /**
+     * 是否使用 simplePaginate 方法分页.
+     *
+     * @param bool $value
+     */
+    public function simplePaginate(bool $value = true)
+    {
+        $this->model()->simple($value);
+    }
+
     /**
      * @return int
      */
@@ -69,18 +74,6 @@ trait HasPaginator
         return $this;
     }
 
-    /**
-     * @param \Closure
-     *
-     * @return $this
-     */
-    public function pagination(\Closure $callback)
-    {
-        $this->paginationCallback = $callback;
-
-        return $this;
-    }
-
     /**
      * Get the grid paginator.
      *
@@ -160,10 +153,6 @@ trait HasPaginator
      */
     public function renderPagination()
     {
-        if ($callback = $this->paginationCallback) {
-            return $callback($this);
-        }
-
         return view('admin::grid.table-pagination', ['grid' => $this]);
     }
 }

+ 43 - 7
src/Grid/Model.php

@@ -12,6 +12,7 @@ use Illuminate\Database\Query\Builder;
 use Illuminate\Http\Request;
 use Illuminate\Pagination\AbstractPaginator;
 use Illuminate\Pagination\LengthAwarePaginator;
+use Illuminate\Pagination\Paginator;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Str;
@@ -100,6 +101,11 @@ class Model
      */
     protected $sortName = '_sort';
 
+    /**
+     * @var bool
+     */
+    protected $simple = false;
+
     /**
      * @var Grid
      */
@@ -180,20 +186,46 @@ class Model
         return $this->paginator;
     }
 
+    /**
+     * 是否使用 simplePaginate方法进行分页.
+     *
+     * @param bool $value
+     *
+     * @return $this
+     */
+    public function simple(bool $value = true)
+    {
+        $this->simple = $value;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPaginateMethod()
+    {
+        return $this->simple ? 'simplePaginate' : 'paginate';
+    }
+
     /**
      * @param int              $total
      * @param Collection|array $data
      *
-     * @return LengthAwarePaginator
+     * @return LengthAwarePaginator|Paginator
      */
     public function makePaginator($total, $data, string $url = null)
     {
-        $paginator = new LengthAwarePaginator(
-            $data,
-            $total,
-            $this->getPerPage(), // 传入每页显示行数
-            $this->getCurrentPage() // 传入当前页码
-        );
+        if ($this->simple) {
+            $paginator = new Paginator($data, $this->getPerPage(), $this->getCurrentPage());
+        } else {
+            $paginator = new LengthAwarePaginator(
+                $data,
+                $total,
+                $this->getPerPage(), // 传入每页显示行数
+                $this->getCurrentPage() // 传入当前页码
+            );
+        }
 
         return $paginator->setPath(
             $url ?: url()->current()
@@ -214,10 +246,14 @@ class Model
      * Enable or disable pagination.
      *
      * @param bool $use
+     *
+     * @reutrn $this;
      */
     public function usePaginate($use = true)
     {
         $this->usePaginate = $use;
+
+        return $this;
     }
 
     /**

+ 1 - 1
src/Grid/Tools/Paginator.php

@@ -79,7 +79,7 @@ class Paginator implements Renderable
         $parameters = [
             'first' => $this->paginator->firstItem(),
             'last'  => $this->paginator->lastItem(),
-            'total' => $this->paginator->total(),
+            'total' => method_exists($this->paginator, 'total') ? $this->paginator->total() : '...',
         ];
 
         $parameters = collect($parameters)->flatMap(function ($parameter, $key) {

+ 3 - 2
src/Http/Auth/Permission.php

@@ -4,7 +4,6 @@ namespace Dcat\Admin\Http\Auth;
 
 use Dcat\Admin\Admin;
 use Dcat\Admin\Layout\Content;
-use Dcat\Admin\Models\Role;
 use Dcat\Admin\Support\Helper;
 use Illuminate\Contracts\Support\Arrayable;
 use Symfony\Component\HttpFoundation\Response;
@@ -112,7 +111,9 @@ class Permission
      */
     public static function isAdministrator()
     {
-        return ! config('admin.permission.enable') || Admin::user()->isRole(Role::ADMINISTRATOR);
+        $roleModel = config('admin.database.roles_model');
+
+        return ! config('admin.permission.enable') || Admin::user()->isRole($roleModel::ADMINISTRATOR);
     }
 
     /**

+ 6 - 4
src/Http/Controllers/RoleController.php

@@ -6,7 +6,6 @@ use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Http\Auth\Permission;
 use Dcat\Admin\Http\Repositories\Role;
-use Dcat\Admin\Models\Role as RoleModel;
 use Dcat\Admin\Show;
 use Dcat\Admin\Support\Helper;
 use Dcat\Admin\Widgets\Tree;
@@ -67,7 +66,8 @@ class RoleController extends AdminController
             $show->field('created_at');
             $show->field('updated_at');
 
-            if ($show->getKey() == RoleModel::ADMINISTRATOR_ID) {
+            $roleModel = config('admin.database.roles_model');
+            if ($show->getKey() == $roleModel::ADMINISTRATOR_ID) {
                 $show->disableDeleteButton();
             }
         });
@@ -108,7 +108,8 @@ class RoleController extends AdminController
             $form->display('created_at', trans('admin.created_at'));
             $form->display('updated_at', trans('admin.updated_at'));
 
-            if ($id == RoleModel::ADMINISTRATOR_ID) {
+            $roleModel = config('admin.database.roles_model');
+            if ($id == $roleModel::ADMINISTRATOR_ID) {
                 $form->disableDeleteButton();
             }
         });
@@ -116,7 +117,8 @@ class RoleController extends AdminController
 
     public function destroy($id)
     {
-        if (in_array(RoleModel::ADMINISTRATOR_ID, Helper::array($id))) {
+        $roleModel = config('admin.database.roles_model');
+        if (in_array($roleModel::ADMINISTRATOR_ID, Helper::array($id))) {
             Permission::error();
         }
 

+ 6 - 4
src/Repositories/EloquentRepository.php

@@ -168,7 +168,7 @@ class EloquentRepository extends Repository implements TreeRepository
         }
 
         $model->getQueries()->unique()->each(function ($value) use (&$query) {
-            if ($value['method'] === 'paginate') {
+            if ($value['method'] === 'paginate' || $value['method'] === 'simplePaginate') {
                 $value['arguments'][1] = $this->getGridColumns();
             } elseif ($value['method'] === 'get') {
                 $value['arguments'] = [$this->getGridColumns()];
@@ -370,14 +370,16 @@ class EloquentRepository extends Repository implements TreeRepository
      */
     protected function setPaginate(Grid\Model $model)
     {
-        $paginate = $model->findQueryByMethod('paginate')->first();
+        $paginateMethod = $model->getPaginateMethod();
 
-        $model->rejectQuery(['paginate']);
+        $paginate = $model->findQueryByMethod($paginateMethod)->first();
+
+        $model->rejectQuery(['paginate', 'simplePaginate']);
 
         if (! $model->allowPagination()) {
             $model->addQuery('get', [$this->getGridColumns()]);
         } else {
-            $model->addQuery('paginate', $this->resolvePerPage($model, $paginate));
+            $model->addQuery($paginateMethod, $this->resolvePerPage($model, $paginate));
         }
     }
 

+ 3 - 2
src/Traits/HasPermissions.php

@@ -2,7 +2,6 @@
 
 namespace Dcat\Admin\Traits;
 
-use Dcat\Admin\Models\Role;
 use Dcat\Admin\Support\Helper;
 use Illuminate\Contracts\Support\Arrayable;
 use Illuminate\Support\Collection;
@@ -73,7 +72,9 @@ trait HasPermissions
      */
     public function isAdministrator(): bool
     {
-        return $this->isRole(Role::ADMINISTRATOR);
+        $roleModel = config('admin.database.roles_model');
+
+        return $this->isRole($roleModel::ADMINISTRATOR);
     }
 
     /**

+ 1 - 1
tests/Browser/Components/Form/MenuCreationForm.php

@@ -50,7 +50,7 @@ class MenuCreationForm extends Component
                     ->hasInput('title')
                     ->hasInput('icon')
                     ->hasInput('uri')
-                    ->assertSelected('parent_id', 0)
+                    //->assertSelected('parent_id', 0)
                     ->is(new Tree('permissions'))
                     ->is(new Select2('select[name="parent_id"]'))
                     ->is(new MultipleSelect2('select[name="roles[]"]'));

+ 1 - 1
tests/Browser/Pages/MenuPage.php

@@ -47,7 +47,7 @@ class MenuPage extends Page
                     ->assertSeeText(__('admin.permission'))
                     ->assertSeeText(__('admin.selectall'))
                     ->assertSeeText(__('admin.expand'))
-                    ->assertSelected('parent_id', 0)
+                    //->assertSelected('parent_id', 0)
                     ->hasInput('title')
                     ->hasInput('icon')
                     ->hasInput('uri')

+ 9 - 0
tests/bin/install-admin.sh

@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+cd ./laravel-tests
+php artisan admin:publish --force
+php artisan admin:install
+php artisan migrate:rollback
+php artisan dusk:chrome-driver 89
+cp -f ./tests/routes.php ./app/Admin/
+cp -rf ./tests/resources/config ./config/

+ 19 - 0
tests/bin/install-dep.sh

@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+cp -f ./tests/resources/stubs/artisan ./laravel-tests/
+cp -f ./tests/resources/stubs/ComposerConfigCommand.php ./laravel-tests/app/
+mkdir ./laravel-tests/dcat-admin
+cp -rf ./config ./laravel-tests/dcat-admin
+cp -rf ./database ./laravel-tests/dcat-admin
+cp -rf ./resources ./laravel-tests/dcat-admin
+cp -rf ./src ./laravel-tests/dcat-admin
+cp -rf ./tests ./laravel-tests/dcat-admin
+cp -rf ./composer.json ./laravel-tests/dcat-admin
+rm -rf ./laravel-tests/tests
+cp -rf ./tests ./laravel-tests/tests
+cp -f ./phpunit.dusk.xml ./laravel-tests
+cp -f ./.env.testing ./laravel-tests/.env
+cd ./laravel-tests
+php artisan admin:composer-config
+composer require dcat/laravel-admin:*@dev
+composer require laravel/dusk --dev # --ignore-platform-reqs

+ 8 - 0
tests/bin/start.sh

@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+cd ./laravel-tests
+export DISPLAY=:99.0
+#sudo Xvfb :99.0 &
+sudo chmod -R 0755 ./vendor/laravel/dusk/bin/
+./vendor/laravel/dusk/bin/chromedriver-linux  > /dev/null 2>&1 &
+php artisan serve --port=8300 > /dev/null 2>&1 &