describe('viewMode (option)', () => {
  it('should not have any restrictions by default', (done) => {
    const image = window.createImage();
    const cropper = new Cropper(image, {
      ready() {
        const canvasData = {
          left: 100,
          top: 100,
          width: 160,
          height: 90,
        };
        const changedCanvasData = cropper.setCanvasData(canvasData).getCanvasData();

        expect(changedCanvasData.left).to.equal(canvasData.left);
        expect(changedCanvasData.top).to.equal(canvasData.top);
        expect(changedCanvasData.width).to.equal(canvasData.width);
        expect(changedCanvasData.height).to.equal(canvasData.height);
        done();
      },
    });

    expect(cropper.options.viewMode).to.equal(0);
  });

  it('should restrict the crop box to not exceed the size of the canvas', (done) => {
    const image = window.createImage();
    const cropper = new Cropper(image, {
      viewMode: 1,

      ready() {
        let canvasData = cropper.zoom(-0.5).getCanvasData();
        let cropBoxData = cropper.getCropBoxData();

        expect(canvasData.width).to.be.least(cropBoxData.width);
        expect(canvasData.height).to.be.least(cropBoxData.height);

        canvasData = cropper.clear().moveTo(-160, -90).getCanvasData();
        cropBoxData = cropper.crop().setCropBoxData({
          width: canvasData.naturalWidth,
          height: canvasData.naturalHeight,
        }).getCropBoxData();

        expect(canvasData.width).to.be.above(cropBoxData.width);
        expect(canvasData.height).to.be.above(cropBoxData.height);
        done();
      },
    });

    expect(cropper.options.viewMode).to.equal(1);
  });

  it('should restrict the minimum canvas size to fit within the container.', (done) => {
    const image = window.createImage();
    const cropper = new Cropper(image, {
      viewMode: 2,

      ready() {
        const canvasData = cropper.zoom(-0.5).getCanvasData();
        const containerData = cropper.getContainerData();

        expect(canvasData.width >= containerData.width
          || canvasData.height >= containerData.height).to.be.true;
        done();
      },
    });

    expect(cropper.options.viewMode).to.equal(2);
  });

  it('should restrict the minimum canvas size to full fit the container.', (done) => {
    const image = window.createImage();
    const cropper = new Cropper(image, {
      viewMode: 3,

      ready() {
        const canvasData = cropper.zoom(-0.5).getCanvasData();
        const containerData = cropper.getContainerData();

        expect(canvasData.left).to.be.most(0);
        expect(canvasData.top).to.be.most(0);
        expect(canvasData.width).to.be.least(containerData.width);
        expect(canvasData.height).to.be.least(containerData.height);
        done();
      },
    });

    expect(cropper.options.viewMode).to.equal(3);
  });
});
