text: 'use strict';
  
  const test = require('ava');
  const ClientMetricStore = require('./client-metrics-store');
  const lolex = require('lolex');
  
  function getMockDb() {
      const list = [
          { id: 4, metrics: { appName: 'test' } },
          { id: 3, metrics: { appName: 'test' } },
          { id: 2, metrics: { appName: 'test' } },
      ];
      return {
          getMetricsLastHour() {
              return Promise.resolve([{ id: 1, metrics: { appName: 'test' } }]);
          },
  
          getNewMetrics() {
              return Promise.resolve([list.pop() || { id: 0 }]);
          },
      };
  }
  
  test.cb('should call database on startup', t => {
      const mock = getMockDb();
  
      const store = new ClientMetricStore(mock);
  
      t.plan(2);
  
      store.on('metrics', metrics => {
          t.true(store.highestIdSeen === 1);
          t.true(metrics.appName === 'test');
          store.destroy();
  
          t.end();
      });
  });
  
  test.cb('should poll for updates', t => {
      const clock = lolex.install();
  
      const mock = getMockDb();
      const store = new ClientMetricStore(mock, 100);
  
      const metrics = [];
      store.on('metrics', m => metrics.push(m));
  
      t.true(metrics.length === 0);
  
      store.on('ready', () => {
          t.true(metrics.length === 1);
          clock.tick(300);
          process.nextTick(() => {
              t.true(metrics.length === 4);
              t.true(store.highestIdSeen === 4);
              store.destroy();
              clock.uninstall();
              t.end();
          });
      });
  });
  