diff --git a/VERSIONS_HOTLINE/155100 b/VERSIONS_HOTLINE/155100
new file mode 100644
index 0000000000000000000000000000000000000000..ea910f1b03d192f1406256026029ca8f8a1ab94c
--- /dev/null
+++ b/VERSIONS_HOTLINE/155100
@@ -0,0 +1 @@
+ - correctif #155100 : Magasin de thèmes : correction de la génération des URLs des images.
\ No newline at end of file
diff --git a/library/Class/Article.php b/library/Class/Article.php
index 8b449fb3820afdc62d2653b2b60e8550acc69f41..a88a6651cdd52e7e3877f2e35918164525513bd1 100644
--- a/library/Class/Article.php
+++ b/library/Class/Article.php
@@ -634,6 +634,12 @@ class Class_Article extends Storm_Model_Abstract {
   }
 
 
+  public function getFirstImageRelativeURL() : string {
+    return $this->withFirstImageDo(function($url) {return Class_Url::relative($url);});
+  }
+
+
+
   public function getFirstImagePath() {
     return $this->withFirstImageDo(function($url) {return $this->getPathFromURL($url);});
   }
diff --git a/library/Class/FileManager.php b/library/Class/FileManager.php
index 8b43c0a5fe80f80de4ee566aa2bf6153656c7224..359a534feb1ed07424bd0f13a14c54555f9bf7b4 100644
--- a/library/Class/FileManager.php
+++ b/library/Class/FileManager.php
@@ -588,6 +588,11 @@ class Class_FileManager extends Class_Entity {
   }
 
 
+  public function getRelativeUrl() : string {
+    return Class_Url::relative($this->getPath(), null, true);
+  }
+
+
   public function getRealpath() {
     return $this->_attribs['Realpath'];
   }
diff --git a/library/templates/Herisson/Library/ProfilePatcher.php b/library/templates/Herisson/Library/ProfilePatcher.php
index e511ecb95d0545037c2d020f3d6cab0263b61eca..7c5902c62c05f7b8fbf3a19a25c00d558cf5cb10 100644
--- a/library/templates/Herisson/Library/ProfilePatcher.php
+++ b/library/templates/Herisson/Library/ProfilePatcher.php
@@ -547,7 +547,7 @@ class Herisson_Library_ProfilePatcher extends Intonation_Library_ProfilePatcher
                                             'position_fixed_top_left',
                                             'no_border_widget',
                                             'no_border_radius'],
-                                'image' => Class_Url::absolute('/library/templates/Herisson/Assets/images/herisson_logo.png'),
+                                'image' => Class_Url::relative('/library/templates/Herisson/Assets/images/herisson_logo.png'),
                                 'link' => $this->_('/accueil'),
                                 $this->_template->withNameSpace('width_xsmall') => 4,
                                 $this->_template->withNameSpace('width_medium') => 2,
@@ -585,7 +585,7 @@ class Herisson_Library_ProfilePatcher extends Intonation_Library_ProfilePatcher
                    Class_Profil::DIV_BANNIERE,
                    array_merge(['titre' => $this->_('Image banniere'),
                                 $this->_template->withNameSpace('styles_pack') => $this->_style_pack_image_banniere->getId(),
-                                'image' => Class_Url::absolute('/library/templates/Herisson/Assets/images/banniere_herisson.jpg'),
+                                'image' => Class_Url::relative('/library/templates/Herisson/Assets/images/banniere_herisson.jpg'),
                                 'link' => $this->_('/accueil'),
                                 $this->_template->withNameSpace('width_xsmall') => 12],
                                $this->_disable_widget_template))
@@ -698,7 +698,7 @@ class Herisson_Library_ProfilePatcher extends Intonation_Library_ProfilePatcher
                                             'm-auto',
                                             'py-3',
                                             'align-items-center'],
-                                'image' => Class_Url::absolute('/library/templates/Herisson/Assets/images/herisson_logo.png'),
+                                'image' => Class_Url::relative('/library/templates/Herisson/Assets/images/herisson_logo.png'),
                                 'link' => $this->_('/accueil'),
                                 $this->_template->withNameSpace('width_xsmall') => 8,
                                 $this->_template->withNameSpace('width_medium') => 5,
diff --git a/library/templates/Intonation/Library/View/Wrapper/Article.php b/library/templates/Intonation/Library/View/Wrapper/Article.php
index e2a68ea2310a11d5bb32ff4533b12948614d580a..2176bcada8d97e07317ba926f6d307a26e17efba 100644
--- a/library/templates/Intonation/Library/View/Wrapper/Article.php
+++ b/library/templates/Intonation/Library/View/Wrapper/Article.php
@@ -70,7 +70,7 @@ class Intonation_Library_View_Wrapper_Article extends Intonation_Library_View_Wr
 
 
   public function getPicture() {
-    return $this->_model->getFirstImageAbsoluteURL();
+    return $this->_model->getFirstImageRelativeURL();
   }
 
 
diff --git a/library/templates/Intonation/Library/View/Wrapper/User.php b/library/templates/Intonation/Library/View/Wrapper/User.php
index baa3dc0bbd02e2f1181c464b875a3e13164a17ee..560ee740ce48393e820ad77c1265d8fc59e8db5d 100644
--- a/library/templates/Intonation/Library/View/Wrapper/User.php
+++ b/library/templates/Intonation/Library/View/Wrapper/User.php
@@ -58,7 +58,7 @@ class Intonation_Library_View_Wrapper_User extends Intonation_Library_View_Wrapp
     if (!$img)
       return '';
 
-    return Class_Url::absolute($img);
+    return Class_Url::relative($img);
   }
 
 
diff --git a/library/templates/Intonation/Library/View/Wrapper/User/RichContent/ChangeImage.php b/library/templates/Intonation/Library/View/Wrapper/User/RichContent/ChangeImage.php
index ccf525fe1b85ec9b2522608015d3b8221ce3a3df..ddbb42cc55c1b48aa658ad16b391bcb4cdb49f49 100644
--- a/library/templates/Intonation/Library/View/Wrapper/User/RichContent/ChangeImage.php
+++ b/library/templates/Intonation/Library/View/Wrapper/User/RichContent/ChangeImage.php
@@ -79,7 +79,7 @@ class Intonation_Library_View_Wrapper_User_RichContent_ChangeImage extends Inton
 
 
   protected function _cardify($image, $current) {
-    $url = $image->getUrl();
+    $url = $image->getRelativeUrl();
     $selected = ($current == $url) ? ' border border-primary disabled shadow-lg selected btn btn-primary' : '';
 
     return $this->_view->div(['class' => 'card shadow-sm' . $selected],
diff --git a/library/templates/Intonation/Library/Widget/Accessibility/View.php b/library/templates/Intonation/Library/Widget/Accessibility/View.php
index 3dc64653f26efcdcae0a9d49aa8208882ca4840a..6bcfbfbb83de1ec24c3613cf1387961e5f04b059 100644
--- a/library/templates/Intonation/Library/Widget/Accessibility/View.php
+++ b/library/templates/Intonation/Library/Widget/Accessibility/View.php
@@ -132,7 +132,7 @@ class Intonation_Library_Widget_Accessibility_View extends Zendafi_View_Helper_A
                              'title' => $option->getText(),
                              'data-name' => $file]);
 
-    $icon = $this->view->tagImg(Class_Url::absolute(sprintf('public/opac/images/buttons/%s.png',
+    $icon = $this->view->tagImg(Class_Url::relative(sprintf('public/opac/images/buttons/%s.png',
                                                             $option->getIcon())));
 
     $attribs = ['data-cookie-key' => $option->getCookieKey(),
@@ -140,7 +140,7 @@ class Intonation_Library_Widget_Accessibility_View extends Zendafi_View_Helper_A
                 'onclick' => ''];
 
     if ($file)
-      $attribs['data-stylesheet-url'] = Class_Url::absolute('/public/opac/css/' . $file . '.css');
+      $attribs['data-stylesheet-url'] = Class_Url::relative('/public/opac/css/' . $file . '.css');
 
     if ($option->getDefaultStyle())
       $attribs['data-stylesheet-default'] = 1;
@@ -163,14 +163,14 @@ class Intonation_Library_Widget_Accessibility_View extends Zendafi_View_Helper_A
 
     return
       $this->view->button((new Class_Button)
-                          ->setImage($this->view->tagImg(Class_Url::absolute('public/opac/images/buttons/default_font_size.png')))
+                          ->setImage($this->view->tagImg(Class_Url::relative('public/opac/images/buttons/default_font_size.png')))
                           ->setText($this->_('Réinitialiser la police'))
                           ->setAttribs(['class' => 'accessibility default_font_size',
                                         'data-font-size' => 'default',
                                         'onclick' => '']))
 
       . $this->view->button((new Class_Button)
-                            ->setImage($this->view->tagImg(Class_Url::absolute('public/opac/images/buttons/decrease_font_size.png')))
+                            ->setImage($this->view->tagImg(Class_Url::relative('public/opac/images/buttons/decrease_font_size.png')))
                             ->setText($this->_('Diminuer la police'))
                             ->setAttribs(['class' => 'accessibility',
                                           'data-font-size' => 'decrease_font_size',
@@ -186,7 +186,7 @@ class Intonation_Library_Widget_Accessibility_View extends Zendafi_View_Helper_A
                      'data-font-size' => 'current_font_size'])
 
       . $this->view->button((new Class_Button)
-                            ->setImage($this->view->tagImg(Class_Url::absolute('public/opac/images/buttons/increase_font_size.png')))
+                            ->setImage($this->view->tagImg(Class_Url::relative('public/opac/images/buttons/increase_font_size.png')))
                             ->setText($this->_('Augmenter la police'))
                             ->setAttribs(['class' => 'accessibility',
                                           'data-font-size' => 'increase_font_size',
diff --git a/library/templates/Intonation/Library/Widget/Carousel/LibraryNovelties/View.php b/library/templates/Intonation/Library/Widget/Carousel/LibraryNovelties/View.php
index dd365af24c1e703758c716163a9e36754f44a329..a26ac609b48381aba279700ce8ac92ed510b66ec 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/LibraryNovelties/View.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/LibraryNovelties/View.php
@@ -62,7 +62,7 @@ class Intonation_Library_Widget_Carousel_LibraryNovelties_View extends Intonatio
 
   protected function _getRSSUrl() {
     $profile = Class_Profil::getCurrentProfil();
-    return Class_Url::absolute(['module' => 'opac',
+    return Class_Url::relative(['module' => 'opac',
                                 'controller' => 'rss',
                                 'action' => 'library-novelties',
                                 'id' => $this->_extractLibraryIdFromSettings(),
diff --git a/library/templates/Intonation/Library/Widget/Image/View.php b/library/templates/Intonation/Library/Widget/Image/View.php
index ec5c178bde734964e64af10ae6de270ad43acf2d..0cde13cad7b3ac173c048122c575bddc7c9b2489 100644
--- a/library/templates/Intonation/Library/Widget/Image/View.php
+++ b/library/templates/Intonation/Library/Widget/Image/View.php
@@ -35,11 +35,11 @@ class Intonation_Library_Widget_Image_View extends Zendafi_View_Helper_Accueil_B
       $files = Class_FileManager::files(USERFILES . '/bannieres/');
       $files = array_filter($files, function($file) { return $file->isImage();});
       $file = reset($files);
-      $image = $file ? $file->getUrl() : '';
+      $image = $file ? $file->getRelativeUrl() : '';
     }
 
     $img = $image
-      ? $this->view->tagImg(Class_Url::absolute($image),
+      ? $this->view->tagImg(Class_Url::relative($image),
                             ['class' => 'image_widget',
                              'alt' => $this->_settings->getImageAlt()])
       : '';
diff --git a/library/templates/Muscle/Library/ProfilePatcher.php b/library/templates/Muscle/Library/ProfilePatcher.php
index e4f59f48661e626e95c99c4595e8ae15ac64dae8..7b99e7ff6e3252e5fc27d70fac283914faa053ef 100644
--- a/library/templates/Muscle/Library/ProfilePatcher.php
+++ b/library/templates/Muscle/Library/ProfilePatcher.php
@@ -292,7 +292,7 @@ class Muscle_Library_ProfilePatcher extends Intonation_Library_ProfilePatcher {
       ->_addWidget(Intonation_Library_Widget_Image_Definition::CODE,
                    Class_Profil::DIV_BANNIERE,
                    ['titre' => $this->_('Logo du réseau'),
-                    'image' => Class_Url::absolute('/library/templates/Muscle/Assets/images/logo.png'),
+                    'image' => Class_Url::relative('/library/templates/Muscle/Assets/images/logo.png'),
                     'link' => '',
                     $this->_template->withNameSpace('styles_pack') => $this->_no_border_no_radius_no_shadow_no_background_content_center->getId(),
                     $this->_nameSpaced('responsive_pack') => $this->_full_width_responsive_pack->getId(),
diff --git a/library/templates/Polygone/Library/ProfilePatcher.php b/library/templates/Polygone/Library/ProfilePatcher.php
index 59e02a5e03e8aa5f27e760863ba85fffa4d3921a..10e572c8c73f659e9c9be9e3494c90353ee29b7f 100644
--- a/library/templates/Polygone/Library/ProfilePatcher.php
+++ b/library/templates/Polygone/Library/ProfilePatcher.php
@@ -262,7 +262,7 @@ class Polygone_Library_ProfilePatcher extends Intonation_Library_ProfilePatcher
                  'menus' => [
                              ['type_menu' => 'ACCUEIL',
                               'libelle' => $this->_('Le Polygone'),
-                              'picto' => Class_Url::absolute('/library/templates/Polygone/Assets/images/logo_footer.png'),
+                              'picto' => Class_Url::relative('/library/templates/Polygone/Assets/images/logo_footer.png'),
                               'use_profil' => $this->_profile_id],
 
                              ['type_menu' => 'URL',
@@ -289,16 +289,16 @@ class Polygone_Library_ProfilePatcher extends Intonation_Library_ProfilePatcher
                  'menus' => [
                              ['type_menu' => 'URL',
                               'libelle' => $this->_('Se documenter'),
-                              'picto' => Class_Url::absolute('/library/templates/Polygone/Assets/images/se_documenter.jpg'),
+                              'picto' => Class_Url::relative('/library/templates/Polygone/Assets/images/se_documenter.jpg'),
                               'url' => ''],
 
                              ['type_menu' => 'URL',
                               'libelle' => $this->_('S\'exercer'),
-                              'picto' => Class_Url::absolute('/library/templates/Polygone/Assets/images/s_exercer.jpg'),
+                              'picto' => Class_Url::relative('/library/templates/Polygone/Assets/images/s_exercer.jpg'),
                               'url' => ''],
 
                              ['type_menu' => 'URL',
-                              'picto' => Class_Url::absolute('/library/templates/Polygone/Assets/images/se_divertir.jpg'),
+                              'picto' => Class_Url::relative('/library/templates/Polygone/Assets/images/se_divertir.jpg'),
                               'libelle' => $this->_('Se divertir'),
                               'url' => ''],
                  ]
@@ -356,7 +356,7 @@ class Polygone_Library_ProfilePatcher extends Intonation_Library_ProfilePatcher
                    Class_Profil::DIV_BANNIERE,
                    ['titre' => $this->_('Logo du réseau'),
                     'boite' => ['no_background'],
-                    'image' => Class_Url::absolute('/library/templates/Polygone/Assets/images/logo.png'),
+                    'image' => Class_Url::relative('/library/templates/Polygone/Assets/images/logo.png'),
                     'link' => '',
                     $this->_template->withNameSpace('styles_pack') => $this->_no_border_no_radius_no_shadow_content_center->getId(),
                     $this->_nameSpaced('responsive_pack') => $this->_half_and_quarter_responsive_pack->getId(),
@@ -532,7 +532,7 @@ class Polygone_Library_ProfilePatcher extends Intonation_Library_ProfilePatcher
       ->_addWidget(Intonation_Library_Widget_Image_Definition::CODE,
                    Class_Profil::DIV_FOOTER,
                    ['titre' => $this->_('Logo du réseau'),
-                    'image' => Class_Url::absolute('/library/templates/Polygone/Assets/images/logo_footer.png'),
+                    'image' => Class_Url::relative('/library/templates/Polygone/Assets/images/logo_footer.png'),
                     'link' => '',
                     $this->_template->withNameSpace('styles_pack') => $this->_no_border_no_radius_no_shadow->getId(),
                     $this->_template->withNameSpace('width_xsmall') => 2,
diff --git a/library/templates/TerreDuMilieu/Library/ProfilePatcher.php b/library/templates/TerreDuMilieu/Library/ProfilePatcher.php
index 398d8d77ee42f6796d851b2e0de8b046a9593f6e..7263ed47fe32fec528863756aa48857715457088 100644
--- a/library/templates/TerreDuMilieu/Library/ProfilePatcher.php
+++ b/library/templates/TerreDuMilieu/Library/ProfilePatcher.php
@@ -217,7 +217,7 @@ class TerreDuMilieu_Library_ProfilePatcher extends Intonation_Library_ProfilePat
                              ['type_menu' => 'URL',
                               'libelle' => $this->_('France Connect'),
                               'url' => 'https://fcp.integ01.dev-franceconnect.fr/',
-                              'picto' => Class_Url::absolute('/library/templates/TerreDuMilieu/Assets/images/franceconnect.jpg')]
+                              'picto' => Class_Url::relative('/library/templates/TerreDuMilieu/Assets/images/franceconnect.jpg')]
                  ]
                  ]);
 
@@ -228,7 +228,7 @@ class TerreDuMilieu_Library_ProfilePatcher extends Intonation_Library_ProfilePat
                              ['type_menu' => 'URL',
                               'libelle' => $this->_('Bokeh'),
                               'url' => '',
-                              'picto' => Class_Url::absolute('/library/templates/TerreDuMilieu/Assets/images/bokeh.png')],
+                              'picto' => Class_Url::relative('/library/templates/TerreDuMilieu/Assets/images/bokeh.png')],
 
                              ['type_menu' => 'URL',
                               'libelle' => $this->_('Facebook'),
@@ -320,7 +320,7 @@ class TerreDuMilieu_Library_ProfilePatcher extends Intonation_Library_ProfilePat
                    Class_Profil::DIV_BANNIERE,
                    ['titre' => $this->_('Logo du réseau'),
                     'boite' => ['justify-content-center', 'admin_tools_invert_colors'],
-                    'image' => Class_Url::absolute('/library/templates/TerreDuMilieu/Assets/images/nav.png'),
+                    'image' => Class_Url::relative('/library/templates/TerreDuMilieu/Assets/images/nav.png'),
                     'link' => '',
                     $this->_template->withNameSpace('styles_pack') => $this->_no_border_no_radius_no_shadow_no_background->getId(),
                     $this->_template->withNameSpace('responsive_pack') => $this->_full_width_responsive_pack->getId(),
diff --git a/tests/scenarios/Templates/HerissonTemplateTest.php b/tests/scenarios/Templates/HerissonTemplateTest.php
index 5f0fa35e1dbcd4976325fb839a8d5d528ce4f16f..a2b8f0d016c8c6ebe73f1532b2ff444d55e17043 100644
--- a/tests/scenarios/Templates/HerissonTemplateTest.php
+++ b/tests/scenarios/Templates/HerissonTemplateTest.php
@@ -172,6 +172,14 @@ class HerissonTemplateIndexTest extends HerissonTemplateTestCase {
   public function navigationAgendaEntryShouldHaveUrlAgenda() {
     $this->assertXPathContentContains('//body//header//div[contains(@class, "boite nav")]//li//a[contains(@href,"/agenda")]', 'Agenda');
   }
+
+
+  /** @test */
+  public function logoFooterUrlShouldBeRelative() {
+    $this->assertXPath('//footer//img[@src="'
+                       . Class_Url::relative('/library/templates/Herisson/Assets/images/herisson_logo.png')
+                       . '"]');
+  }
 }
 
 
diff --git a/tests/scenarios/Templates/PolygoneTemplateTest.php b/tests/scenarios/Templates/PolygoneTemplateTest.php
index b601b52a965e367985affd64d081e886b3fe9853..054cbe9adeca8ee4d69e5ddc7e9b61ae4cfd805b 100644
--- a/tests/scenarios/Templates/PolygoneTemplateTest.php
+++ b/tests/scenarios/Templates/PolygoneTemplateTest.php
@@ -184,6 +184,14 @@ class PolygoneTemplateOpacIndexWithUserAgentTest extends PolygoneTemplateTestCas
   public function pageShouldBeAccessible() {
     $this->assertAccessible(false);
   }
+
+
+  /** @test */
+  public function logoFooterUrlShouldBeRelative() {
+    $this->assertXPath('//footer//img[@src="'
+                       . Class_Url::relative('/library/templates/Polygone/Assets/images/logo_footer.png')
+                       . '"]');
+  }
 }
 
 
diff --git a/tests/scenarios/Templates/TemplatesAbonneTest.php b/tests/scenarios/Templates/TemplatesAbonneTest.php
index a2e74776abf86ecfdf4e04f66ffe76fb3165f0a9..2e2bf5eda565ca1e08fc61361e0fac6c189dac56 100644
--- a/tests/scenarios/Templates/TemplatesAbonneTest.php
+++ b/tests/scenarios/Templates/TemplatesAbonneTest.php
@@ -1335,7 +1335,10 @@ class TemplatesAbonneDispatchAccountTest extends TemplatesIntonationAccountTestC
 
   /** @test */
   public function paulProfileImageShouldBeReadBlack() {
-    $this->assertXpath('//img[contains(@src, "/public/opac/images/abonnes/read_black.png")]');
+    $this->assertXpath('//img[@src="'
+                       . Class_Url::relative("/public/opac/images/abonnes/read_black.png")
+                       . '"]',
+                       $this->_response->getBody());
   }
 
 
diff --git a/tests/scenarios/Templates/TemplatesLibraryNoveltiesTabTest.php b/tests/scenarios/Templates/TemplatesLibraryNoveltiesTabTest.php
index b31fd213258037fc5168b183b3f319f760b28e97..535c47e6d3991ef362a78df05e3485dd0495a428 100644
--- a/tests/scenarios/Templates/TemplatesLibraryNoveltiesTabTest.php
+++ b/tests/scenarios/Templates/TemplatesLibraryNoveltiesTabTest.php
@@ -371,7 +371,7 @@ class TemplatesLibraryNoveltiesTabWidgetShowFooterTest extends TemplatesLibraryN
 
   /** @test */
   public function rssLinkShouldUseCacheKey() {
-    $this->assertXPath('//div//a[contains(@href, "/rss/library-novelties/id/1/language/fr/id_profil/23")]');
+    $this->assertXPath('//div//a[@href="/rss/library-novelties/id/1/language/fr/id_profil/23"]');
   }
 }
 
diff --git a/tests/scenarios/Templates/TemplatesProfileWithPageTest.php b/tests/scenarios/Templates/TemplatesProfileWithPageTest.php
index feb038f8c3702879238fc576041a7d7a14fde9f3..8577fe6e440a1c14c9fd1c94e9fc8ab6dae06007 100644
--- a/tests/scenarios/Templates/TemplatesProfileWithPageTest.php
+++ b/tests/scenarios/Templates/TemplatesProfileWithPageTest.php
@@ -79,7 +79,7 @@ class TemplatesProfileWithPageTest extends AbstractControllerTestCase {
   /** @test */
   public function agendaPageHeaderShouldContainsWidgetImageWithWeDontCareDotJPG() {
     $this->dispatch('/agenda');
-    $this->assertXPath('//header//div[contains(@class, "boite image")]//img[@src="' . Class_Url::absolute('wedontcare.jpg') . '"]');
+    $this->assertXPath('//header//div[contains(@class, "boite image")]//img[@src="' . Class_Url::relative('wedontcare.jpg') . '"]');
   }
 
 
diff --git a/tests/scenarios/Templates/TerreDuMilieuTemplateTest.php b/tests/scenarios/Templates/TerreDuMilieuTemplateTest.php
index 7de559ed2277deae0aa256bb003b1c9ecf6038ac..25df3a9c23c85741d86b2c999e03a018a40f44da 100644
--- a/tests/scenarios/Templates/TerreDuMilieuTemplateTest.php
+++ b/tests/scenarios/Templates/TerreDuMilieuTemplateTest.php
@@ -103,6 +103,14 @@ class TerreDuMilieuTemplateProfilePatcherTest extends TerreDuMilieuTemplateTestC
                                       . '//a[@target="_blank"][contains(@href, "/admin/file-manager")]',
                                       'Explorateur de fichiers');
   }
+
+
+  /** @test */
+  public function logoHeaderUrlShouldBeRelative() {
+    $this->assertXPath('//header//img[@src="'
+                       . Class_Url::relative('/library/templates/TerreDuMilieu/Assets/images/nav.png')
+                       . '"]');
+  }
 }
 
 
diff --git a/tests/scenarios/Widgets/WidgetsTest.php b/tests/scenarios/Widgets/WidgetsTest.php
index 3de64bc5b8cdc420e6fdeef6904e30e1a642095b..1cd9b9ae140b375280a156c57de3174ecd7d4bff 100644
--- a/tests/scenarios/Widgets/WidgetsTest.php
+++ b/tests/scenarios/Widgets/WidgetsTest.php
@@ -639,3 +639,72 @@ class WidgetsEditAlbumsWidgetTest extends WidgetsSimpleTestCase {
     $this->assertXPath('//button[text()="Valider"]');
   }
 }
+
+
+
+
+class WidgetsCacheTest extends AbstractControllerTestCase {
+  public function setUp() {
+    parent::setUp();
+    ZendAfi_Auth::getInstance()->clearIdentity();
+
+    Class_AdminVar::set('CACHE_ACTIF', 1);
+    Storm_Cache::beVolatile();
+    Storm_Cache::setSeed('test');
+    Storm_Cache::getDefaultZendCache()->save('seed', 'test');
+
+    $profile = $this->_buildTemplateProfil(['id' => 877987]);
+
+    (new Muscle_Template)->tryOn($profile);
+
+    $this
+      ->onLoaderOfModel(Class_Article::class)
+      ->whenCalled('getArticlesByPreferences')
+      ->answers([$this->fixture(Class_Article::class,
+                                ['id' => 7,
+                                 'titre' => 'Parlez-vous français ?',
+                                 'description' => '<img src="/userfiles/test.png"></img>La description s\'arrête ici et pas plus loin.',
+                                 'contenu' => '<p>Une b...</p>',
+                                 'categorie' => $this->fixture(Class_ArticleCategorie::class,
+                                                               ['id' => 3,
+                                                                'libelle' => 'Animations langues'])
+                                ])
+                 ]);
+
+    $this->dispatch('/');
+  }
+
+
+  /** @test */
+  public function pageShouldContainsImgWithRelativeUrlTestPng() {
+    $this->assertXPath('//body//div//img[@src="'
+                       . Class_Url::relative('/userfiles/test.png')
+                       . '"]',
+                       $this->_response->getBody());
+  }
+
+
+  /** @test */
+  public function imageUrlShouldBeRelativeInCache() {
+    $this->assertContains('<img src="' . Class_Url::relative('/userfiles/test.png'),
+                          Storm_Cache::getDefaultZendCache()
+                          ->load('seed_cd8b07c4c219ffe0566ca53bcecd90c2'));
+  }
+
+
+  /** @test */
+  public function logoImgUrlShouldBeRelative() {
+    $this->assertXPath('//body//img[@class="image_widget img-fluid"][@src="'
+                          . Class_Url::relative('library/templates/Muscle/Assets/images/logo.png')
+                          . '"]');
+  }
+
+
+
+  /** @test */
+  public function accessibilityIconsUrlShouldBeRelative() {
+    $this->assertXPath('//body//div[contains(@id, "accessibility_widget_tools_")]//img[@src="'
+                       . Class_Url::relative('public/opac/images/buttons/increase_font_size.png')
+                       . '"]');
+  }
+}
\ No newline at end of file