'use strict';
const assert = require('chai').assert;
const rewire = require('rewire');

describe('session', function() {
  let session;
  let stats;
  let now;

  beforeEach(function() {
    stats = null;
    const cache = {
      get: (k) => stats,
      set: (k, v) => stats = v
    };
    const moment = () => {
      return {format: () => now}
    };

    session = rewire('../lib/session');
    session.__set__('cache', cache);
    session.__set__('moment', moment);
  });

  describe('#updateStat', function() {
    it('should update number ok', function() {
      now = '2017.12.13';
      session.updateStat('ac', 10);
      assert.deepEqual(stats, {'2017.12.13': {ac: 10}});

      session.updateStat('ac', 20);
      assert.deepEqual(stats, {'2017.12.13': {ac: 30}});

      now = '2017.12.14';
      session.updateStat('ac', 40);
      assert.deepEqual(stats, {
        '2017.12.13': {ac: 30},
        '2017.12.14': {ac: 40}
      });
    });

    it('should update set ok', function() {
      now = '2017.12.13';
      session.updateStat('ac.set', 101);
      assert.deepEqual(stats, {'2017.12.13': {'ac.set': [101]}});
      session.updateStat('ac.set', 100);
      assert.deepEqual(stats, {'2017.12.13': {'ac.set': [101, 100]}});
      session.updateStat('ac.set', 101);
      assert.deepEqual(stats, {'2017.12.13': {'ac.set': [101, 100]}});
    });
  }); // #updateStat
});