- 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", ""
- );
- });
- });
|