217 lines
6.5 KiB
JavaScript
217 lines
6.5 KiB
JavaScript
context('Control Link', () => {
|
|
before(() => {
|
|
cy.login();
|
|
cy.visit('/app/website');
|
|
});
|
|
|
|
beforeEach(() => {
|
|
cy.visit('/app/website');
|
|
cy.create_records({
|
|
doctype: 'ToDo',
|
|
description: 'this is a test todo for link'
|
|
}).as('todos');
|
|
});
|
|
|
|
function get_dialog_with_link() {
|
|
return cy.dialog({
|
|
title: 'Link',
|
|
fields: [
|
|
{
|
|
'label': 'Select ToDo',
|
|
'fieldname': 'link',
|
|
'fieldtype': 'Link',
|
|
'options': 'ToDo'
|
|
}
|
|
]
|
|
});
|
|
}
|
|
|
|
it('should set the valid value', () => {
|
|
get_dialog_with_link().as('dialog');
|
|
|
|
cy.intercept('POST', '/api/method/frappe.desk.search.search_link').as('search_link');
|
|
|
|
cy.get('.frappe-control[data-fieldname=link] input').focus().as('input');
|
|
cy.wait('@search_link');
|
|
cy.get('@input').type('todo for link', { delay: 200 });
|
|
cy.wait('@search_link');
|
|
cy.get('.frappe-control[data-fieldname=link]').findByRole('listbox').should('be.visible');
|
|
cy.get('.frappe-control[data-fieldname=link] input').type('{enter}', { delay: 100 });
|
|
cy.get('.frappe-control[data-fieldname=link] input').blur();
|
|
cy.get('@dialog').then(dialog => {
|
|
cy.get('@todos').then(todos => {
|
|
let value = dialog.get_value('link');
|
|
expect(value).to.eq(todos[0]);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('should unset invalid value', () => {
|
|
get_dialog_with_link().as('dialog');
|
|
|
|
cy.intercept('POST', '/api/method/frappe.client.validate_link').as('validate_link');
|
|
|
|
cy.get('.frappe-control[data-fieldname=link] input')
|
|
.type('invalid value', { delay: 100 })
|
|
.blur();
|
|
cy.wait('@validate_link');
|
|
cy.get('.frappe-control[data-fieldname=link] input').should('have.value', '');
|
|
});
|
|
|
|
it("should be possible set empty value explicitly", () => {
|
|
get_dialog_with_link().as("dialog");
|
|
|
|
cy.intercept("POST", "/api/method/frappe.client.validate_link").as("validate_link");
|
|
|
|
cy.get(".frappe-control[data-fieldname=link] input")
|
|
.type(" ", { delay: 100 })
|
|
.blur();
|
|
cy.wait("@validate_link");
|
|
cy.get(".frappe-control[data-fieldname=link] input").should("have.value", "");
|
|
cy.window()
|
|
.its("cur_dialog")
|
|
.then((dialog) => {
|
|
expect(dialog.get_value("link")).to.equal('');
|
|
});
|
|
});
|
|
|
|
it('should route to form on arrow click', () => {
|
|
get_dialog_with_link().as('dialog');
|
|
|
|
cy.intercept('POST', '/api/method/frappe.client.validate_link').as('validate_link');
|
|
cy.intercept('POST', '/api/method/frappe.desk.search.search_link').as('search_link');
|
|
|
|
cy.get('@todos').then(todos => {
|
|
cy.get('.frappe-control[data-fieldname=link] input').as('input');
|
|
cy.get('@input').focus();
|
|
cy.wait('@search_link');
|
|
cy.get('@input').type(todos[0]).blur();
|
|
cy.wait('@validate_link');
|
|
cy.get('@input').focus();
|
|
cy.findByTitle('Open Link')
|
|
.should('be.visible')
|
|
.click();
|
|
cy.location('pathname').should('eq', `/app/todo/${todos[0]}`);
|
|
});
|
|
});
|
|
|
|
it('show title field in link', () => {
|
|
get_dialog_with_link().as('dialog');
|
|
|
|
cy.insert_doc("Property Setter", {
|
|
"doctype": "Property Setter",
|
|
"doc_type": "ToDo",
|
|
"property": "show_title_field_in_link",
|
|
"property_type": "Check",
|
|
"doctype_or_field": "DocType",
|
|
"value": "1"
|
|
}, true);
|
|
|
|
cy.window().its('frappe').then(frappe => {
|
|
if (!frappe.boot) {
|
|
frappe.boot = {
|
|
link_title_doctypes: ['ToDo']
|
|
}
|
|
} else {
|
|
frappe.boot.link_title_doctypes = ['ToDo'];
|
|
}
|
|
});
|
|
|
|
cy.intercept('POST', '/api/method/frappe.desk.search.search_link').as('search_link');
|
|
|
|
cy.get('.frappe-control[data-fieldname=link] input').focus().as('input');
|
|
cy.wait('@search_link');
|
|
cy.get('@input').type('todo for link');
|
|
cy.wait('@search_link');
|
|
cy.get('.frappe-control[data-fieldname=link] ul').should('be.visible');
|
|
cy.get('.frappe-control[data-fieldname=link] input').type('{enter}', { delay: 100 });
|
|
cy.get('.frappe-control[data-fieldname=link] input').blur();
|
|
cy.get('@dialog').then(dialog => {
|
|
cy.get('@todos').then(todos => {
|
|
let field = dialog.get_field('link');
|
|
let value = field.get_value();
|
|
let label = field.get_label_value();
|
|
|
|
expect(value).to.eq(todos[0]);
|
|
expect(label).to.eq('this is a test todo for link');
|
|
|
|
cy.remove_doc("Property Setter", "ToDo-main-show_title_field_in_link");
|
|
});
|
|
});
|
|
});
|
|
|
|
it('should update dependant fields (via fetch_from)', () => {
|
|
cy.get('@todos').then(todos => {
|
|
cy.visit(`/app/todo/${todos[0]}`);
|
|
cy.intercept('POST', '/api/method/frappe.client.validate_link').as('validate_link');
|
|
|
|
cy.get('.frappe-control[data-fieldname=assigned_by] input').focus().as('input');
|
|
cy.get('@input').type('Administrator', {delay: 100}).blur();
|
|
cy.wait('@validate_link');
|
|
cy.get('.frappe-control[data-fieldname=assigned_by_full_name] .control-value').should(
|
|
'contain', 'Administrator'
|
|
);
|
|
|
|
cy.window()
|
|
.its("cur_frm.doc.assigned_by")
|
|
.should("eq", "Administrator");
|
|
|
|
// invalid input
|
|
cy.get('@input').clear().type('invalid input', {delay: 100}).blur();
|
|
cy.get('.frappe-control[data-fieldname=assigned_by_full_name] .control-value').should(
|
|
'contain', ''
|
|
);
|
|
|
|
cy.window()
|
|
.its("cur_frm.doc.assigned_by")
|
|
.should("eq", null);
|
|
|
|
// set valid value again
|
|
cy.get('@input').clear().type('Administrator', {delay: 100}).blur();
|
|
cy.wait('@validate_link');
|
|
|
|
cy.window()
|
|
.its("cur_frm.doc.assigned_by")
|
|
.should("eq", "Administrator");
|
|
|
|
// clear input
|
|
cy.get('@input').clear().blur();
|
|
cy.get('.frappe-control[data-fieldname=assigned_by_full_name] .control-value').should(
|
|
'contain', ''
|
|
);
|
|
|
|
cy.window()
|
|
.its("cur_frm.doc.assigned_by")
|
|
.should("eq", "");
|
|
});
|
|
});
|
|
|
|
it("should set default values", () => {
|
|
cy.insert_doc("Property Setter", {
|
|
"doctype_or_field": "DocField",
|
|
"doc_type": "ToDo",
|
|
"field_name": "assigned_by",
|
|
"property": "default",
|
|
"property_type": "Text",
|
|
"value": "Administrator"
|
|
}, true);
|
|
cy.reload();
|
|
cy.new_form("ToDo");
|
|
cy.fill_field("description", "new", "Text Editor");
|
|
cy.intercept("POST", "/api/method/frappe.desk.form.save.savedocs").as("save_form");
|
|
cy.findByRole("button", {name: "Save"}).click();
|
|
cy.wait("@save_form");
|
|
cy.get(".frappe-control[data-fieldname=assigned_by_full_name] .control-value").should(
|
|
"contain", "Administrator"
|
|
);
|
|
// if user clears default value explicitly, system should not reset default again
|
|
cy.get_field("assigned_by").clear().blur();
|
|
cy.intercept("POST", "/api/method/frappe.desk.form.save.savedocs").as("save_form");
|
|
cy.findByRole("button", {name: "Save"}).click();
|
|
cy.wait("@save_form");
|
|
cy.get_field("assigned_by").should("have.value", "");
|
|
cy.get(".frappe-control[data-fieldname=assigned_by_full_name] .control-value").should(
|
|
"contain", ""
|
|
);
|
|
});
|
|
});
|