import { describe, beforeEach, it, expect, angularMocks } from '../../../../../test/lib/common';

import moment from 'moment';
import { GraphCtrl } from '../module';
import helpers from '../../../../../test/specs/helpers';

describe('GraphCtrl', function() {
  var ctx = new helpers.ControllerTestContext();

  beforeEach(angularMocks.module('grafana.services'));
  beforeEach(angularMocks.module('grafana.controllers'));
  beforeEach(
    angularMocks.module(function($compileProvider) {
      $compileProvider.preAssignBindingsEnabled(true);
    })
  );

  beforeEach(ctx.providePhase());
  beforeEach(ctx.createPanelController(GraphCtrl));
  beforeEach(() => {
    ctx.ctrl.annotationsPromise = Promise.resolve({});
    ctx.ctrl.updateTimeRange();
  });

  describe('when time series are outside range', function() {
    beforeEach(function() {
      var data = [
        {
          target: 'test.cpu1',
          datapoints: [[45, 1234567890], [60, 1234567899]],
        },
      ];

      ctx.ctrl.range = { from: moment().valueOf(), to: moment().valueOf() };
      ctx.ctrl.onDataReceived(data);
    });

    it('should set datapointsOutside', function() {
      expect(ctx.ctrl.dataWarning.title).to.be('Data points outside time range');
    });
  });

  describe('when time series are inside range', function() {
    beforeEach(function() {
      var range = {
        from: moment()
          .subtract(1, 'days')
          .valueOf(),
        to: moment().valueOf(),
      };

      var data = [
        {
          target: 'test.cpu1',
          datapoints: [[45, range.from + 1000], [60, range.from + 10000]],
        },
      ];

      ctx.ctrl.range = range;
      ctx.ctrl.onDataReceived(data);
    });

    it('should set datapointsOutside', function() {
      expect(ctx.ctrl.dataWarning).to.be(null);
    });
  });

  describe('datapointsCount given 2 series', function() {
    beforeEach(function() {
      var data = [{ target: 'test.cpu1', datapoints: [] }, { target: 'test.cpu2', datapoints: [] }];
      ctx.ctrl.onDataReceived(data);
    });

    it('should set datapointsCount warning', function() {
      expect(ctx.ctrl.dataWarning.title).to.be('No data points');
    });
  });
});
