diff --git a/frappe/tests/ui/data/test_data_for_views.js b/frappe/tests/ui/data/test_data_for_views.js new file mode 100644 index 0000000000..05c400c3b3 --- /dev/null +++ b/frappe/tests/ui/data/test_data_for_views.js @@ -0,0 +1,16 @@ +$.extend(frappe.test_data, { + 'User': { + 'user1@mail.com': [ + {first_name: 'User 1'}, + {email: 'user1@mail.com'}, + {send_welcome_email: 0} + ] + }, + 'Kanban Board': { + 'kanban 1': [ + {kanban_board_name: 'kanban 1'}, + {reference_doctype: 'ToDo'}, + {field_name: 'status'} + ] + } +}); \ No newline at end of file diff --git a/frappe/tests/ui/data/test_lib.js b/frappe/tests/ui/data/test_lib.js index 000427d75e..baeb420ce7 100644 --- a/frappe/tests/ui/data/test_lib.js +++ b/frappe/tests/ui/data/test_lib.js @@ -8,8 +8,14 @@ frappe.tests = { () => frappe.set_route('List', doctype), () => frappe.new_doc(doctype), () => { - let frm = frappe.quick_entry ? frappe.quick_entry.dialog : cur_frm; - return frappe.tests.set_form_values(frm, data); + if (frappe.quick_entry) + { + frappe.quick_entry.dialog.$wrapper.find('.edit-full').click(); + return frappe.timeout(1); + } + }, + () => { + return frappe.tests.set_form_values(cur_frm, data); }, () => frappe.timeout(1), () => (frappe.quick_entry ? frappe.quick_entry.insert() : cur_frm.save()) @@ -90,7 +96,57 @@ frappe.tests = { }); return frappe.run_serially(tasks); - } + }]); + }, + click_and_wait: (button, obj=0.1) => { + return frappe.run_serially([ + () => { + //check if obj value is passed + if (obj == 0.1) + $(button).click(); + else + $(button)[obj].click(); + }, + () => frappe.timeout(0.5) + ]); + }, + create_todo: (todo_needed) => { + let status_list = ['Closed', 'Open']; + let priority_list = ['Low', 'Medium', 'High']; + let date_list = ['2017-05-05', '2017-06-06', '2017-07-07', '2017-08-08']; + let owner_list = ['Administrator', 'user1@mail.com']; + let i; + let num_of_todo; + let tasks = []; + + return frappe.run_serially([ + () => frappe.set_route('List', 'ToDo', 'List'), + () => { + //remove todo filters + for (i=1; i<=5; i++) + $('.col-md-2:nth-child('+i+') .input-sm').val(''); + }, + () => cur_list.page.btn_secondary.click(), + () => frappe.timeout(0.5), + () => num_of_todo = cur_list.data.length,//todo present + () => { + if (num_of_todo < todo_needed) + { + for (i=0; i<(todo_needed-num_of_todo); i+=1) + { + tasks.push(() => frappe.tests.make("ToDo", [ + {description: 'ToDo for testing'}, + {status: status_list[i%2]}, + {priority: priority_list[i%3]}, + {date: date_list[i%4]}, + {owner: owner_list[i%2]} + ])); + tasks.push(() => i+=1); + } + i=0; + } + }, + () => frappe.run_serially(tasks) ]); }, click_page_head_item: (text) => { @@ -175,4 +231,4 @@ frappe.tests = { $(`a:contains("${text}"):visible`).click(); return frappe.timeout(1); } -}; +}; \ No newline at end of file diff --git a/frappe/tests/ui/test_list_delete.js b/frappe/tests/ui/test_list_delete.js new file mode 100644 index 0000000000..d9edb1d54d --- /dev/null +++ b/frappe/tests/ui/test_list_delete.js @@ -0,0 +1,62 @@ +QUnit.module('views'); + +QUnit.test("Test deletion of one list element", function(assert) { + assert.expect(3); + let done = assert.async(); + let count; + let random; + + frappe.run_serially([ + () => frappe.tests.setup_doctype('User'), + () => frappe.tests.create_todo(2), + () => frappe.set_route('List', 'ToDo', 'List'), + () => frappe.timeout(0.5), + () => { + assert.deepEqual(['List', 'ToDo', 'List'], frappe.get_route(), "List opened successfully."); + //total list elements + count = cur_list.data.length; + random = Math.floor(Math.random() * (count) + 1); + //select one element randomly + $('div:nth-child('+random+')>div>div>.list-row-checkbox').click(); + }, + () => cur_list.page.btn_primary.click(), + () => frappe.timeout(0.5), + () => { + //check if asking for confirmation and click yes + assert.equal("Confirm", cur_dialog.title, "Asking for confirmation."); + cur_dialog.primary_action(frappe.confirm); + }, + () => frappe.timeout(1), + //check if total elements decreased by one + () => assert.equal(cur_list.data.length, (count-1), "Only one element is deleted."), + () => done() + ]); +}); + +QUnit.test("Test deletion of all list element", function(assert) { + assert.expect(3); + let done = assert.async(); + + frappe.run_serially([ + () => frappe.tests.setup_doctype('User'), + () => frappe.tests.create_todo(5), + () => frappe.set_route('List', 'ToDo', 'List'), + () => frappe.timeout(0.5), + () => { + assert.deepEqual(['List', 'ToDo', 'List'], frappe.get_route(), "List opened successfully."); + //select all element + $('.list-select-all.hidden-xs').click(); + }, + () => cur_list.page.btn_primary.click(), + () => frappe.timeout(0.5), + () => { + assert.equal("Confirm", cur_dialog.title, "Asking for confirmation."); + //click yes for deletion + cur_dialog.primary_action(frappe.confirm); + }, + () => frappe.timeout(2), + //check zero elements left + () => assert.equal( cur_list.data.length, '0', "No element is present in list."), + () => done() + ]); +}); \ No newline at end of file diff --git a/frappe/tests/ui/test_list_filter.js b/frappe/tests/ui/test_list_filter.js new file mode 100644 index 0000000000..8319a11a4b --- /dev/null +++ b/frappe/tests/ui/test_list_filter.js @@ -0,0 +1,35 @@ +QUnit.module('views'); + +QUnit.test("Test filters", function(assert) { + assert.expect(2); + let done = assert.async(); + + frappe.run_serially([ + () => frappe.tests.setup_doctype('User'), + () => frappe.tests.create_todo(6), + () => frappe.set_route('List', 'ToDo', 'List'), + () => frappe.timeout(0.5), + () => { + assert.deepEqual(['List', 'ToDo', 'List'], frappe.get_route(), "List opened successfully."); + //set filter values + $('.col-md-2:nth-child(2) .input-sm').val('Closed'); + $('.col-md-2:nth-child(3) .input-sm').val('Low'); + $('.col-md-2:nth-child(4) .input-sm').val('05-05-2017'); + $('.col-md-2:nth-child(5) .input-sm').val('Administrator'); + }, + () => frappe.timeout(0.5), + () => cur_list.page.btn_secondary.click(), + () => frappe.timeout(1), + () => { + //get total list element + var count = cur_list.data.length; + //check if all elements are as per filter + var i=0; + for ( ; i < count ; i++) + if ((cur_list.data[i].status!='Closed')||(cur_list.data[i].priority!='Low')||(cur_list.data[i].owner!='Administrator')||(cur_list.data[i].date!='2017-05-05')) + break; + assert.equal(count, i, "Elements present have content according to filters."); + }, + () => done() + ]); +}); \ No newline at end of file diff --git a/frappe/tests/ui/test_list_paging.js b/frappe/tests/ui/test_list_paging.js new file mode 100644 index 0000000000..e427c6d9eb --- /dev/null +++ b/frappe/tests/ui/test_list_paging.js @@ -0,0 +1,18 @@ +QUnit.module('views'); + +QUnit.test("Test paging in list", function(assert) { + assert.expect(3); + let done = assert.async(); + + frappe.run_serially([ + () => frappe.set_route('List', 'DocType'), + () => frappe.timeout(0.5), + () => assert.deepEqual(['List', 'DocType', 'List'], frappe.get_route(), "List opened successfully."), + //check elements less then page length [20 in this case] + () => assert.ok(cur_list.data.length <= cur_list.page_length, "20 or less elements are visible."), + () => frappe.tests.click_and_wait('.btn-sm:contains("100"):visible'), + //check elements less then page length [100 in this case] + () => assert.ok(cur_list.data.length <= cur_list.page_length, "100 or less elements are visible."), + () => done() + ]); +}); \ No newline at end of file