You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							122 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
	
	
							122 lines
						
					
					
						
							5.0 KiB
						
					
					
				"use strict";
 | 
						|
 | 
						|
var _chai = require("chai");
 | 
						|
 | 
						|
var _sinon = _interopRequireDefault(require("sinon"));
 | 
						|
 | 
						|
var _adapters = require("../../adapters");
 | 
						|
 | 
						|
var _decorators = require("../../decorators");
 | 
						|
 | 
						|
var _populateProperty = require("./populate-property");
 | 
						|
 | 
						|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | 
						|
 | 
						|
describe('populateProperty', () => {
 | 
						|
  const userId = '1234';
 | 
						|
  const path = 'userId';
 | 
						|
  let resourceDecorator;
 | 
						|
  let referenceResource;
 | 
						|
  let record;
 | 
						|
  let userRecord;
 | 
						|
  let property;
 | 
						|
  let populatedResponse;
 | 
						|
  beforeEach(() => {
 | 
						|
    resourceDecorator = _sinon.default.createStubInstance(_decorators.ResourceDecorator);
 | 
						|
    referenceResource = _sinon.default.createStubInstance(_adapters.BaseResource);
 | 
						|
    record = _sinon.default.createStubInstance(_adapters.BaseRecord);
 | 
						|
    userRecord = _sinon.default.createStubInstance(_adapters.BaseRecord);
 | 
						|
    property = _sinon.default.createStubInstance(_decorators.PropertyDecorator);
 | 
						|
    property.resource.returns(resourceDecorator);
 | 
						|
    property.reference.returns(referenceResource);
 | 
						|
    property.property = {
 | 
						|
      reference: 'someRawReference'
 | 
						|
    };
 | 
						|
    property.propertyPath = path;
 | 
						|
  });
 | 
						|
  afterEach(() => {
 | 
						|
    _sinon.default.restore();
 | 
						|
  });
 | 
						|
  it('returns empty array when no records are given', async () => {
 | 
						|
    (0, _chai.expect)(await (0, _populateProperty.populateProperty)([], property)).to.deep.eq([]);
 | 
						|
  });
 | 
						|
  context('2 same records with reference key', () => {
 | 
						|
    beforeEach(async () => {
 | 
						|
      record.get.returns(userId);
 | 
						|
      record.selectParams.returns({
 | 
						|
        [path]: userId
 | 
						|
      });
 | 
						|
      userRecord.id.returns(userId);
 | 
						|
      referenceResource.findMany.resolves([userRecord]);
 | 
						|
      populatedResponse = await (0, _populateProperty.populateProperty)([record, record], property);
 | 
						|
    });
 | 
						|
    it('returns 2 records', async () => {
 | 
						|
      var _populatedResponse;
 | 
						|
 | 
						|
      (0, _chai.expect)((_populatedResponse = populatedResponse) === null || _populatedResponse === void 0 ? void 0 : _populatedResponse.length).to.eq(2);
 | 
						|
    });
 | 
						|
    it('calls findMany in with the list of userIds just once', () => {
 | 
						|
      (0, _chai.expect)(referenceResource.findMany).to.have.been.calledOnceWith([userId]);
 | 
						|
    });
 | 
						|
    it('adds reference resource to record.populated', () => {
 | 
						|
      const populatedRecord = populatedResponse && populatedResponse[0];
 | 
						|
      (0, _chai.expect)(populatedRecord === null || populatedRecord === void 0 ? void 0 : populatedRecord.populate).to.have.been.calledWith(path, userRecord);
 | 
						|
    });
 | 
						|
  });
 | 
						|
  context('record with array property being also a reference', () => {
 | 
						|
    const [userId1, userId2] = ['user1', 'user2'];
 | 
						|
    beforeEach(async () => {
 | 
						|
      record.get.returns([userId1, userId2]); // resourceDecorator
 | 
						|
 | 
						|
      userRecord.id.returns(userId);
 | 
						|
      property.isArray.returns(true);
 | 
						|
      referenceResource.findMany.resolves([userRecord]);
 | 
						|
    });
 | 
						|
    context('filled array ', () => {
 | 
						|
      beforeEach(async () => {
 | 
						|
        record.get.returns([userId1, userId2]);
 | 
						|
        populatedResponse = await (0, _populateProperty.populateProperty)([record, record], property);
 | 
						|
      });
 | 
						|
      it('properly finds references in arrays', async () => {
 | 
						|
        (0, _chai.expect)(referenceResource.findMany).to.have.been.calledOnceWith([userId1, userId2]);
 | 
						|
      });
 | 
						|
    });
 | 
						|
    context('array value set to null', () => {
 | 
						|
      beforeEach(async () => {
 | 
						|
        record.get.returns(undefined);
 | 
						|
        populatedResponse = await (0, _populateProperty.populateProperty)([record, record], property);
 | 
						|
      });
 | 
						|
      it('dees not look for any record', () => {
 | 
						|
        (0, _chai.expect)(referenceResource.findMany).not.to.have.been.called;
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
  context('empty references', () => {
 | 
						|
    it('does not findMany for null values', async () => {
 | 
						|
      record.get.returns(null);
 | 
						|
      populatedResponse = await (0, _populateProperty.populateProperty)([record], property);
 | 
						|
      (0, _chai.expect)(referenceResource.findMany).not.to.have.been.called;
 | 
						|
    });
 | 
						|
    it('does not findMany for undefined values', async () => {
 | 
						|
      record.get.returns(undefined);
 | 
						|
      populatedResponse = await (0, _populateProperty.populateProperty)([record], property);
 | 
						|
      (0, _chai.expect)(referenceResource.findMany).not.to.have.been.called;
 | 
						|
    });
 | 
						|
    it('findMany for 0 values', async () => {
 | 
						|
      record.get.returns(0);
 | 
						|
      populatedResponse = await (0, _populateProperty.populateProperty)([record], property);
 | 
						|
      (0, _chai.expect)(referenceResource.findMany).to.have.been.called;
 | 
						|
    });
 | 
						|
    it('does not findMany for "" empty strings', async () => {
 | 
						|
      record.get.returns('');
 | 
						|
      populatedResponse = await (0, _populateProperty.populateProperty)([record], property);
 | 
						|
      (0, _chai.expect)(referenceResource.findMany).not.to.have.been.called;
 | 
						|
    });
 | 
						|
    it('does not findMany for "" empty strings in array', async () => {
 | 
						|
      record.get.returns(['']);
 | 
						|
      property.isArray.returns(true);
 | 
						|
      populatedResponse = await (0, _populateProperty.populateProperty)([record], property);
 | 
						|
      (0, _chai.expect)(referenceResource.findMany).not.to.have.been.called;
 | 
						|
    });
 | 
						|
  });
 | 
						|
}); |