75 lines
3.4 KiB
Python
75 lines
3.4 KiB
Python
|
from io import BytesIO
|
||
|
from zipfile import ZipFile
|
||
|
|
||
|
from odoo.fields import Command
|
||
|
from odoo.tests.common import tagged
|
||
|
from odoo.addons.account.tests.common import AccountTestInvoicingHttpCommon
|
||
|
|
||
|
|
||
|
@tagged('post_install', '-at_install')
|
||
|
class TestDownloadDocs(AccountTestInvoicingHttpCommon):
|
||
|
|
||
|
@classmethod
|
||
|
def setUpClass(cls):
|
||
|
super().setUpClass()
|
||
|
invoice_1 = cls.env['account.move'].create({
|
||
|
'move_type': 'out_invoice',
|
||
|
'partner_id': cls.partner_a.id,
|
||
|
'invoice_line_ids': [Command.create({'price_unit': 100})]
|
||
|
})
|
||
|
invoice_2 = cls.env['account.move'].create({
|
||
|
'move_type': 'out_invoice',
|
||
|
'partner_id': cls.partner_a.id,
|
||
|
'invoice_line_ids': [Command.create({'price_unit': 200})]
|
||
|
})
|
||
|
cls.invoices = invoice_1 + invoice_2
|
||
|
cls.invoices.action_post()
|
||
|
cls.invoices._generate_and_send()
|
||
|
assert invoice_1.invoice_pdf_report_id and invoice_2.invoice_pdf_report_id
|
||
|
|
||
|
def test_download_invoice_attachments_not_auth(self):
|
||
|
url = f'/account/download_invoice_attachments/{",".join(map(str, self.invoices.invoice_pdf_report_id.ids))}'
|
||
|
res = self.url_open(url)
|
||
|
self.assertEqual(res.status_code, 200)
|
||
|
self.assertIn(
|
||
|
'oe_login_form',
|
||
|
res.content.decode('utf-8'),
|
||
|
'When not authenticated, the download is not possible.'
|
||
|
)
|
||
|
|
||
|
def test_download_invoice_attachments_one(self):
|
||
|
attachment = self.invoices[0].invoice_pdf_report_id
|
||
|
url = f'/account/download_invoice_attachments/{attachment.id}'
|
||
|
self.authenticate(self.env.user.login, self.env.user.login)
|
||
|
res = self.url_open(url)
|
||
|
self.assertEqual(res.status_code, 200)
|
||
|
self.assertEqual(res.content, attachment.raw)
|
||
|
|
||
|
def test_download_invoice_attachments_multiple(self):
|
||
|
attachments = self.invoices.invoice_pdf_report_id
|
||
|
url = f'/account/download_invoice_attachments/{",".join(map(str, attachments.ids))}'
|
||
|
self.authenticate(self.env.user.login, self.env.user.login)
|
||
|
res = self.url_open(url)
|
||
|
self.assertEqual(res.status_code, 200)
|
||
|
with ZipFile(BytesIO(res.content)) as zip_file:
|
||
|
self.assertEqual(len(zip_file.filelist), 2)
|
||
|
self.assertTrue(zip_file.NameToInfo.get(self.invoices[0].invoice_pdf_report_id.name))
|
||
|
self.assertTrue(zip_file.NameToInfo.get(self.invoices[1].invoice_pdf_report_id.name))
|
||
|
|
||
|
def test_download_invoice_documents_filetype_one(self):
|
||
|
url = f'/account/download_invoice_documents/{self.invoices[0].id}/pdf'
|
||
|
self.authenticate(self.env.user.login, self.env.user.login)
|
||
|
res = self.url_open(url)
|
||
|
self.assertEqual(res.status_code, 200)
|
||
|
self.assertEqual(res.content, self.invoices[0].invoice_pdf_report_id.raw)
|
||
|
|
||
|
def test_download_invoice_documents_filetype_multiple(self):
|
||
|
url = f'/account/download_invoice_documents/{",".join(map(str, self.invoices.ids))}/pdf'
|
||
|
self.authenticate(self.env.user.login, self.env.user.login)
|
||
|
res = self.url_open(url)
|
||
|
self.assertEqual(res.status_code, 200)
|
||
|
with ZipFile(BytesIO(res.content)) as zip_file:
|
||
|
self.assertEqual(len(zip_file.filelist), 2)
|
||
|
self.assertTrue(zip_file.NameToInfo.get(self.invoices[0].invoice_pdf_report_id.name))
|
||
|
self.assertTrue(zip_file.NameToInfo.get(self.invoices[1].invoice_pdf_report_id.name))
|