* verify desktop icon and links * added comments and fixed indentation * refactored test_desktop, added test_calendarView, added custom functions to test_lib * . * added a generic func to click dropdown items * codacy fixes * added comments, changed test_list to delete the todo created * Update test_lib.jsversion-14
@@ -43,6 +43,9 @@ frappe.search.AwesomeBar = Class.extend({ | |||||
} | } | ||||
}); | }); | ||||
// Added to aid UI testing of global search | |||||
input.awesomplete = awesomplete; | |||||
$input.on("input", function(e) { | $input.on("input", function(e) { | ||||
var value = e.target.value; | var value = e.target.value; | ||||
var txt = value.trim().replace(/\s\s+/g, ' '); | var txt = value.trim().replace(/\s\s+/g, ' '); | ||||
@@ -0,0 +1,94 @@ | |||||
QUnit.module('views'); | |||||
QUnit.test("Calendar View Tests", function(assert) { | |||||
assert.expect(7); | |||||
let done = assert.async(); | |||||
let random_text = frappe.utils.get_random(10); | |||||
let today = frappe.datetime.get_today()+" 16:20:35"; //arbitrary value taken to prevent cases like 12a for 12:00am and 12h to 24h conversion | |||||
let visible_time = () => { | |||||
// Method to return the start-time (hours) of the event visible | |||||
return $('.fc-time').text().split('p')[0]; // 'p' because the arbitrary time is pm | |||||
}; | |||||
// let visible_hours = () => { | |||||
// // Method to return the start-time (hours) of the event visible | |||||
// return $('.fc-time').text().split(':')[0].replace(/\D+/g, ''); | |||||
// }; | |||||
// let visible_minutes = () => { | |||||
// // Method to return the start-time (minutes) of the event visible | |||||
// return $('.fc-time').text().split(':')[1].replace(/\D+/g, ''); | |||||
// }; | |||||
let event_title_text = () => { | |||||
// Method to return the title of the event visible | |||||
return $('.fc-title:visible').text(); | |||||
}; | |||||
frappe.run_serially([ | |||||
// Create an event using the frappe API | |||||
() => frappe.tests.make("Event", [ | |||||
{subject: random_text}, | |||||
{starts_on: today}, | |||||
{event_type: 'Private'} | |||||
]), | |||||
// Goto Calendar view | |||||
() => frappe.set_route(["List", "Event", "Calendar"]), | |||||
// Check if event is created | |||||
() => { | |||||
// Check if the event exists and if its title matches with the one created | |||||
assert.equal(event_title_text(), random_text); | |||||
// Check if time of event created is correct | |||||
// assert.equal(visible_hours(), 4); | |||||
// assert.equal(visible_minutes(), 20); | |||||
assert.equal(visible_time(), "4:20"); | |||||
}, | |||||
// Delete event | |||||
// Goto Calendar view | |||||
() => frappe.set_route(["List", "Event", "Calendar"]), | |||||
() => frappe.timeout(0.3), | |||||
// Open the event to be deleted | |||||
() => frappe.tests.click_generic_text(random_text), | |||||
() => frappe.tests.click_page_head_item('Menu'), | |||||
() => frappe.tests.click_dropdown_item('Delete'), | |||||
() => frappe.tests.click_page_head_item('Yes'), | |||||
() => frappe.timeout(4), | |||||
// Goto Calendar View | |||||
() => frappe.set_route(["List", "Event", "Calendar"]), | |||||
() => frappe.timeout(0.3), | |||||
// Check if all menu items redirect to correct locations | |||||
// Check if clicking on 'Import' redirects you to ["data-import-tool"] | |||||
() => frappe.tests.click_page_head_item('Menu'), | |||||
() => frappe.tests.click_dropdown_item('Import'), | |||||
() => assert.deepEqual(["data-import-tool"], frappe.get_route()), | |||||
() => window.history.back(), | |||||
() => frappe.timeout(0.5), | |||||
// Check if clicking on 'User Permissions Manager' redirects you to ["user-permissions"] | |||||
() => frappe.tests.click_page_head_item('Menu'), | |||||
() => frappe.tests.click_dropdown_item('User Permissions Manager'), | |||||
() => assert.deepEqual(["user-permissions"], frappe.get_route()), | |||||
() => window.history.back(), | |||||
() => frappe.timeout(0.5), | |||||
// Check if clicking on 'Role Permissions Manager' redirects you to ["permission-manager"] | |||||
() => frappe.tests.click_page_head_item('Menu'), | |||||
() => frappe.tests.click_dropdown_item('Role Permissions Manager'), | |||||
() => assert.deepEqual(["permission-manager"], frappe.get_route()), | |||||
() => window.history.back(), | |||||
() => frappe.timeout(0.5), | |||||
// Check if clicking on 'Customize' redirects you to ["Form", "Customize Form"] | |||||
() => frappe.tests.click_page_head_item('Menu'), | |||||
() => frappe.tests.click_dropdown_item('Customize'), | |||||
() => assert.deepEqual(["Form", "Customize Form"], frappe.get_route()), | |||||
() => window.history.back(), | |||||
() => frappe.timeout(0.5), | |||||
// Check if event is deleted | |||||
() => assert.equal(event_title_text(), ""), | |||||
() => done() | |||||
]); | |||||
}); |
@@ -0,0 +1,64 @@ | |||||
QUnit.module('views'); | |||||
QUnit.test("Verification of navbar menu links", function(assert) { | |||||
assert.expect(14); | |||||
let done = assert.async(); | |||||
let navbar_user_items = ['Set Desktop Icons', 'My Settings', 'Reload', 'View Website', 'Background Jobs', 'Logout']; | |||||
let modal_and_heading = ['Documentation', 'About']; | |||||
frappe.run_serially([ | |||||
// Goto Desk using button click to check if its working | |||||
() => frappe.tests.click_navbar_item('Home'), | |||||
() => assert.deepEqual([""], frappe.get_route()), | |||||
// Click username on the navbar (Adminisrator) and verify visibility of all elements | |||||
() => frappe.tests.click_navbar_item('navbar_user'), | |||||
() => navbar_user_items.forEach(function(navbar_user_item) { | |||||
assert.ok(frappe.tests.is_visible(navbar_user_item)); | |||||
}), | |||||
// Click Help and verify visibility of all elements | |||||
() => frappe.tests.click_navbar_item('Help'), | |||||
() => modal_and_heading.forEach(function(modal) { | |||||
assert.ok(frappe.tests.is_visible(modal)); | |||||
}), | |||||
// Goto Desk | |||||
() => frappe.tests.click_navbar_item('Home'), | |||||
() => frappe.timeout(0.3), | |||||
// Click navbar-username and verify links of all menu items | |||||
// Check if clicking on 'Set Desktop Icons' redirects you to the correct page | |||||
() => frappe.tests.click_navbar_item('navbar_user'), | |||||
() => frappe.tests.click_dropdown_item('Set Desktop Icons'), | |||||
() => assert.deepEqual(["modules_setup"], frappe.get_route()), | |||||
() => frappe.tests.click_navbar_item('Home'), | |||||
// Check if clicking on 'My Settings' redirects you to the correct page | |||||
() => frappe.tests.click_navbar_item('navbar_user'), | |||||
() => frappe.tests.click_dropdown_item('My Settings'), | |||||
() => assert.deepEqual(["Form", "User", "Administrator"], frappe.get_route()), | |||||
() => frappe.tests.click_navbar_item('Home'), | |||||
// Check if clicking on 'Background Jobs' redirects you to the correct page | |||||
() => frappe.tests.click_navbar_item('navbar_user'), | |||||
() => frappe.tests.click_dropdown_item('Background Jobs'), | |||||
() => assert.deepEqual(["background_jobs"], frappe.get_route()), | |||||
() => frappe.tests.click_navbar_item('Home'), | |||||
// Click Help and check both modals | |||||
// Check if clicking 'Documentation' opens the right modal | |||||
() => frappe.tests.click_navbar_item('Help'), | |||||
() => frappe.tests.click_dropdown_item('Documentation'), | |||||
() => assert.ok(frappe.tests.is_visible('Documentation', 'span')), | |||||
() => frappe.tests.click_generic_text('Close', 'button'), | |||||
// Check if clicking 'About' opens the right modal | |||||
() => frappe.tests.click_navbar_item('Help'), | |||||
() => frappe.tests.click_dropdown_item('About'), | |||||
() => assert.ok(frappe.tests.is_visible('Frappe Framework', 'div')), | |||||
() => frappe.tests.click_generic_text('Close', 'button'), | |||||
() => done() | |||||
]); | |||||
}); |
@@ -0,0 +1,53 @@ | |||||
QUnit.module('views'); | |||||
QUnit.test("Gantt View Tests", function(assert) { | |||||
assert.expect(2); | |||||
let done = assert.async(); | |||||
let random_text = frappe.utils.get_random(10); | |||||
let start_date = frappe.datetime.get_today()+" 16:20:35"; // arbitrary value taken to prevent cases like 12a for 12:00am and 12h to 24h conversion | |||||
let end_date = frappe.datetime.get_today()+" 18:30:45"; //arbitrary value taken to prevent cases like 12a for 12:00am and 12h to 24h conversion | |||||
let event_id = () => { | |||||
// Method to acquire the ID of the event created. This is needed to redirect to the event page | |||||
let event_label = $('.bar-label').text(); | |||||
let init = event_label.indexOf('('); | |||||
let fin = event_label.indexOf(')'); | |||||
return (event_label.substr(init+1,fin-init-1)); | |||||
}; | |||||
let event_title_text = (text) => { | |||||
// Method to check the name of the event created. This is needed to verify the creation and deletion of the event | |||||
return $('#bar > g > g.bar-group > text:visible').text().includes(text); | |||||
}; | |||||
frappe.run_serially([ | |||||
// Create an event using the Frapee API | |||||
() => { | |||||
return frappe.tests.make("Event", [ | |||||
{subject: random_text}, | |||||
{starts_on: start_date}, | |||||
{ends_on: end_date}, | |||||
{event_type: 'Private'} | |||||
]); | |||||
}, | |||||
// Check if event is created | |||||
() => frappe.set_route(["List", "Event", "Gantt"]), | |||||
() => assert.ok( event_title_text(random_text) ), | |||||
// Delete event | |||||
() => frappe.set_route(["List", "Event", "Gantt"]), | |||||
() => frappe.timeout(0.3), | |||||
// Redirect to the event page to delete the event | |||||
() => frappe.set_route(["Form", "Event", event_id()]), | |||||
() => frappe.tests.click_page_head_item('Menu'), | |||||
() => frappe.tests.click_dropdown_item('Delete'), | |||||
() => frappe.tests.click_page_head_item('Yes'), | |||||
() => frappe.timeout(0.3), | |||||
() => frappe.set_route(["List", "Event", "Gantt"]), | |||||
() => frappe.timeout(0.3), | |||||
// Check if event is deleted | |||||
() => assert.ok( event_title_text("") ), | |||||
() => done() | |||||
]); | |||||
}); |
@@ -90,6 +90,70 @@ frappe.tests = { | |||||
return frappe.run_serially(tasks); | return frappe.run_serially(tasks); | ||||
}); | }); | ||||
}, | }, | ||||
click_page_head_item: (text) => { | |||||
// Method to items present on the page header like New, Save, Delete etc. | |||||
let possible_texts = ["New", "Delete", "Save", "Yes"]; | |||||
return frappe.run_serially([ | |||||
() => { | |||||
if (text == "Menu"){ | |||||
$("span.menu-btn-group-label:contains('Menu'):visible").click(); | |||||
} else if (text == "Refresh") { | |||||
$(".btn-secondary:contains('Refresh'):visible").click(); | |||||
} else if (possible_texts.includes(text)) { | |||||
$(".btn-primary:contains("+text+"):visible").click(); | |||||
} | |||||
}, | |||||
() => frappe.timeout(0.3) | |||||
]); | |||||
}, | |||||
click_dropdown_item: (text) => { | |||||
// Method to click dropdown elements | |||||
return frappe.run_serially([ | |||||
() => { | |||||
let li = $(".dropdown-menu li:contains("+text+"):visible").get(0); | |||||
$(li).find('a')[0].click(); | |||||
}, | |||||
() => frappe.timeout(0.3) | |||||
]); | |||||
}, | |||||
click_navbar_item: (text) => { | |||||
// Method to click an elements present on the navbar | |||||
return frappe.run_serially([ | |||||
() => { | |||||
if (text == "Help"){ | |||||
$(".dropdown-help .dropdown-toggle:visible").click(); | |||||
} | |||||
else if (text == "navbar_user"){ | |||||
$(".dropdown-navbar-user .dropdown-toggle:visible").click(); | |||||
} | |||||
else if (text == "Notification"){ | |||||
$(".navbar-new-comments").click(); | |||||
} | |||||
else if (text == "Home"){ | |||||
$(".navbar-home:contains('Home'):visible")[0].click(); | |||||
} | |||||
}, | |||||
() => frappe.timeout(0.3) | |||||
]); | |||||
}, | |||||
click_generic_text: (text, tag='a') => { | |||||
// Method to click an element by its name | |||||
return frappe.run_serially([ | |||||
() => $(tag+":contains("+text+"):visible")[0].click(), | |||||
() => frappe.timeout(0.3) | |||||
]); | |||||
}, | |||||
click_desktop_icon: (text) => { | |||||
// Method to click the desktop icons on the Desk, by their name | |||||
return frappe.run_serially([ | |||||
() => $("#icon-grid > div > div.app-icon[title="+text+"]").click(), | |||||
() => frappe.timeout(0.3) | |||||
]); | |||||
}, | |||||
is_visible: (text, tag='a') => { | |||||
// Method to check the visibility of an element | |||||
return $(tag+":contains("+text+")").is(':visible'); | |||||
}, | |||||
click_button: function(text) { | click_button: function(text) { | ||||
$(`.btn:contains("${text}"):visible`).click(); | $(`.btn:contains("${text}"):visible`).click(); | ||||
return frappe.timeout(0.3); | return frappe.timeout(0.3); | ||||
@@ -98,4 +162,4 @@ frappe.tests = { | |||||
$(`a:contains("${text}"):visible`).click(); | $(`a:contains("${text}"):visible`).click(); | ||||
return frappe.timeout(0.3); | return frappe.timeout(0.3); | ||||
} | } | ||||
}; | |||||
}; |
@@ -1,27 +1,31 @@ | |||||
QUnit.module('views'); | QUnit.module('views'); | ||||
QUnit.test("test quick entry", function(assert) { | |||||
QUnit.test("Test quick entry", function(assert) { | |||||
assert.expect(2); | assert.expect(2); | ||||
let done = assert.async(); | let done = assert.async(); | ||||
let random = frappe.utils.get_random(10); | |||||
let random_text = frappe.utils.get_random(10); | |||||
frappe.run_serially([ | frappe.run_serially([ | ||||
() => frappe.set_route('List', 'ToDo'), | () => frappe.set_route('List', 'ToDo'), | ||||
() => frappe.new_doc('ToDo'), | () => frappe.new_doc('ToDo'), | ||||
() => frappe.quick_entry.dialog.set_value('description', random), | |||||
() => frappe.quick_entry.dialog.set_value('description', random_text), | |||||
() => frappe.quick_entry.insert(), | () => frappe.quick_entry.insert(), | ||||
(doc) => { | (doc) => { | ||||
assert.ok(doc && !doc.__islocal); | assert.ok(doc && !doc.__islocal); | ||||
return frappe.set_route('Form', 'ToDo', doc.name); | return frappe.set_route('Form', 'ToDo', doc.name); | ||||
}, | }, | ||||
() => { | |||||
assert.ok(cur_frm.doc.description.includes(random)); | |||||
return done(); | |||||
} | |||||
() => assert.ok(cur_frm.doc.description.includes(random_text)), | |||||
// Delete the created ToDo | |||||
() => frappe.tests.click_page_head_item('Menu'), | |||||
() => frappe.tests.click_dropdown_item('Delete'), | |||||
() => frappe.tests.click_page_head_item('Yes'), | |||||
() => done() | |||||
]); | ]); | ||||
}); | }); | ||||
QUnit.test("test list values", function(assert) { | |||||
QUnit.test("Test list values", function(assert) { | |||||
assert.expect(2); | assert.expect(2); | ||||
let done = assert.async(); | let done = assert.async(); | ||||
frappe.set_route('List', 'DocType') | frappe.set_route('List', 'DocType') | ||||
@@ -30,4 +34,4 @@ QUnit.test("test list values", function(assert) { | |||||
assert.ok($('.list-item:visible').length > 10); | assert.ok($('.list-item:visible').length > 10); | ||||
done(); | done(); | ||||
}); | }); | ||||
}); | |||||
}); |