diff --git a/public/assets/css/pages/messages.css b/public/assets/css/pages/messages.css index 80f30bf2..eb202b6e 100644 --- a/public/assets/css/pages/messages.css +++ b/public/assets/css/pages/messages.css @@ -391,6 +391,18 @@ rb-composer { text-align: center; } +.rb-chat-hint { + margin: 0; + padding: var(--rb-space-2) var(--rb-space-3); + color: var(--rb-text-3); + font-size: 0.8125rem; + text-align: center; +} + +.rb-chat-hint a { + color: var(--rb-accent); +} + .rb-chat-label { margin: 0; color: var(--rb-text-3); diff --git a/templates/messages/index.php b/templates/messages/index.php index e38f520a..e4df4921 100644 --- a/templates/messages/index.php +++ b/templates/messages/index.php @@ -41,6 +41,10 @@
Vous devez appartenir à un autre groupe pour écrire à celui-ci.
+ + +Pour échanger un créneau, passez par Réserver le local : le planning reste à jour.
+= $thread !== null ? e($thread['status']) : '' ?>
diff --git a/tests/Messaging/Controller/MessagesPageControllerTest.php b/tests/Messaging/Controller/MessagesPageControllerTest.php index 97e413e3..7afbbfe4 100644 --- a/tests/Messaging/Controller/MessagesPageControllerTest.php +++ b/tests/Messaging/Controller/MessagesPageControllerTest.php @@ -591,6 +591,36 @@ public function testDirectComposeRendersAnEmptyThreadAddressedToThePersonWithout self::assertSame([], $this->reader->listFor($alice->id(), 'active'), 'ouvrir la page ne crée rien'); } + #[Test] + public function testDraftPagesRemindToGoThroughBookTheRoomForASlotExchangeButExistingThreadsDoNot(): void + { + $alice = $this->user('Alice'); + $this->group('Alpha', $alice); + $target = $this->group('Beta Rockers'); + $bob = $this->user('Bob'); + $this->loginAs($alice); + + foreach ([ + $this->controller->compose($this->request(), (string) $target->id())->body(), + $this->controller->directCompose($this->request(), (string) $bob->id())->body(), + ] as $body) { + self::assertStringContainsString('Pour échanger un créneau', $body); + self::assertStringContainsString('Réserver le local', $body); + } + + self::assertStringNotContainsString('Pour échanger un créneau', $this->controller->list($this->request())->body()); + } + + #[Test] + public function testTheExchangeReminderIsHiddenWhenThePersonCannotWriteFromAnyGroup(): void + { + $alice = $this->user('Alice'); + $target = $this->group('Beta Rockers'); + $this->loginAs($alice); + + self::assertStringNotContainsString('Pour échanger un créneau', $this->controller->compose($this->request(), (string) $target->id())->body()); + } + #[Test] public function testDirectComposeRefusesYourselfUnknownInactiveAndMalformedTargets(): void {