[FIX] base: fix similar attachments

While searching for a similar attachment, as the fallback url pattern is
the same as the url pattern, the condition is never satisfied.

With this commit, the ignore_params parameter is used to find a similar
attachment.

closes odoo/odoo#162654

Signed-off-by: Xavier Dollé (xdo) <xdo@odoo.com>
This commit is contained in:
Christophe Monniez
2024-04-22 17:04:37 +00:00
committed by Xavier-Do
parent bfffd2ee7c
commit 29fb4ac761
2 changed files with 9 additions and 8 deletions
+6 -1
View File
@@ -252,7 +252,12 @@ class TestWebAssets(odoo.tests.HttpCase):
)
# generate base assets
self.assertEqual(self.url_open(base_url, allow_redirects=False).status_code, 200)
with self.assertLogs() as logs:
self.assertEqual(self.url_open(base_url, allow_redirects=False).status_code, 200)
self.assertEqual(
f'Found a similar attachment for /web/assets/{unique}/web.assets_frontend.min.js, copying from /web/assets/{website_id}/{unique}/web.assets_frontend.min.js',
logs.records[0].message,
'The attachment was expected to be linked to an existing one')
self.assertEqual(
self.env['ir.attachment'].search([('url', '=like', '%web.assets_frontend.min.js')]).mapped('url'),
[base_url_versioned, website_url_versioned],
+3 -7
View File
@@ -240,18 +240,14 @@ class AssetsBundle(object):
fallback_url_pattern = self.get_asset_url(
unique=unique,
extension=extension,
ignore_params=True,
)
self.env.cr.execute(query, [SUPERUSER_ID, fallback_url_pattern])
similar_attachment_ids = [r[0] for r in self.env.cr.fetchall()]
if similar_attachment_ids:
similar = self.env['ir.attachment'].sudo().browse(similar_attachment_ids)
_logger.info('Found a similar attachment for %s, copying from %s', url_pattern, similar.url)
url = self.get_asset_url(
unique=unique,
extension=extension,
ignore_params=True,
)
url = url_pattern
values = {
'name': similar.name,
'mimetype': similar.mimetype,
@@ -264,7 +260,7 @@ class AssetsBundle(object):
}
attachment = self.env['ir.attachment'].with_user(SUPERUSER_ID).create(values)
attachment_id = attachment.id
self.clean_attachments(extension)
self._clean_attachments(extension, url)
return self.env['ir.attachment'].sudo().browse(attachment_id)