context('Form', () => {
	before(() => {
		cy.login();
		cy.visit('/app/website');
		return cy.window().its('frappe').then(frappe => {
			return frappe.call("frappe.tests.ui_test_helpers.create_contact_records");
		});
	});
	it('create a new form', () => {
		cy.visit('/app/todo/new');
		cy.get_field('description', 'Text Editor').type('this is a test todo', {force: true}).wait(200);
		cy.get('.page-title').should('contain', 'Not Saved');
		cy.intercept({
			method: 'POST',
			url: 'api/method/frappe.desk.form.save.savedocs'
		}).as('form_save');
		cy.get('.primary-action').click();
		cy.wait('@form_save').its('response.statusCode').should('eq', 200);

		cy.visit('/app/todo');
		cy.get('.page-head').findByTitle('To Do').should('exist');
		cy.get('.list-row').should('contain', 'this is a test todo');
	});

	it('navigates between documents with child table list filters applied', () => {
		cy.visit('/app/contact');

		cy.clear_filters();
		cy.get('.standard-filter-section [data-fieldname="name"] input').type('Test Form Contact 3').blur();
		cy.click_listview_row_item(0);

		cy.get('#page-Contact .page-head').findByTitle('Test Form Contact 3').should('exist');
		cy.get('.prev-doc').should('be.visible').click();
		cy.get('.msgprint-dialog .modal-body').contains('No further records').should('be.visible');
		cy.hide_dialog();

		cy.get('#page-Contact .page-head').findByTitle('Test Form Contact 3').should('exist');
		cy.get('.next-doc').should('be.visible').click();
		cy.get('.msgprint-dialog .modal-body').contains('No further records').should('be.visible');
		cy.hide_dialog();

		cy.get('#page-Contact .page-head').findByTitle('Test Form Contact 3').should('exist');

		// clear filters
		cy.visit('/app/contact');
		cy.clear_filters();
	});

	it('validates behaviour of Data options validations in child table', () => {
		// test email validations for set_invalid controller
		let website_input = 'website.in';
		let valid_email = 'user@email.com';
		let expectBackgroundColor = 'rgb(255, 245, 245)';

		cy.visit('/app/contact/new');
		cy.get('.frappe-control[data-fieldname="email_ids"]').as('table');
		cy.get('@table').find('button.grid-add-row').click();
		cy.get('@table').find('button.grid-add-row').click();
		cy.get('@table').find('[data-idx="1"]').as('row1');
		cy.get('@table').find('[data-idx="2"]').as('row2');
		cy.get('@row1').click();
		cy.get('@row1').find('input.input-with-feedback.form-control').as('email_input1');

		cy.get('@email_input1').type(website_input, { waitForAnimations: false });
		cy.fill_field('company_name', 'Test Company');

		cy.get('@row2').click();
		cy.get('@row2').find('input.input-with-feedback.form-control').as('email_input2');
		cy.get('@email_input2').type(valid_email, { waitForAnimations: false });

		cy.get('@row1').click();
		cy.get('@email_input1').should($div => {
			const style = window.getComputedStyle($div[0]);
			expect(style.backgroundColor).to.equal(expectBackgroundColor);
		});
		cy.get('@email_input1').should('have.class', 'invalid');

		cy.get('@row2').click();
		cy.get('@email_input2').should('not.have.class', 'invalid');
	});
});
