From 65b5083223a93085d63dd94e6d25b7254a0cea53 Mon Sep 17 00:00:00 2001 From: romanetar Date: Wed, 3 Jun 2026 19:28:41 +0200 Subject: [PATCH] fix(selection-plan): allow emoji in SubmissionPeriodDisclaimer Signed-off-by: romanetar --- config/database.php | 8 ++-- .../model/Version20260603184510.php | 39 +++++++++++++++++++ .../OAuth2SummitSelectionPlansApiTest.php | 38 ++++++++++++++++++ 3 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 database/migrations/model/Version20260603184510.php diff --git a/config/database.php b/config/database.php index 438b94098..6460a0fd3 100644 --- a/config/database.php +++ b/config/database.php @@ -8,8 +8,8 @@ 'username' => env('SS_DB_USERNAME'), 'password' => env('SS_DB_PASSWORD'), 'port' => env('SS_DB_PORT', 3306), - 'charset' => env('SS_DB_CHARSET', 'utf8'), - 'collation' => env('SS_DB_COLLATION', 'utf8_unicode_ci'), + 'charset' => env('SS_DB_CHARSET', 'utf8mb4'), + 'collation' => env('SS_DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => env('SS_DB_PREFIX', ''), 'serverVersion' => env('DB_SERVER_VERSION', '8.0.43') ]; @@ -61,8 +61,8 @@ 'username' => env('SS_DB_USERNAME'), 'password' => env('SS_DB_PASSWORD'), 'port' => env('SS_DB_PORT', 3306), - 'charset' => env('SS_DB_CHARSET', 'utf8'), - 'collation' => env('SS_DB_COLLATION', 'utf8_unicode_ci'), + 'charset' => env('SS_DB_CHARSET', 'utf8mb4'), + 'collation' => env('SS_DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => env('SS_DB_PREFIX', ''), 'serverVersion' => env('DB_SERVER_VERSION', '8.0.43') ]; diff --git a/database/migrations/model/Version20260603184510.php b/database/migrations/model/Version20260603184510.php new file mode 100644 index 000000000..60b40d789 --- /dev/null +++ b/database/migrations/model/Version20260603184510.php @@ -0,0 +1,39 @@ +addSql($sql); + } + + /** + * @param Schema $schema + */ + public function down(Schema $schema): void + { + + } +} diff --git a/tests/oauth2/OAuth2SummitSelectionPlansApiTest.php b/tests/oauth2/OAuth2SummitSelectionPlansApiTest.php index b5028a781..bcfd6f06f 100644 --- a/tests/oauth2/OAuth2SummitSelectionPlansApiTest.php +++ b/tests/oauth2/OAuth2SummitSelectionPlansApiTest.php @@ -172,6 +172,44 @@ public function testUpdateSelectionPlan() $this->assertEquals($is_hidden, $selectionPlan->is_hidden); } + public function testUpdateSelectionPlanWithEmojiInDisclaimer() + { + // Regression: SubmissionPeriodDisclaimer column was utf8 (3-byte), which rejected U+1F4C5 (📅) + $disclaimer = "Submit before the deadline \u{1F4C5}"; + + $params = [ + 'id' => self::$summit->getId(), + 'selection_plan_id' => self::$default_selection_plan->getId(), + ]; + + $data = [ + 'submission_period_disclaimer' => $disclaimer, + ]; + + $response = $this->action( + "PUT", + "OAuth2SummitSelectionPlansApiController@updateSelectionPlan", + $params, + [], + [], + [], + $this->getHeaders(), + json_encode($data) + ); + + $content = $response->getContent(); + $this->assertResponseStatus(201); + $selectionPlan = json_decode($content); + $this->assertNotNull($selectionPlan); + $this->assertEquals($disclaimer, $selectionPlan->submission_period_disclaimer); + + // Verify the value was actually persisted and reads back identically + $repository = self::$em->getRepository(\App\Models\Foundation\Summit\SelectionPlan::class); + self::$em->clear(); + $persisted = $repository->find(self::$default_selection_plan->getId()); + $this->assertEquals($disclaimer, $persisted->getSubmissionPeriodDisclaimer()); + } + public function testAttachPresentationType() { $params = [