Home Reference Source

src/components/columns/Columns.unit.js

import Harness from '../../../test/harness';
import ColumnsComponent from './Columns';
import assert from 'power-assert';
import {
  comp1,
  comp2,
  comp3
} from './fixtures';

describe('Columns Component', () => {
  it('Should build a columns component', () => {
    return Harness.testCreate(ColumnsComponent, comp1).then((component) => {
      Harness.testElements(component, 'input[type="text"]', 2);
    });
  });
  it('Should be auto-adjusting when auto adjust is set to true', done => {
    Harness.testCreate(ColumnsComponent, comp2)
    .then((component) => {
      const columns = component.component.columns;
      assert.equal(columns.every(col => col.currentWidth === 2), true);
      const oddIndexes = [0, 2, 4]; // 0 column has 2 textfields
      oddIndexes.forEach(i => columns[i].components[0].hidden = true); // we're setting hidden for odd columns
      // initially all components aren't hidden and have default width = 2
      component.rebuild(); // rebuild component to check conditions

      oddIndexes.forEach(i => {
        if (i === 0) {
          assert.equal(columns[i].currentWidth, 2, `column[${i}] should have width = 2`); // it has at least a component as visible
        }
        else {
          assert.equal(columns[i].currentWidth, 0, `column[${i}] should have width = 0`); // columns which has no visible components should have currentWidth as 0
        }
      });

      oddIndexes.forEach(i => columns[i].components[0].hidden = false); // we're setting visible for odd columns again
      component.rebuild(); // rebuild component to check conditions
      assert.equal(columns.every(col => col.currentWidth === 2), true, 'all columns should have width = 2'); // ensure we have initial width
    })
    .then(done)
    .catch(done);
  });

  it('Should clear fields in modal window after confirming to clear data in dialog window', (done) => {
    Harness.testCreate(ColumnsComponent, comp3).then((component) => {
      const hiddenModalWindow = component.element.querySelector('.component-rendering-hidden');
      assert.equal(!!hiddenModalWindow, true);

      const clickEvent = new Event('click');
      const openModalElement = component.refs.openModal;
      //open modal edit window
      openModalElement.dispatchEvent(clickEvent);

      setTimeout(() => {
        assert.equal(!!component.element.querySelector('.component-rendering-hidden'), false);

        const inputEvent = new Event('input');
        const columnsInputField = component.element.querySelector('[name="data[textField]"]');

        columnsInputField.value = 'alexy@form.io';
        columnsInputField.dispatchEvent(inputEvent);

        setTimeout(() => {
          assert.equal(component.element.querySelector('[name="data[textField]"]').value, 'alexy@form.io');

          const clickEvent = new Event('click');
          const modalOverlay = component.refs.modalOverlay;
          //click outside modal edit window
          modalOverlay.dispatchEvent(clickEvent);

          setTimeout(() => {
            assert.equal(!!component.componentModal.dialog, true);

            const clickEvent = new Event('click');
            const btnForCleaningValues = document.querySelector('[ref="dialogYesButton"]');
            //click on 'yes, delete it' button inside alert window
            btnForCleaningValues.dispatchEvent(clickEvent);

            setTimeout(() => {
              const clickEvent = new Event('click');
              const openModalElement = component.refs.openModal;
              //open edit modal window again
              openModalElement.dispatchEvent(clickEvent);

              setTimeout(() => {
                assert.equal(component.element.querySelector('[name="data[textField]"]').value, '');
                done();
              }, 100);
            }, 100);
          }, 100);
        }, 100);
      }, 100);
    }).catch(done);
  });
});