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;
|
|
});
|
|
});
|
|
}); |