tests: Fix exporter tests
- Test coverage 96%
This commit is contained in:
parent
abd8365ae2
commit
9ecab96f1e
3 changed files with 153 additions and 37 deletions
|
|
@ -57,9 +57,6 @@ class Exporter:
|
|||
df.fieldname for df in self.meta.fields if df.fieldtype in table_fieldtypes
|
||||
]
|
||||
|
||||
def is_exportable(df):
|
||||
return df and df.fieldtype not in (display_fieldtypes + no_value_fields)
|
||||
|
||||
meta = frappe.get_meta(self.doctype)
|
||||
exportable_fields = frappe._dict({})
|
||||
|
||||
|
|
@ -210,15 +207,6 @@ class Exporter:
|
|||
|
||||
return parent_data
|
||||
|
||||
def get_name_column_index(self, doctype):
|
||||
for i, df in enumerate(self.fields):
|
||||
if df.parent == doctype and df.fieldname == "name":
|
||||
return i
|
||||
return -1
|
||||
|
||||
def get_column_indexes(self, doctype):
|
||||
return [i for i, df in enumerate(self.fields) if df.parent == doctype]
|
||||
|
||||
def add_header(self):
|
||||
|
||||
header = []
|
||||
|
|
|
|||
|
|
@ -6,35 +6,100 @@ from __future__ import unicode_literals
|
|||
import unittest
|
||||
import frappe
|
||||
from frappe.core.doctype.data_import_beta.exporter import Exporter
|
||||
from frappe.core.doctype.data_import_beta.test_importer import (
|
||||
create_doctype_if_not_exists,
|
||||
)
|
||||
|
||||
doctype_name = 'DocType for Export'
|
||||
|
||||
class TestExporter(unittest.TestCase):
|
||||
def test_exports_mandatory_fields(self):
|
||||
e = Exporter('Web Page', export_fields='Mandatory')
|
||||
def setUp(self):
|
||||
create_doctype_if_not_exists(doctype_name, True)
|
||||
|
||||
def test_exports_specified_fields(self):
|
||||
if not frappe.db.exists(doctype_name, "Test"):
|
||||
doc = frappe.get_doc(
|
||||
doctype=doctype_name,
|
||||
title="Test",
|
||||
description="Test Description",
|
||||
table_field_1=[
|
||||
{"child_title": "Child Title 1", "child_description": "Child Description 1"},
|
||||
{"child_title": "Child Title 2", "child_description": "Child Description 2"},
|
||||
],
|
||||
table_field_2=[
|
||||
{"child_2_title": "Child Title 1", "child_2_description": "Child Description 1"},
|
||||
],
|
||||
table_field_1_again=[
|
||||
{
|
||||
"child_title": "Child Title 1 Again",
|
||||
"child_description": "Child Description 1 Again",
|
||||
},
|
||||
],
|
||||
).insert()
|
||||
frappe.db.commit()
|
||||
else:
|
||||
doc = frappe.get_doc(doctype_name, "Test")
|
||||
|
||||
e = Exporter(
|
||||
doctype_name,
|
||||
export_fields={
|
||||
doctype_name: ["title", "description", "number", "another_number"],
|
||||
"table_field_1": ["name", "child_title", "child_description"],
|
||||
"table_field_2": ["child_2_date", "child_2_number"],
|
||||
"table_field_1_again": [
|
||||
"child_title",
|
||||
"child_date",
|
||||
"child_number",
|
||||
"child_another_number",
|
||||
],
|
||||
},
|
||||
export_data=True,
|
||||
)
|
||||
csv_array = e.get_csv_array()
|
||||
header_row = csv_array[0]
|
||||
self.assertEqual(header_row, ['ID', 'Title'])
|
||||
|
||||
self.assertEqual(
|
||||
header_row,
|
||||
[
|
||||
"Title",
|
||||
"Description",
|
||||
"Number",
|
||||
"another_number",
|
||||
"ID (Table Field 1)",
|
||||
"Child Title (Table Field 1)",
|
||||
"Child Description (Table Field 1)",
|
||||
"Child 2 Date (Table Field 2)",
|
||||
"Child 2 Number (Table Field 2)",
|
||||
"Child Title (Table Field 1 Again)",
|
||||
"Child Date (Table Field 1 Again)",
|
||||
"Child Number (Table Field 1 Again)",
|
||||
"table_field_1_again.child_another_number",
|
||||
],
|
||||
)
|
||||
|
||||
def test_exports_all_fields(self):
|
||||
e = Exporter('Web Page', export_fields='All')
|
||||
csv_array = e.get_csv_array()
|
||||
header = csv_array[0]
|
||||
self.assertEqual(len(header), 37)
|
||||
table_field_1_row_1_name = doc.table_field_1[0].name
|
||||
table_field_1_row_2_name = doc.table_field_1[1].name
|
||||
# fmt: off
|
||||
self.assertEqual(
|
||||
csv_array[1],
|
||||
["Test", "Test Description", 0, 0, table_field_1_row_1_name, "Child Title 1", "Child Description 1", None, 0, "Child Title 1 Again", None, 0, 0]
|
||||
)
|
||||
self.assertEqual(
|
||||
csv_array[2],
|
||||
["", "", "", "", table_field_1_row_2_name, "Child Title 2", "Child Description 2", "", "", "", "", "", ""],
|
||||
)
|
||||
# fmt: on
|
||||
self.assertEqual(len(csv_array), 3)
|
||||
|
||||
def test_export_csv_response(self):
|
||||
e = Exporter(
|
||||
doctype_name,
|
||||
export_fields={doctype_name: ["title", "description"]},
|
||||
export_data=True,
|
||||
file_type="CSV"
|
||||
)
|
||||
e.build_response()
|
||||
|
||||
def test_exports_selected_fields(self):
|
||||
export_fields = {
|
||||
'Web Page': ['title', 'route', 'published']
|
||||
}
|
||||
e = Exporter('Web Page', export_fields=export_fields)
|
||||
csv_array = e.get_csv_array()
|
||||
header = csv_array[0]
|
||||
self.assertEqual(header, ['Title', 'Route', 'Published'])
|
||||
|
||||
|
||||
def test_exports_data(self):
|
||||
e = Exporter('ToDo', export_fields='All', export_data=True)
|
||||
todo_records = frappe.db.count('ToDo')
|
||||
csv_array = e.get_csv_array()
|
||||
self.assertEqual(len(csv_array), todo_records + 1)
|
||||
self.assertTrue(frappe.response['result'])
|
||||
self.assertEqual(frappe.response['doctype'], doctype_name)
|
||||
self.assertEqual(frappe.response['type'], "csv")
|
||||
|
|
|
|||
|
|
@ -74,5 +74,68 @@ class TestImporter(unittest.TestCase):
|
|||
def get_importer(self, doctype, content):
|
||||
data_import = frappe.new_doc('Data Import Beta')
|
||||
data_import.import_type = 'Insert New Records'
|
||||
i = Importer(doctype, content=content, data_import=data_import)
|
||||
return i
|
||||
|
||||
def create_doctype_if_not_exists(doctype_name, force=False):
|
||||
if force:
|
||||
frappe.delete_doc_if_exists('DocType', doctype_name)
|
||||
frappe.delete_doc_if_exists('DocType', 'Child 1 of ' + doctype_name)
|
||||
frappe.delete_doc_if_exists('DocType', 'Child 2 of ' + doctype_name)
|
||||
|
||||
if frappe.db.exists('DocType', doctype_name):
|
||||
return
|
||||
|
||||
# Child Table 1
|
||||
table_1_name = 'Child 1 of ' + doctype_name
|
||||
frappe.get_doc({
|
||||
'doctype': 'DocType',
|
||||
'name': table_1_name,
|
||||
'module': 'Custom',
|
||||
'custom': 1,
|
||||
'istable': 1,
|
||||
'fields': [
|
||||
{'label': 'Child Title', 'fieldname': 'child_title', 'reqd': 1, 'fieldtype': 'Data'},
|
||||
{'label': 'Child Description', 'fieldname': 'child_description', 'fieldtype': 'Small Text'},
|
||||
{'label': 'Child Date', 'fieldname': 'child_date', 'fieldtype': 'Date'},
|
||||
{'label': 'Child Number', 'fieldname': 'child_number', 'fieldtype': 'Int'},
|
||||
{'label': 'Child Number', 'fieldname': 'child_another_number', 'fieldtype': 'Int'},
|
||||
]
|
||||
}).insert()
|
||||
|
||||
# Child Table 2
|
||||
table_2_name = 'Child 2 of ' + doctype_name
|
||||
frappe.get_doc({
|
||||
'doctype': 'DocType',
|
||||
'name': table_2_name,
|
||||
'module': 'Custom',
|
||||
'custom': 1,
|
||||
'istable': 1,
|
||||
'fields': [
|
||||
{'label': 'Child 2 Title', 'fieldname': 'child_2_title', 'reqd': 1, 'fieldtype': 'Data'},
|
||||
{'label': 'Child 2 Description', 'fieldname': 'child_2_description', 'fieldtype': 'Small Text'},
|
||||
{'label': 'Child 2 Date', 'fieldname': 'child_2_date', 'fieldtype': 'Date'},
|
||||
{'label': 'Child 2 Number', 'fieldname': 'child_2_number', 'fieldtype': 'Int'},
|
||||
{'label': 'Child 2 Number', 'fieldname': 'child_2_another_number', 'fieldtype': 'Int'},
|
||||
]
|
||||
}).insert()
|
||||
|
||||
# Main Table
|
||||
frappe.get_doc({
|
||||
'doctype': 'DocType',
|
||||
'name': doctype_name,
|
||||
'module': 'Custom',
|
||||
'custom': 1,
|
||||
'autoname': 'field:title',
|
||||
'fields': [
|
||||
{'label': 'Title', 'fieldname': 'title', 'reqd': 1, 'fieldtype': 'Data'},
|
||||
{'label': 'Description', 'fieldname': 'description', 'fieldtype': 'Small Text'},
|
||||
{'label': 'Date', 'fieldname': 'date', 'fieldtype': 'Date'},
|
||||
{'label': 'Number', 'fieldname': 'number', 'fieldtype': 'Int'},
|
||||
{'label': 'Number', 'fieldname': 'another_number', 'fieldtype': 'Int'},
|
||||
{'label': 'Table Field 1', 'fieldname': 'table_field_1', 'fieldtype': 'Table', 'options': table_1_name},
|
||||
{'label': 'Table Field 2', 'fieldname': 'table_field_2', 'fieldtype': 'Table', 'options': table_2_name},
|
||||
{'label': 'Table Field 1 Again', 'fieldname': 'table_field_1_again', 'fieldtype': 'Table', 'options': table_1_name},
|
||||
],
|
||||
'permissions': [
|
||||
{'role': 'System Manager'}
|
||||
]
|
||||
}).insert()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue