context('MultiSelectDialog', () => { before(() => { cy.login(); cy.visit('/app'); const contact_template = { "doctype": "Contact", "first_name": "Test", "status": "Passive", "email_ids": [ { "doctype": "Contact Email", "email_id": "test@example.com", "is_primary": 0 } ] }; const promises = Array.from({length: 25}) .map(() => cy.insert_doc('Contact', contact_template, true)); Promise.all(promises); }); function open_multi_select_dialog() { cy.window().its('frappe').then(frappe => { new frappe.ui.form.MultiSelectDialog({ doctype: "Contact", target: {}, setters: { status: null, gender: null }, add_filters_group: 1, allow_child_item_selection: 1, child_fieldname: "email_ids", child_columns: ["email_id", "is_primary"] }); }); } it('checks multi select dialog api works', () => { open_multi_select_dialog(); cy.get_open_dialog().should('contain', 'Select Contacts'); }); it('checks for filters', () => { ['search_term', 'status', 'gender'].forEach(fieldname => { cy.get_open_dialog().get(`.frappe-control[data-fieldname="${fieldname}"]`).should('exist'); }); // add_filters_group: 1 should add a filter group cy.get_open_dialog().get(`.frappe-control[data-fieldname="filter_area"]`).should('exist'); }); it('checks for child item selection', () => { cy.get_open_dialog() .get(`.dt-row-header`).should('not.exist'); cy.get_open_dialog() .get(`.frappe-control[data-fieldname="allow_child_item_selection"]`) .find('input[data-fieldname="allow_child_item_selection"]') .should('exist') .click({force: true}); cy.get_open_dialog() .get(`.frappe-control[data-fieldname="child_selection_area"]`) .should('exist'); cy.get_open_dialog() .get(`.dt-row-header`).should('contain', 'Contact'); cy.get_open_dialog() .get(`.dt-row-header`).should('contain', 'Email Id'); cy.get_open_dialog() .get(`.dt-row-header`).should('contain', 'Is Primary'); }); it('tests more button', () => { cy.get_open_dialog() .get(`.frappe-control[data-fieldname="more_child_btn"]`) .should('exist') .as('more-btn'); cy.get_open_dialog().get('.datatable .dt-scrollable .dt-row').should(($rows) => { expect($rows).to.have.length(20); }); cy.intercept('POST', 'api/method/frappe.client.get_list').as('get-more-records'); cy.get('@more-btn').find('button').click({force: true}); cy.wait('@get-more-records'); cy.get_open_dialog().get('.datatable .dt-scrollable .dt-row').should(($rows) => { if ($rows.length <= 20) { throw new Error("More button doesn't work"); } }); }); });