test: export query report as CSV
This commit is contained in:
parent
62d68a8be6
commit
87298f5d76
1 changed files with 40 additions and 1 deletions
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
import frappe
|
||||
import frappe.utils
|
||||
from frappe.desk.query_report import build_xlsx_data
|
||||
from frappe.desk.query_report import build_xlsx_data, export_query
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
from frappe.utils.xlsxutils import make_xlsx
|
||||
|
||||
|
|
@ -69,3 +69,42 @@ class TestQueryReport(FrappeTestCase):
|
|||
for row in xlsx_data:
|
||||
# column_b should be 'str' even with composite cell value
|
||||
self.assertEqual(type(row[1]), str)
|
||||
|
||||
def test_csv(self):
|
||||
from csv import QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONE, QUOTE_NONNUMERIC, DictReader
|
||||
from io import StringIO
|
||||
|
||||
REPORT_NAME = "Test CSV Report"
|
||||
REF_DOCTYPE = "DocType"
|
||||
REPORT_COLUMNS = ["name", "module", "issingle"]
|
||||
|
||||
if not frappe.db.exists("Report", REPORT_NAME):
|
||||
report = frappe.new_doc("Report")
|
||||
report.report_name = REPORT_NAME
|
||||
report.ref_doctype = "User"
|
||||
report.report_type = "Query Report"
|
||||
report.query = frappe.qb.from_(REF_DOCTYPE).select(*REPORT_COLUMNS).limit(10).get_sql()
|
||||
report.is_standard = "No"
|
||||
report.save()
|
||||
|
||||
for delimiter in (",", ";", "\t", "|"):
|
||||
for quoting in (QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONE, QUOTE_NONNUMERIC):
|
||||
frappe.local.form_dict = {
|
||||
"report_name": REPORT_NAME,
|
||||
"file_format_type": "CSV",
|
||||
"csv_quoting": quoting,
|
||||
"csv_delimiter": delimiter,
|
||||
"include_indentation": 0,
|
||||
"visible_idx": [0, 1, 2],
|
||||
}
|
||||
export_query()
|
||||
|
||||
self.assertTrue(frappe.response["filename"].endswith(".csv"))
|
||||
self.assertEqual(frappe.response["type"], "binary")
|
||||
with StringIO(frappe.response["filecontent"].decode("utf-8")) as result:
|
||||
reader = DictReader(result, delimiter=delimiter, quoting=quoting)
|
||||
row = reader.__next__()
|
||||
for column in REPORT_COLUMNS:
|
||||
self.assertIn(column, row)
|
||||
|
||||
frappe.delete_doc("Report", REPORT_NAME, delete_permanently=True)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue