diff --git a/addons/website_sale_digital/controllers/main.py b/addons/website_sale_digital/controllers/main.py index b8f56905a30..708c7a906a4 100644 --- a/addons/website_sale_digital/controllers/main.py +++ b/addons/website_sale_digital/controllers/main.py @@ -46,14 +46,8 @@ class WebsiteSaleDigital(CustomerPortal): @route(['/my/download'], type='http', auth='public') def download_attachment(self, attachment_id): # Check if this is a valid attachment id - attachment = request.env['ir.attachment'].sudo().search_read( - [('id', '=', int(attachment_id))], - ["name", "datas", "mimetype", "res_model", "res_id", "type", "url"] - ) - - if attachment: - attachment = attachment[0] - else: + attachment = request.env['ir.attachment'].sudo().browse(int(attachment_id)).exists() + if not attachment: return request.redirect(self.orders_page) # Check if the user has bought the associated product @@ -74,4 +68,4 @@ class WebsiteSaleDigital(CustomerPortal): else: return request.redirect(self.orders_page) - return self.env['ir.binary']._get_stream_from(attachment).get_response(as_attachment=True) + return request.env['ir.binary']._get_stream_from(attachment).get_response(as_attachment=True) diff --git a/addons/website_sale_digital/tests/__init__.py b/addons/website_sale_digital/tests/__init__.py new file mode 100644 index 00000000000..1f3b332e437 --- /dev/null +++ b/addons/website_sale_digital/tests/__init__.py @@ -0,0 +1,3 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_website_sale_digital_resources_download diff --git a/addons/website_sale_digital/tests/test_website_sale_digital_resources_download.py b/addons/website_sale_digital/tests/test_website_sale_digital_resources_download.py new file mode 100644 index 00000000000..c408696aacd --- /dev/null +++ b/addons/website_sale_digital/tests/test_website_sale_digital_resources_download.py @@ -0,0 +1,19 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import http +from odoo.tests import HttpCase, tagged + + +@tagged('post_install', '-at_install') +class TestWebSaleDigitalResourcesDownload(HttpCase): + def setUp(self): + super().setUp() + self.ir_attachment = self.env['ir.attachment'].create({'name': "test attachment"}) + + def test_resources_can_be_downloaded(self): + self.authenticate('admin', 'admin') + res = self.url_open('/my/download', data={ + 'attachment_id': self.ir_attachment.id, + 'csrf_token': http.Request.csrf_token(self), + }) + res.raise_for_status()