diff --git a/VERSIONS_HOTLINE/207656 b/VERSIONS_HOTLINE/207656
new file mode 100644
index 0000000000000000000000000000000000000000..8be3d10352796fe7cde3ec327343e82a41139114
--- /dev/null
+++ b/VERSIONS_HOTLINE/207656
@@ -0,0 +1 @@
+ - correctif #207656 : Activités : correction de la getion des quotas en mode file d'attente  
\ No newline at end of file
diff --git a/application/modules/admin/views/scripts/session-activity-inscription/subscribe.phtml b/application/modules/admin/views/scripts/session-activity-inscription/subscribe.phtml
index 94470b899a6aabcc96b0bacccb19807cc1145910..ab892d434fa86b6f41a734ef9a2f67d769741c83 100644
--- a/application/modules/admin/views/scripts/session-activity-inscription/subscribe.phtml
+++ b/application/modules/admin/views/scripts/session-activity-inscription/subscribe.phtml
@@ -1,6 +1,9 @@
 <?php
+if ($error = $this->error)
+  echo $this->tagError($error);
+
 if (!$this->isPopup())
   echo $this->partial('activity/_activity_panel.phtml',
-                      ['activity' => $this->inscription->getActivity()]);
+                      ['activity' => $this->inscription?->getActivity()]);
 
 echo $this->renderForm($this->form);
diff --git a/library/Class/SessionActivity.php b/library/Class/SessionActivity.php
index bd697a3364a821c287caf36e355f2e470c57644c..45bb8af0082ab3eea05c09b190b1969c90e42cfb 100644
--- a/library/Class/SessionActivity.php
+++ b/library/Class/SessionActivity.php
@@ -763,6 +763,13 @@ class Class_SessionActivity extends Storm_Model_Abstract {
   }
 
 
+  public function acceptAttendeesOnlyInQueue(): bool
+  {
+    return $this->getQueueAttendees()
+      && ($this->getTotalRegistered() >= $this->getEffectifTotalMax());
+  }
+
+
   public function isFullAdults() {
     return $this->_getAttendees()->isFullAdults();
   }
diff --git a/library/Class/SessionActivityAttendees.php b/library/Class/SessionActivityAttendees.php
index ddf6049ad08151ecef188601e6958cf4cdb7da1a..d36436d63badee00ca6f76b2194a335d3ee3fc01 100644
--- a/library/Class/SessionActivityAttendees.php
+++ b/library/Class/SessionActivityAttendees.php
@@ -353,6 +353,9 @@ class Class_SessionActivityAttendeesWithQueueAndQuotas extends Class_SessionActi
   protected bool $_session_with_quotas = true;
 
 
+  /**
+   * @warning this method check if there is unlimited quota
+   */
   public function isFull() : bool {
     return $this->isFullAdults() && $this->isFullChildren();
   }
diff --git a/library/Class/SessionActivityInscription.php b/library/Class/SessionActivityInscription.php
index d58729de0c6841d8aee3acc8b9dcafeb12b152d3..06451f2a0dd7b0f22116901f7957ce41b702211f 100644
--- a/library/Class/SessionActivityInscription.php
+++ b/library/Class/SessionActivityInscription.php
@@ -298,7 +298,7 @@ class Class_SessionActivityInscription extends Storm_Model_Abstract
     if ( $max < $current)
       $this->checkAttribute('adults',
                             false,
-                            $this->_('Le nombre maximum d\'adultes pour cette activité est atteint. Il ne doit pas dépasser %d adultes. %s',
+                            $this->_('Le nombre maximum d\'adultes pour cette activité est atteint. Il ne doit pas dépasser %d adulte(s). %s',
                                      $max,
                                      $plural));
 
@@ -322,7 +322,7 @@ class Class_SessionActivityInscription extends Storm_Model_Abstract
     if ( $max < $current)
       $this->checkAttribute('children',
                             false,
-                            $this->_('Le nombre maximum d\'enfants pour cette activité est atteint. Il ne doit pas dépasser %d enfants. %s',
+                            $this->_('Le nombre maximum d\'enfants pour cette activité est atteint. Il ne doit pas dépasser %d enfant(s). %s',
                                      $max,
                                      $plural));
 
@@ -338,6 +338,7 @@ class Class_SessionActivityInscription extends Storm_Model_Abstract
       $this->setQueue(0);
 
     return $this
+      ->_checkRemainingQueue()
       ->_checkRemainingAdultsQueue()
       ->_checkRemainingChildrenQueue();
   }
@@ -389,6 +390,20 @@ class Class_SessionActivityInscription extends Storm_Model_Abstract
   }
 
 
+  protected function _checkRemainingQueue(): self
+  {
+    if ( !$max = $this->getEffectifTotalMax())
+      return $this;
+
+    $current_with_new = $this->numberOfAdults() + $this->numberOfChildren();
+
+    if ($current_with_new > $max)
+      $this->setQueue(1);
+
+    return $this;
+  }
+
+
   protected function _checkAttributeTotal() : bool {
     $remaining = (int) ($this->isNew()
                         ? $this->getSessionActivity()->getNextTotalFor($this)
diff --git a/library/ZendAfi/Controller/Plugin/Manager/AbonneSessionActivity.php b/library/ZendAfi/Controller/Plugin/Manager/AbonneSessionActivity.php
index 357f6fe541f1964848b9b5619e623278a9248853..b7b060f81edf0de6b2167dda715b0e11227c910d 100644
--- a/library/ZendAfi/Controller/Plugin/Manager/AbonneSessionActivity.php
+++ b/library/ZendAfi/Controller/Plugin/Manager/AbonneSessionActivity.php
@@ -130,10 +130,20 @@ class ZendAfi_Controller_Plugin_Manager_AbonneSessionActivity
   }
 
 
+  protected function _getStatusInQueueMessage($model): string
+  {
+    return $this->_('Votre inscription à l\'activité %s du %s est enregistrée. Vous avez été placé.e sur liste d\'attente et serez notifié.e si une place se libère.',
+                    $model->getLibelleActivity(),
+                    $model->getDateDebutTexte());
+  }
+
+
   protected function _getSuccessfulSaveMessage($model) {
-    return $this->_('Modification de votre inscription à la session du %s de l\'activité %s réussie',
-                    $model->getDateDebutTexte(),
-                    $model->getLibelleActivity());
+    return $model->isQueue()
+      ? $this->_getStatusInQueueMessage($model)
+      : $this->_('Modification de votre inscription à la session du %s de l\'activité %s réussie',
+                 $model->getDateDebutTexte(),
+                 $model->getLibelleActivity());
   }
 
 
@@ -180,10 +190,8 @@ class ZendAfi_Controller_Plugin_Manager_AbonneSessionActivity
 
 
   protected function _getSuccessfulAddMessage($model) {
-    return ($model->hasQueue())
-      ? $this->_('Vous êtes sur la liste d\'attente pour la session du %s de l\'activité %s.',
-                    $model->getDateDebutTexte(),
-                    $model->getLibelleActivity())
+    return ($model->isQueue())
+      ? $this->_getStatusInQueueMessage($model)
       : $this->_('Vous êtes inscrit à la session du %s de l\'activité %s.',
                     $model->getDateDebutTexte(),
                     $model->getLibelleActivity());
diff --git a/library/ZendAfi/Controller/Plugin/Manager/SessionActivityInscriptionBasic.php b/library/ZendAfi/Controller/Plugin/Manager/SessionActivityInscriptionBasic.php
index b748abf037fde34a5ce245b270d3776d92b6db2a..2648c142736526ac9576a9b6a3c33f84c89250e3 100644
--- a/library/ZendAfi/Controller/Plugin/Manager/SessionActivityInscriptionBasic.php
+++ b/library/ZendAfi/Controller/Plugin/Manager/SessionActivityInscriptionBasic.php
@@ -110,9 +110,6 @@ class ZendAfi_Controller_Plugin_Manager_SessionActivityInscriptionBasic
 
 
   protected function _doAfterAdd($model) {
-    if (!$model->isQueue())
-      $this->_notifyRegistration($this->_user);
-
     if (!$this->_view->isPopup())
       $this->_redirectToUrlOrReferer($this->_redirect_default_url);
   }
@@ -161,7 +158,8 @@ class ZendAfi_Controller_Plugin_Manager_SessionActivityInscriptionBasic
 
 
   protected function _doOnCannotAdd() {
-    return $this->_redirectToReferer();
+    $this->_view->error = $this->_add_message;
+    return false;
   }
 
 
diff --git a/library/ZendAfi/Form/SessionActivityInscription.php b/library/ZendAfi/Form/SessionActivityInscription.php
index 67ea7011c0c80134a962a01128d9f36ad31c706c..9d3ccd39c4f1f6977443f7bdb5a5715c3ceba67f 100644
--- a/library/ZendAfi/Form/SessionActivityInscription.php
+++ b/library/ZendAfi/Form/SessionActivityInscription.php
@@ -29,6 +29,7 @@ class ZendAfi_Form_SessionActivityInscription extends ZendAfi_Form {
 
     $this
       ->addElement('info', 'totalmax_info')
+      ->addElement('info', 'queue_info')
       ->addElement('number', 'adults',
                    ['label' => $this->_('Nombre d\'adultes'),
                     'value' => 0,
@@ -63,6 +64,10 @@ class ZendAfi_Form_SessionActivityInscription extends ZendAfi_Form {
            ->setValue($this->_('Nombre total de participants: %s/%s',
                                $session->getTotalRegistered(), $total));
 
+    if ( !$session->hasStagiaire(Class_Users::getIdentity()) && $session->acceptAttendeesOnlyInQueue())
+      $this->getElement('queue_info')
+           ->setValue($this->_('Vous serez placé.e en liste d\'attente'));
+
     return $this;
   }
 
diff --git a/library/ZendAfi/View/Helper/Template/TruncateList.php b/library/ZendAfi/View/Helper/Template/TruncateList.php
index 60b0fca92d838c5fc73c6a2897468c9e0f138a35..6066dc18ddd7e0d1443240dc1087b7820467b577 100644
--- a/library/ZendAfi/View/Helper/Template/TruncateList.php
+++ b/library/ZendAfi/View/Helper/Template/TruncateList.php
@@ -29,6 +29,7 @@ class ZendAfi_View_Helper_Template_TruncateList
     $_min_size_for_tools = 5,
     $_page_size = 3,
     $_container_id,
+    $_module_id,
     $_widget_id,
     $_top_tools_id,
     $_bottom_tools_id;
@@ -51,12 +52,15 @@ class ZendAfi_View_Helper_Template_TruncateList
   }
 
 
-  protected function _truncateListWithTools($collection, $callback, $size) {
-    $this->_container_id = uniqid();
-    $this->_widget_id = 'truncate_list_widget_id_' . $this->_container_id;
-    $this->_top_tools_id = 'top_tools_' . $this->_container_id;
-    $this->_bottom_tools_id = 'bottom_tools_' . $this->_container_id;
+  public function setIdModule(string $id): self
+  {
+    $this->_module_id = $id;
+    return $this;
+  }
+
 
+  protected function _truncateListWithTools($collection, $callback, $size) {
+    $this->_initIds();
     $html = $collection
       ->injectInto('', fn($html, $element) => $html . $this->_tag('div',
                                  $callback($element->inJsSearch()),
@@ -82,6 +86,19 @@ class ZendAfi_View_Helper_Template_TruncateList
   }
 
 
+  protected function _initIds(): self
+  {
+    if ( ! $this->_container_id )
+      $this->_container_id = $this->_module_id ?: uniqid();
+
+    $this->_widget_id = 'truncate_list_widget_id_' . $this->_container_id;
+    $this->_top_tools_id = 'top_tools_' . $this->_container_id;
+    $this->_bottom_tools_id = 'bottom_tools_' . $this->_container_id;
+
+    return $this;
+  }
+
+
   protected function _renderTools($size, $tools_id) {
     $multi_options = $this->_getTruncateOptions($size);
 
@@ -120,8 +137,7 @@ class ZendAfi_View_Helper_Template_TruncateList
 
 
   public function renderHeadScriptsOn($script_loader) {
-    if ( ! $this->_container_id)
-      return $this;
+    $this->_initIds();
 
     $script_loader
       ->addSearchInputToContainer('#' . $this->_container_id,
diff --git a/library/templates/Intonation/Library/Widget/Carousel/View.php b/library/templates/Intonation/Library/Widget/Carousel/View.php
index df0be027431786477f2a3551748b3ddb1e3e2cc4..001cd45d735fdd4335a01713dd6732b843571c0f 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/View.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/View.php
@@ -267,7 +267,8 @@ abstract class Intonation_Library_Widget_Carousel_View extends Zendafi_View_Help
     if (in_array($layout,
                  [Intonation_Library_Widget_Carousel_Definition::MAP,
                   Intonation_Library_Widget_Carousel_Definition::WALL,
-                  Intonation_Library_Widget_Carousel_Definition::GRID]))
+                  Intonation_Library_Widget_Carousel_Definition::GRID,
+                  Intonation_Library_Widget_Carousel_Definition::LISTING_WITH_OPTIONS]))
       $this->_layout_helper->setIdModule($this->_settings->getIdForHtml());
 
     return $this->_layout_helper;
diff --git a/tests/application/modules/AbstractControllerTestCase.php b/tests/application/modules/AbstractControllerTestCase.php
index 58af5e5a130d4affe01a07ddb3f08fde18b8d796..90c0b21cffd1572916caa20543887650e6a80917 100644
--- a/tests/application/modules/AbstractControllerTestCase.php
+++ b/tests/application/modules/AbstractControllerTestCase.php
@@ -462,6 +462,12 @@ abstract class AbstractControllerTestCase extends Zend_Test_PHPUnit_ControllerTe
   }
 
 
+  public function assertFlashMessengerCount(int $count): void
+  {
+    $this->assertCount($count, $this->_getFlashMessengerNotifications());
+  }
+
+
   public function assertFlashMessengerContentContains(string $value, string $message = ''): void
   {
     $messages = $this->_getFlashMessengerNotifications();
diff --git a/tests/application/modules/admin/controllers/SessionActivityInscriptionControllerGetExceededQuotaWithoutQueueTest.php b/tests/application/modules/admin/controllers/SessionActivityInscriptionControllerGetExceededQuotaWithoutQueueTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..dd4fa52c4b8035768ca02dab0cf748240ad71cf0
--- /dev/null
+++ b/tests/application/modules/admin/controllers/SessionActivityInscriptionControllerGetExceededQuotaWithoutQueueTest.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright (c) 2012-2024, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class SessionActivityInscriptionControllerGetExceededQuotaWithoutQueueTest
+  extends Admin_AbstractControllerTestCase
+{
+  public function setUp(): void
+  {
+    parent::setUp();
+    Class_AdminVar::set('ACTIVITY_SESSION_QUOTAS', 1);
+
+    $group_trainee = $this->fixture(Class_UserGroup::class,
+                                    ['id' => 22,
+                                     'libelle' => 'Stagiaires',
+                                     'rights' => [Class_UserGroup::RIGHT_SUIVRE_ACTIVITY]]);
+
+    $this->fixture(Class_Users::class,
+                   ['id' => 1001,
+                    'nom' => 'Pistache',
+                    'prenom' => 'Amandine',
+                    'login' => 'Amd',
+                    'idabon' => '65251',
+                    'id_site' => 1,
+                    'password' => 'fx9k',
+                    'mail' => 'pist@che.io',
+                    'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
+                    'user_groups' => [$group_trainee]]);
+
+    $this->fixture(Class_Users::class,
+                   ['id' => 1002,
+                    'nom' => 'Poincaré',
+                    'prenom' => 'Raymond',
+                    'login' => 'rpoincare',
+                    'idabon' => '65252',
+                    'id_site' => 1,
+                    'password' => 'fx9k',
+                    'mail' => 'rpoincare@che.io',
+                    'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
+                    'user_groups' => [$group_trainee]]);
+
+    $this->fixture(Class_Activity::class,
+                   ['id' => 330,
+                    'libelle' => 'Petites histoire']);
+
+    $session = $this->fixture(Class_SessionActivity::class,
+                              ['id' => 320,
+                               'activity_id' => 330,
+                               'date_debut' => '2025-03-27',
+                               'date_fin' => '2025-03-29',
+                               'effectif_min' => 0,
+                               'effectif_max' => 1,
+                               'effectif_child_min' => 0,
+                               'effectif_child_max' => 1,
+                               'effectif_total_min' => 0,
+                               'effectif_total_max' => 2,
+                               'age_child_max' => 5,
+                               'effectif_inscription_max' => 1,
+                               'effectif_inscription_child_max' => 1,
+                               'duree'=> 8,
+                               'contenu' => 'Lecture',
+                               'horaires' => '9h - 12h, 13h - 18h',
+                               'date_limite_inscription'=>'2025-03-05',
+                               'queue_attendees' => false]);
+
+    $inscription = $this->fixture(Class_SessionActivityInscription::class,
+                                  ['id' => 617,
+                                   'stagiaire_id' => 1001,
+                                   'session_activity_id' => 320,
+                                   'adults' => 1,
+                                   'children' => 1]);
+
+    $session->setSessionActivityInscriptions([$inscription]);
+
+    $this->dispatch('/admin/session-activity-inscription/subscribe/'
+                    . 'id/320/stagiaire_id/1001');
+
+  }
+
+
+  /** @test */
+  public function responseShouldContainErrorMessageInscriptionImpossible()
+  {
+    $this->assertXPathContentContains('//p[@class="error"]',
+                                      'Inscription impossible, plus de place disponible.');
+  }
+}
diff --git a/tests/application/modules/admin/controllers/SessionActivityInscriptionControllerPostExceedingQuotaWithQueueAndExistingSubscriptionTest.php b/tests/application/modules/admin/controllers/SessionActivityInscriptionControllerPostExceedingQuotaWithQueueAndExistingSubscriptionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8b2b22664d5495081b545a345311953e02ee3552
--- /dev/null
+++ b/tests/application/modules/admin/controllers/SessionActivityInscriptionControllerPostExceedingQuotaWithQueueAndExistingSubscriptionTest.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Copyright (c) 2012-2024, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class SessionActivityInscriptionControllerPostExceedingQuotaWithQueueAndExistingSubscriptionTest
+  extends Admin_AbstractControllerTestCase
+{
+  public function setUp(): void
+  {
+    parent::setUp();
+
+    Class_AdminVar::set('ACTIVITY_SESSION_QUOTAS', 1);
+
+    $group_trainee = $this->fixture(Class_UserGroup::class,
+                                    ['id' => 22,
+                                     'libelle' => 'Stagiaires',
+                                     'rights' => [Class_UserGroup::RIGHT_SUIVRE_ACTIVITY]]);
+
+    $this->fixture(Class_Users::class,
+                   ['id' => 1002,
+                    'nom' => 'Poincaré',
+                    'prenom' => 'Raymond',
+                    'login' => 'rpoincare',
+                    'idabon' => '65252',
+                    'id_site' => 1,
+                    'password' => 'fx9k',
+                    'mail' => 'rpoincare@che.io',
+                    'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
+                    'user_groups' => [$group_trainee]]);
+
+    $this->fixture(Class_Users::class,
+                   ['id' => 1001,
+                    'nom' => 'Pistache',
+                    'prenom' => 'Amandine',
+                    'login' => 'Amd',
+                    'idabon' => '65251',
+                    'id_site' => 1,
+                    'password' => 'fx9k',
+                    'mail' => 'pist@che.io',
+                    'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
+                    'user_groups' => [$group_trainee]]);
+
+    $this->fixture(Class_Activity::class,
+                   ['id' => 330,
+                    'libelle' => 'Petites histoire']);
+
+    $session = $this->fixture(Class_SessionActivity::class,
+                              ['id' => 320,
+                               'activity_id' => 330,
+                               'date_debut' => '2025-03-27',
+                               'date_fin' => '2025-03-29',
+                               'effectif_min' => 0,
+                               'effectif_max' => 1,
+                               'effectif_child_min' => 0,
+                               'effectif_child_max' => 1,
+                               'effectif_total_min' => 0,
+                               'effectif_total_max' => 3,
+                               'age_child_max' => 5,
+                               'effectif_inscription_max' => 1,
+                               'effectif_inscription_child_max' => 1,
+                               'duree'=> 8,
+                               'contenu' => 'Lecture',
+                               'horaires' => '9h - 12h, 13h - 18h',
+                               'date_limite_inscription'=>'2025-03-05',
+                               'queue_attendees' => true]);
+
+    $inscription = $this->fixture(Class_SessionActivityInscription::class,
+                                  ['id' => 617,
+                                   'stagiaire_id' => 1002,
+                                   'session_activity_id' => 320,
+                                   'adults' => 1,
+                                   'children' => 1]);
+
+    $session->setSessionActivityInscriptions([$inscription]);
+
+    $this->postDispatch('/admin/session-activity-inscription/subscribe/'
+                        . 'id/320/stagiaire_id/1001',
+                        ['adults' => 1,
+                         'children' => 1]);
+  }
+
+  /** @test */
+  public function additionamSubscribingRequestShouldBePutInQueue()
+  {
+    $this->assertTrue(Class_SessionActivityInscription
+                      ::findFirstBy(['session_activity_id' => 320,
+                                     'stagiaire_id' => 1001])->isQueue());
+  }
+}
diff --git a/tests/application/modules/admin/controllers/SessionActivityInscriptionControllerPostExceedingQuotaWithQueueTest.php b/tests/application/modules/admin/controllers/SessionActivityInscriptionControllerPostExceedingQuotaWithQueueTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..af95681d25a59e7ad719edebd6a6fde4f093efa0
--- /dev/null
+++ b/tests/application/modules/admin/controllers/SessionActivityInscriptionControllerPostExceedingQuotaWithQueueTest.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * Copyright (c) 2012-2024, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class SessionActivityInscriptionControllerPostExceedingQuotaWithQueueTest
+  extends Admin_AbstractControllerTestCase
+{
+  public function setUp(): void
+  {
+    parent::setUp();
+
+    Class_AdminVar::set('ACTIVITY_SESSION_QUOTAS', 1);
+
+    $group_trainee = $this->fixture(Class_UserGroup::class,
+                                    ['id' => 22,
+                                     'libelle' => 'Stagiaires',
+                                     'rights' => [Class_UserGroup::RIGHT_SUIVRE_ACTIVITY]]);
+
+    $this->fixture(Class_Users::class,
+                   ['id' => 1001,
+                    'nom' => 'Pistache',
+                    'prenom' => 'Amandine',
+                    'login' => 'Amd',
+                    'idabon' => '65251',
+                    'id_site' => 1,
+                    'password' => 'fx9k',
+                    'mail' => 'pist@che.io',
+                    'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
+                    'user_groups' => [$group_trainee]]);
+
+    $this->fixture(Class_Activity::class,
+                   ['id' => 330,
+                    'libelle' => 'Petites histoire']);
+
+    $this->fixture(Class_SessionActivity::class,
+                   ['id' => 320,
+                    'activity_id' => 330,
+                    'date_debut' => '2025-03-27',
+                    'date_fin' => '2025-03-29',
+                    'effectif_min' => 0,
+                    'effectif_max' => 1,
+                    'effectif_child_min' => 0,
+                    'effectif_child_max' => 1,
+                    'effectif_total_min' => 0,
+                    'effectif_total_max' => 1,
+                    'age_child_max' => 5,
+                    'effectif_inscription_max' => 1,
+                    'effectif_inscription_child_max' => 1,
+                    'duree'=> 8,
+                    'contenu' => 'Lecture',
+                    'horaires' => '9h - 12h, 13h - 18h',
+                    'date_limite_inscription'=>'2025-03-05',
+                    'queue_attendees' => true]);
+
+    $this->postDispatch('/admin/session-activity-inscription/subscribe/'
+                        . 'id/320/stagiaire_id/1001',
+                        ['adults' => 1,
+                         'children' => 1]);
+  }
+
+  /** @test */
+  public function subscribingRequestShouldBePutInQueue()
+  {
+    $this->assertTrue(Class_SessionActivityInscription
+                      ::findFirstBy(['session_activity_id' => 320])->isQueue());
+  }
+}
diff --git a/tests/scenarios/Activities/AbonneControllerWithQuotasTest.php b/tests/scenarios/Activities/AbonneControllerWithQuotasTest.php
index 0c0c91ae8d633649306a60b8e69a4f90c5c7b473..e62ea6902cef57cb9fcef1fec9fe15b281606df2 100644
--- a/tests/scenarios/Activities/AbonneControllerWithQuotasTest.php
+++ b/tests/scenarios/Activities/AbonneControllerWithQuotasTest.php
@@ -731,7 +731,14 @@ class Activities_AbonneControllerWithQuotasRegisterSessionPostTest
 
   /** @test */
   public function shouldNotifyRegistered() {
-    $this->assertFlashMessengerContentContains('Vous êtes inscrit');
+    $this->assertFlashMessengerContentContains('Vous êtes inscrit à la session du 10 février 2015 de l\'activité Learn Java.');
+  }
+
+
+  /** @test */
+  public function flashMessengerShouldContainOneMessage()
+  {
+    $this->assertFlashMessengerCount(1);
   }
 }
 
@@ -875,13 +882,13 @@ class Activities_AbonneControllerWithQuotasRegisterSessionMaxQuotasErrosWithTota
 
   /** @test */
   public function shouldDisplayTooManyAdults() {
-    $this->assertXPathContentContains('//ul[@class="errors"]', 'Le nombre maximum d\'adultes pour cette activité est atteint. Il ne doit pas dépasser 3 adultes. Il reste 3 places pour les adultes');
+    $this->assertXPathContentContains('//ul[@class="errors"]', 'Le nombre maximum d\'adultes pour cette activité est atteint. Il ne doit pas dépasser 3 adulte(s). Il reste 3 places pour les adultes');
   }
 
 
   /** @test */
   public function shouldDisplayTooManyChildren() {
-    $this->assertXPathContentContains('//ul[@class="errors"]', 'Le nombre maximum d\'enfants pour cette activité est atteint. Il ne doit pas dépasser 4 enfants. Il reste 4 places pour les enfants.');
+    $this->assertXPathContentContains('//ul[@class="errors"]', 'Le nombre maximum d\'enfants pour cette activité est atteint. Il ne doit pas dépasser 4 enfant(s). Il reste 4 places pour les enfants.');
   }
 }
 
@@ -1069,7 +1076,7 @@ class Activities_AbonneControllerWithQuotasRegisterSessionWithNoMoreAdultsPostTe
 
   /** @test */
   public function pageShouldContainsTooManyChildrenError() {
-    $this->assertXPathContentContains('//ul[@class="errors"]', 'Le nombre maximum d\'enfants pour cette activité est atteint. Il ne doit pas dépasser 2 enfants. Il reste 1 place pour un enfant.');
+    $this->assertXPathContentContains('//ul[@class="errors"]', 'Le nombre maximum d\'enfants pour cette activité est atteint. Il ne doit pas dépasser 2 enfant(s). Il reste 1 place pour un enfant.');
   }
 
 
@@ -1107,7 +1114,7 @@ class Activities_AbonneControllerWithQuotasRegisterSessionWithNoMoreChildrenPost
 
   /** @test */
   public function pageShouldContainsTooManyAdultsError() {
-    $this->assertXPathContentContains('//ul[@class="errors"]', 'Le nombre maximum d\'adultes pour cette activité est atteint. Il ne doit pas dépasser 2 adultes. Il reste 1 place pour un adulte.');
+    $this->assertXPathContentContains('//ul[@class="errors"]', 'Le nombre maximum d\'adultes pour cette activité est atteint. Il ne doit pas dépasser 2 adulte(s). Il reste 1 place pour un adulte.');
   }
 
 
diff --git a/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasAndQueueExistsTest.php b/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasAndQueueExistsTest.php
index 8f7fed64b9b9fbdb1e321ae17e0e76a6ca5e8df5..318f061be9eeabf9aa9ac8ab7f41223bbb2095c6 100644
--- a/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasAndQueueExistsTest.php
+++ b/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasAndQueueExistsTest.php
@@ -80,7 +80,7 @@ class AbonneInscrireSessionWithQuotasFullAndQueueExistsTest extends AbstractCont
   /** @test */
   public function registrationShouldSuccessWithQueueMessage()
   {
-    $this->assertFlashMessengerContentContains('Vous êtes sur la liste d\'attente pour la session du 09 octobre 2024 de l\'activité scythe chap 1.');
+    $this->assertFlashMessengerContentContains('Votre inscription à l\'activité scythe chap 1 du 09 octobre 2024 est enregistrée. Vous avez été placé.e sur liste d\'attente et serez notifié.e si une place se libère.');
   }
 
 
diff --git a/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasAndQueueTest.php b/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasAndQueueTest.php
index e7ff30e05ae49dc8c1b97f80f8acb03fcbc48a6d..6b6b440ed705676bc14ecf8c870fb3dd68b9767e 100644
--- a/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasAndQueueTest.php
+++ b/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasAndQueueTest.php
@@ -75,7 +75,7 @@ class AbonneInscrireSessionWithQuotasFullAndQueueTest extends AbstractController
   /** @test */
   public function registrationShouldSuccessWithQueueMessage()
   {
-    $this->assertFlashMessengerContentContains('Vous êtes sur la liste d\'attente pour la session du 09 octobre 2024 de l\'activité scythe chap 1.');
+    $this->assertFlashMessengerContentContains('Votre inscription à l\'activité scythe chap 1 du 09 octobre 2024 est enregistrée. Vous avez été placé.e sur liste d\'attente et serez notifié.e si une place se libère.');
   }
 
 
diff --git a/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasTest.php b/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasTest.php
index 4d0da9f65231db7abd5a49a141b6c0bf104ec594..e92d06918fc2f10de9b93821bcb3fcae7871efa3 100644
--- a/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasTest.php
+++ b/tests/scenarios/Activities/AbonneInscrireSessionWithQuotasTest.php
@@ -74,7 +74,7 @@ class AbonneInscrireSessionWithQuotasFullTest extends AbstractControllerTestCase
   /** @test */
   public function registrationShouldFailWithFullMessage()
   {
-    $this->assertFlashMessengerContentContains('Le nombre maximum d\'adultes pour cette activité est atteint. Il ne doit pas dépasser 2 adultes. Il reste 1 place pour un adulte.');
+    $this->assertFlashMessengerContentContains('Le nombre maximum d\'adultes pour cette activité est atteint. Il ne doit pas dépasser 2 adulte(s). Il reste 1 place pour un adulte.');
   }
 
 
diff --git a/tests/scenarios/Activities/ActivitiesWithQueueAbonneTest.php b/tests/scenarios/Activities/ActivitiesWithQueueAbonneTest.php
index 8802bbb02452cada4d149f4eaa227abc610d1de2..d8d58bdd8526f35e57a300436c8cae0129b715bd 100644
--- a/tests/scenarios/Activities/ActivitiesWithQueueAbonneTest.php
+++ b/tests/scenarios/Activities/ActivitiesWithQueueAbonneTest.php
@@ -726,6 +726,18 @@ class ActivitiesWithQueueAbonneWithQuotasFullNotInQueueEditTest
   }
 
 
+  /** @test */
+  public function modifShouldHaveMessageInQueue()
+  {
+    ZendAfi_Auth::getInstance()->logUser(Class_Users::find(435));
+    $this->postDispatch('/abonne/edit-session/id/159',
+                        ['adults' => 2,
+                         'children'=>3]);
+    Class_SessionActivityInscription::clearCache();
+    $this->assertFlashMessengerContentContains("Votre inscription à l'activité Learn Java du 27 mai 2021 est enregistrée. Vous avez été placé.e sur liste d'attente et serez notifié.e si une place se libère.");
+  }
+
+
   /** @test */
   public function onPostLessAdultsShouldReloadQueue() {
     $this->postDispatch('/abonne/edit-session/id/234', ['adults' => 2]);
@@ -1062,6 +1074,13 @@ class ActivitiesWithQueueAbonneWithMaxQuotasTest
   }
 
 
+  /** @test */
+  public function pageShouldNotContainsQueueInfo()
+  {
+    $this->assertNotXPathContentContains('//div', 'Vous serez placé.e en liste d\'attente');
+  }
+
+
   /** @test */
   public function pageShouldContainsNombresAdultes15PlacesRestantes() {
     $this->assertXPathContentContains('//label[@for="adults"]',
@@ -1106,6 +1125,13 @@ class ActivitiesWithQueueAbonneWithMaxQuotasPartiallyRegistredTest
   }
 
 
+  /** @test */
+  public function pageShouldNotContainsQueueInfo()
+  {
+    $this->assertNotXPathContentContains('//div', 'Vous serez placé.e en liste d\'attente');
+  }
+
+
   /** @test */
   public function pageShouldContainsNombresAdultes5PlacesRestantes() {
     $this->assertXPathContentContains('//label[@for="adults"]',
@@ -1150,6 +1176,13 @@ class ActivitiesWithQueueAbonneWithMaxQuotasFullRegistredTest
   }
 
 
+  /** @test */
+  public function pageShouldContainsQueueInfo()
+  {
+    $this->assertXPathContentContains('//div', 'Vous serez placé.e en liste d\'attente');
+  }
+
+
   /** @test */
   public function pageShouldContainsNombresAdultesComplet() {
     $this->assertXPathContentContains('//label[@for="adults"]',
@@ -1192,7 +1225,10 @@ class ActivitiesWithQueueAbonneWithMaxQuotasFullAttemptRegistringTest
 
   /** @test */
   public function registrationShouldBePutInQueue() {
-    $registration = Class_SessionActivityInscription::find(568);
+    $registration = Class_SessionActivityInscription::findFirstBy(['stagiaire_id' => 435,
+                                                          'session_activity_id' => 36,
+                                                          'adults' => 10,
+                                                          'children' => 10]);
     $this->assertTrue($registration->isQueue());
   }
 }
diff --git a/tests/scenarios/Templates/TemplatesActivitiesWidgetCachedTest.php b/tests/scenarios/Templates/TemplatesActivitiesWidgetCachedTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..630a67ecff9ed9c6a1e0a4141a27758eec463120
--- /dev/null
+++ b/tests/scenarios/Templates/TemplatesActivitiesWidgetCachedTest.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Copyright (c) 2012-2024, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class TemplatesActivitiesWidgetHiddenSessionActivityAsAdminTest
+  extends AbstractControllerTestCase
+{
+
+  public function setUp(): void
+  {
+    parent::setUp();
+
+    $this->_buildTemplateProfil(['id' => 3]);
+
+    $group = $this->fixture(Class_UserGroup::class,
+                            ['id' => 19,
+                             'libelle' => 'Le groupe des activités',
+                             'rights' => [Class_UserGroup::RIGHT_DIRIGER_ACTIVITY]]);
+
+    $bib = $this->fixture(Class_Bib::class, ['id' => 12,
+                                             'libelle' => 'Annecy']);
+
+    $logged = $this->fixture(Class_Users::class,
+                             ['id' => 12,
+                              'nom' => 'Rédacteur',
+                              'prenom' => 'Activités',
+                              'login' => 'ractivities',
+                              'password' => 'fx9k',
+                              'mail' => 'r@bib.com',
+                              'bib' => $bib,
+                              'user_groups' => [$group],
+                              'role_level' => ZendAfi_Acl_AdminControllerRoles::MODO_BIB]);
+
+    (new Class_Template_ProfilePatcher(null))
+      ->setProfile(Class_Profil::find(3))
+      ->addWidget(Intonation_Library_Widget_Carousel_Activity_Definition::CODE,
+                  Class_Profil::DIV_MAIN,
+                  ['rendering' => 'card-horizontal',
+                   'selected_activities' => '56-57',
+                   'layout' => 'list_with_options',
+                   'order' => 'title desc',
+                   'size' => 5]);
+
+    $this->fixture(Class_Activity::class,
+                   ['id' => 56,
+                    'libelle' => 'scythe chap 1',
+                    'visible' => true])
+         ->setSessions([$this->fixture(Class_SessionActivity::class,
+                                       ['id' => 1,
+                                        'contenu' => 'dogfighting tricks',
+                                        'date_debut' => '2024-09-05',
+                                        'date_fin' => '2024-10-30',
+                                        'date_limite_fin' => '2024-09-04',
+                                        'stagiaires' => [],
+                                        'effectif_max' => 0,
+                                        'effectif_min' => 0,
+                                        'visible' => false])])
+         ->save();
+
+    $this->fixture(Class_Activity::class,
+                   ['id' => 57,
+                    'libelle' => 'scythe chap 2'])
+         ->setSessions([$this->fixture(Class_SessionActivity::class,
+                                       ['id' => 5,
+                                        'contenu' => 'dogfighting aim',
+                                        'date_debut' => '2024-10-10',
+                                        'date_fin' => '2024-10-30',
+                                        'date_limite_fin' => '2024-10-08',
+                                        'stagiaires' => [],
+                                        'effectif_max' => 10,
+                                        'effectif_min' => 1])])
+         ->save();
+
+    $timesource = new TimeSourceForTest('2024-09-04');
+    Class_SessionActivity::setTimeSource($timesource);
+    Intonation_Library_Widget_Carousel_Activity_Definition::setTimeSource($timesource);
+
+    ZendAfi_Auth::getInstance()->logUser($logged);
+    $this->dispatch('/');
+  }
+
+  /** @test */
+  public function truncateListToolsScriptShouldBeLoaded()
+  {
+    $this->assertXPathContentContains('//script', 'truncate_list_tools');
+  }
+
+  /** @test */
+  public function scytheChap2ShouldBeDisplayed()
+  {
+    $this->assertXPathContentContains('//main', 'scythe chap 2');
+  }
+}