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
			| 
								 
											3 years ago
										 
									 | 
							
								"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;
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |