From c51d7397fad85c985d72d5e0d1ea4c8502d4d18c Mon Sep 17 00:00:00 2001 From: Nicolas Hedger <649677+nhedger@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:55:31 +0100 Subject: [PATCH] feat: add support for MySQL (#238) * ci: run tests on mysql * adapt migration to support default values on MySQL --------- Co-authored-by: Julien Nahum --- .github/workflows/laravel.yml | 41 ++++++++++++++++++- .../2021_05_19_140326_create_forms_table.php | 11 ++--- ...4_234028_create_form_submissions_table.php | 3 +- .../2022_05_10_144947_form_statistic.php | 3 +- ...133641_add_removed_properties_to_forms.php | 3 +- ...22_09_22_092205_create_templates_table.php | 3 +- ...9_26_084721_add_questions_to_templates.php | 3 +- ...table_submissions_button_text_to_forms.php | 3 +- ...023_07_20_073728_add_seo_meta_to_forms.php | 3 +- ...710_add_notification_settings_to_forms.php | 3 +- ...3_09_01_052507_add_fields_to_templates.php | 7 ++-- 11 files changed, 66 insertions(+), 17 deletions(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index aa89141..7635c20 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -27,6 +27,24 @@ jobs: ports: # Maps tcp port 5432 on service container to the host - 5432:5432 + mysql: + # Docker Hub image + image: mysql:8 + # Provide the password for mysql + env: + MYSQL_ROOT_PASSWORD: test + MYSQL_DATABASE: test + MYSQL_USER: test + MYSQL_PASSWORD: test + # Set health checks to wait until mysql has started + options: >- + --health-cmd="mysqladmin ping" + --health-interval=10s + --health-timeout=5s + --health-retries=5 + ports: + # Maps tcp port 3306 on service container to the host + - 3306:3306 concurrency: group: 'run-tests' @@ -35,8 +53,22 @@ jobs: fail-fast: true matrix: php: [ 8.2 ] + connection: [ pgsql, mysql ] + include: + - connection: pgsql + host: localhost + port: 5432 + user: postgres + password: postgres + database: postgres + - connection: mysql + host: '127.0.0.1' + port: 3306 + user: root + password: test + database: test - name: Run Feature & Unit tests (PHP ${{ matrix.php }}) + name: Run Feature & Unit tests (PHP ${{ matrix.php }} - ${{ matrix.connection }}) steps: - name: Checkout code @@ -80,6 +112,13 @@ jobs: - name: Run tests (Unit and Feature) run: ./vendor/bin/pest -p + env: + DB_CONNECTION: ${{ matrix.connection }} + DB_HOST: ${{ matrix.host }} + DB_PORT: ${{ matrix.port }} + DB_DATABASE: ${{ matrix.database }} + DB_USERNAME: ${{ matrix.user }} + DB_PASSWORD: ${{ matrix.password }} - name: "Archive log results" if: always() diff --git a/database/migrations/2021_05_19_140326_create_forms_table.php b/database/migrations/2021_05_19_140326_create_forms_table.php index 7622b97..a4b6af4 100644 --- a/database/migrations/2021_05_19_140326_create_forms_table.php +++ b/database/migrations/2021_05_19_140326_create_forms_table.php @@ -1,6 +1,7 @@ timestamps(); $table->boolean('notifies')->default(false); $table->text('description')->nullable(); - $table->text('submit_button_text')->default('Submit'); + $table->text('submit_button_text')->default(new Expression("('Submit')")); $table->boolean('re_fillable')->default(false); - $table->text('re_fill_button_text')->default('Fill Again'); + $table->text('re_fill_button_text')->default(new Expression("('Fill Again')")); $table->string('color')->default('#3B82F6'); $table->boolean('uppercase_labels')->default(true); $table->boolean('no_branding')->default(false); $table->boolean('hide_title')->default(false); - $table->text('submitted_text')->default('Amazing, we saved your answers. Thank you for your time and have a great day!'); + $table->text('submitted_text')->default(new Expression("('Amazing, we saved your answers. Thank you for your time and have a great day!')")); $table->string('dark_mode')->default('auto'); $table->string('webhook_url')->nullable(); $table->boolean('send_submission_confirmation')->default(false); @@ -45,13 +46,13 @@ class CreateFormsTable extends Migration $table->timestamp('closes_at')->nullable(); $table->text('closed_text')->nullable(); $table->string('notification_subject')->default("We saved your answers"); - $table->text('notification_body')->default('

Hello there 👋
This is a confirmation that your submission was successfully saved.

'); + $table->text('notification_body')->default(new Expression("('

Hello there 👋
This is a confirmation that your submission was successfully saved.

')")); $table->boolean('notifications_include_submission')->default(true); $table->boolean('use_captcha')->default(false); $table->boolean('can_be_indexed')->default(true); $table->string('password')->nullable()->default(null); $table->string('notification_sender')->default("OpenForm"); - $table->jsonb('tags')->default('[]'); + $table->jsonb('tags')->default(new Expression('(JSON_ARRAY())')); }); } diff --git a/database/migrations/2021_05_24_234028_create_form_submissions_table.php b/database/migrations/2021_05_24_234028_create_form_submissions_table.php index 64cadd7..b292103 100644 --- a/database/migrations/2021_05_24_234028_create_form_submissions_table.php +++ b/database/migrations/2021_05_24_234028_create_form_submissions_table.php @@ -1,6 +1,7 @@ id(); $table->foreignIdFor(\App\Models\Forms\Form::class,'form_id'); - $table->jsonb('data')->default('{}'); + $table->jsonb('data')->default(new Expression("(JSON_OBJECT())")); $table->timestamps(); }); } diff --git a/database/migrations/2022_05_10_144947_form_statistic.php b/database/migrations/2022_05_10_144947_form_statistic.php index 85ace26..295e093 100644 --- a/database/migrations/2022_05_10_144947_form_statistic.php +++ b/database/migrations/2022_05_10_144947_form_statistic.php @@ -1,6 +1,7 @@ id(); $table->foreignIdFor(\App\Models\Forms\Form::class,'form_id'); - $table->jsonb('data')->default('{}'); + $table->jsonb('data')->default(new Expression("(JSON_OBJECT())")); $table->date('date'); }); } diff --git a/database/migrations/2022_08_18_133641_add_removed_properties_to_forms.php b/database/migrations/2022_08_18_133641_add_removed_properties_to_forms.php index 19997ed..263052c 100644 --- a/database/migrations/2022_08_18_133641_add_removed_properties_to_forms.php +++ b/database/migrations/2022_08_18_133641_add_removed_properties_to_forms.php @@ -1,6 +1,7 @@ jsonb('removed_properties')->default('[]'); + $table->jsonb('removed_properties')->default(new Expression("(JSON_ARRAY())")); }); } diff --git a/database/migrations/2022_09_22_092205_create_templates_table.php b/database/migrations/2022_09_22_092205_create_templates_table.php index 4642c58..34cf3be 100644 --- a/database/migrations/2022_09_22_092205_create_templates_table.php +++ b/database/migrations/2022_09_22_092205_create_templates_table.php @@ -1,6 +1,7 @@ string('slug'); $table->text('description'); $table->string('image_url'); - $table->jsonb('structure')->default('{}'); + $table->jsonb('structure')->default(new Expression("(JSON_OBJECT())")); }); } diff --git a/database/migrations/2022_09_26_084721_add_questions_to_templates.php b/database/migrations/2022_09_26_084721_add_questions_to_templates.php index 449fe40..dad19e1 100644 --- a/database/migrations/2022_09_26_084721_add_questions_to_templates.php +++ b/database/migrations/2022_09_26_084721_add_questions_to_templates.php @@ -1,6 +1,7 @@ jsonb('questions')->default('{}'); + $table->jsonb('questions')->default(new Expression("(JSON_ARRAY())")); }); } diff --git a/database/migrations/2023_03_13_094806_add_editable_submissions_button_text_to_forms.php b/database/migrations/2023_03_13_094806_add_editable_submissions_button_text_to_forms.php index e77e68b..d412da9 100644 --- a/database/migrations/2023_03_13_094806_add_editable_submissions_button_text_to_forms.php +++ b/database/migrations/2023_03_13_094806_add_editable_submissions_button_text_to_forms.php @@ -1,6 +1,7 @@ text('editable_submissions_button_text')->default('Edit submission'); + $table->text('editable_submissions_button_text')->default(new Expression("('Edit submission')")); }); } diff --git a/database/migrations/2023_07_20_073728_add_seo_meta_to_forms.php b/database/migrations/2023_07_20_073728_add_seo_meta_to_forms.php index e0a67d7..0a91a8a 100644 --- a/database/migrations/2023_07_20_073728_add_seo_meta_to_forms.php +++ b/database/migrations/2023_07_20_073728_add_seo_meta_to_forms.php @@ -1,6 +1,7 @@ json('seo_meta')->default('{}'); + $table->json('seo_meta')->default(new Expression("(JSON_OBJECT())")); }); } diff --git a/database/migrations/2023_08_23_100710_add_notification_settings_to_forms.php b/database/migrations/2023_08_23_100710_add_notification_settings_to_forms.php index b091f6b..21f96d1 100644 --- a/database/migrations/2023_08_23_100710_add_notification_settings_to_forms.php +++ b/database/migrations/2023_08_23_100710_add_notification_settings_to_forms.php @@ -1,6 +1,7 @@ json('notification_settings')->default('{}')->nullable(true); + $table->json('notification_settings')->default(new Expression("(JSON_OBJECT())"))->nullable(true); }); } diff --git a/database/migrations/2023_09_01_052507_add_fields_to_templates.php b/database/migrations/2023_09_01_052507_add_fields_to_templates.php index 3adfc83..2edfab3 100644 --- a/database/migrations/2023_09_01_052507_add_fields_to_templates.php +++ b/database/migrations/2023_09_01_052507_add_fields_to_templates.php @@ -1,6 +1,7 @@ boolean('publicly_listed')->default(false); - $table->jsonb('industries')->default('[]'); - $table->jsonb('types')->default('[]'); + $table->jsonb('industries')->default(new Expression("(JSON_ARRAY())")); + $table->jsonb('types')->default(new Expression("(JSON_ARRAY())")); $table->string('short_description')->nullable(); - $table->jsonb('related_templates')->default('[]'); + $table->jsonb('related_templates')->default(new Expression("(JSON_ARRAY())")); $table->string('image_url',500)->nullable()->change(); }); }