HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //var/www/api.javaapp.co.uk/node_modules/lru-memoizer/test/lru-memoizer.sync.clone.test.js
const memoizer = require('./..');
const assert = require('chai').assert;

describe('lru-memoizer sync (clone)', () => {

  describe('call', () => {
    let loadTimes = 0, memoized;

    beforeEach(() => {
      loadTimes = 0;

      memoized = memoizer.sync({
        load: (key) => {
          loadTimes++;
          return { foo: key , buffer: Buffer.from('1234') };
        },
        hash: (key) => {
          return key;
        },
        clone: true
      });
    });

    it('should return a clone every time with the same cached structure', () => {
      const r1 = memoized('bar');
      assert.strictEqual(loadTimes, 1);
      assert.equal(r1.foo, 'bar');
      r1.foo = 'bax';

      const r2 = memoized('bar');
      assert.strictEqual(loadTimes, 1);
      assert.equal(r2.foo, 'bar');
      assert.notStrictEqual(r1, r2);
      assert.notEqual(r1, r2);
    });
  });

  describe('Promise', () => {
    let loadTimes = 0, memoized;

    beforeEach(() => {
      loadTimes = 0;

      memoized = memoizer.sync({
        load: (key) => {
          loadTimes++;
          return Promise.resolve({ foo: key, buffer: Buffer.from('1234') });
        },
        hash: (key) => {
          return key;
        },
        clone: true
      });
    });

    it('should return a clone every time with the same cached structure', (done) => {
      memoized('bar').then(r1 => {
        assert.strictEqual(loadTimes, 1);
        assert.equal(r1.foo, 'bar');
        r1.foo = 'bax';

        memoized('bar').then(r2 => {
          assert.strictEqual(loadTimes, 1);
          assert.equal(r2.foo, 'bar');
          assert.notStrictEqual(r1, r2);
          assert.notEqual(r1, r2);

          done();
        });
      })
      .catch(done);
    });
  });

});