SmartIT_Extensions/BMC/smart-it-full/test/app/common/expression-engine/expression-event-manager-se...

186 lines
9.7 KiB
JavaScript

/**
* Created by Srini
*/
//This is test suite for Expression Event Manager
describe("Test Expression event manager", function() {
'use strict';
var expressionEventManager, objectValueMapperService, expressionEvaluatorService, getExpMapStub,
evalExpStub, setPropStub, getProviderActionExpMapStub, getAllFieldsStub, getAllProviderActionsFieldsStub,
setProviderActionPropStub, clearProviderActionPropStub, $timeout, setProviderActionFieldNameStub, clearProviderActionFieldNameStub;
beforeEach(module('myitsmApp'));
beforeEach(inject(function (_expressionEventManager_, _objectValueMapperService_, _expressionEvaluatorService_, _$timeout_, $httpBackend) {
let getLocale = function () {
return readJSON('scripts/app/i18n/resources-locale_en.json');
};
objectValueMapperService = _objectValueMapperService_;
expressionEvaluatorService = _expressionEvaluatorService_;
expressionEventManager = _expressionEventManager_;
$timeout = _$timeout_;
$httpBackend.whenGET(/^scripts\/app\/i18n\/resources-locale_en.*$/).respond(200, getLocale());
$httpBackend.whenGET('/smartit/rest/v2/metadata?type=global').respond(200);
$httpBackend.whenGET('/smartit/restapi/person/supportgroupperson').respond(200);
$httpBackend.whenGET('/smartit/rest/serverstates').respond(200);
$httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200);
$httpBackend.whenGET('views/dashboard/index.html').respond(200);
getExpMapStub = sinon.stub(objectValueMapperService,'getExpreesionMapByFieldName');
getExpMapStub.withArgs('field1').returns([{ expression: '$desc != ""', field: 'test2', property: 'readOnly', isWidget: false }]);
getExpMapStub.returns([]);
evalExpStub = sinon.stub(expressionEvaluatorService,'evaluate');
evalExpStub.withArgs('ONCHANGE($status)').returns(false);
evalExpStub.returns(true);
setPropStub = sinon.stub(objectValueMapperService,'setByProperty').returns();
getAllFieldsStub = sinon.stub(objectValueMapperService,'getAllExpressionFields').returns(['field1']);
getAllProviderActionsFieldsStub = sinon.stub(objectValueMapperService,'getAllProviderActionExpressionFields').returns(['field5']);
getProviderActionExpMapStub = sinon.stub(objectValueMapperService,'getProviderActionExpressionMapByFieldName');
setProviderActionFieldNameStub = sinon.stub(objectValueMapperService,'setProviderActionFieldName');
clearProviderActionFieldNameStub = sinon.stub(objectValueMapperService,'clearProviderActionFieldName');
let expressionData1 = [
{
expression: '$status == "Assigned"',
actionId: 'AGGAA5V0FKZ9XAPC5WPJPB95F5WX4T',
action: {
actionName: "PA1",
actionType: 'provider'
}
}
], expressionData2 = [
{
expression: 'ONCHANGE($status)',
actionId: 'AGGAA5V0FKZ9XAPC5WPJPB95F5WX4T',
action: {
actionName: "PA1",
actionType: 'provider'
}
}
];
getProviderActionExpMapStub.withArgs('field5').returns(expressionData1);
getProviderActionExpMapStub.withArgs('field9').returns(expressionData2);
getProviderActionExpMapStub.withArgs('field8').returns([
{
expression: '$status == "Assigned"',
actionId: 'AGGAA5V0FKZ9XAPC5WPJPB95F5WX4T',
action: {
actionName: "PA1",
actionType: 'provider',
sequenceNo: 2
}
},
{
expression: '$status == "Assigned"',
actionId: 'AGGAA5V0FKZ9XAPC5WPJPB95F5WX4W',
action: {
actionName: "PA2",
actionType: 'provider',
sequenceNo: 1
}
}
]);
getProviderActionExpMapStub.returns([]);
setProviderActionPropStub = sinon.stub(objectValueMapperService,'setProviderActionToExecute').returns();
clearProviderActionPropStub = sinon.stub(objectValueMapperService,'clearProviderActionFromList').returns();
}));
afterEach(function () {
getExpMapStub.restore();
evalExpStub.restore();
setPropStub.restore();
});
it('Should init expression event manager', function () {
expect(expressionEventManager).toBeDefined();
expect(expressionEventManager.handleFieldChange).toBeDefined();
expect(expressionEventManager.handleOOTBFieldValueChange).toBeDefined();
expect(expressionEventManager.handleTicketLoad).toBeDefined();
expect(expressionEventManager.handleTicketLoadForActions).toBeDefined();
expect(expressionEventManager._evaluateFieldExpression).toBeUndefined();
expect(expressionEventManager._evaluateProviderActionExpression).toBeUndefined();
});
it('On field change should get expression map, evaluate and set the value', function () {
expressionEventManager.handleFieldChange('field1');
expect(getExpMapStub.called).toBe(true);
expect(evalExpStub.called).toBe(true);
expect(setPropStub.called).toBe(true);
expect(setPropStub.calledWith('test2', 'readOnly', true, false)).toBe(true);
});
it('On field change should get expression map, and if empty should not evaluate or set value', function () {
expressionEventManager.handleFieldChange('field2');
expect(getExpMapStub.called).toBe(true);
expect(evalExpStub.called).toBe(false);
expect(setPropStub.called).toBe(false);
});
it('On Ticket load should get all expression fields and evaluate each field related expression', function () {
expressionEventManager.handleTicketLoad();
expect(getAllFieldsStub.called).toBe(true);
expect(getExpMapStub.called).toBe(true);
expect(evalExpStub.called).toBe(true);
expect(setPropStub.called).toBe(true);
expect(setPropStub.calledWith('test2', 'readOnly', true, false)).toBe(true);
});
it('On Ticket load should get all provider action expression fields and evaluate each field related expression', function () {
expressionEventManager.handleTicketLoadForActions();
$timeout.flush();
expect(getAllProviderActionsFieldsStub.called).toBe(true);
expect(getProviderActionExpMapStub.called).toBe(true);
expect(evalExpStub.called).toBe(true);
expect(setProviderActionPropStub.called).toBe(true);
expect(setProviderActionPropStub.calledWith(
{
expression: '$status == "Assigned"', actionId: 'AGGAA5V0FKZ9XAPC5WPJPB95F5WX4T',
action: {
actionFieldName: "field5", actionId: "AGGAA5V0FKZ9XAPC5WPJPB95F5WX4T", actionName: "PA1", actionType: 'provider'
}
})).toBe(true);
});
it('On field change should get provider action expression map, and if empty should not evaluate or set value', function () {
expressionEventManager.handleFieldChangeForActions('field5');
$timeout.flush();
expect(getProviderActionExpMapStub.called).toBe(true);
expect(evalExpStub.called).toBe(true);
expect(setProviderActionPropStub.called).toBe(true);
expect(clearProviderActionPropStub.called).toBe(false);
});
it('On field change should clear Provider Action from list if expression is not matched', function () {
getProviderActionExpMapStub.withArgs('field6').returns([
{
expression: '$status == "Pending"',
actionId: 'AGGAA5V0FKZ9XAPC5WPJPB95F5WX4T',
action: {
actionName: "PA1",
actionType: 'provider'
}
}
]);
evalExpStub.withArgs('$status == "Pending"').returns(false);
expressionEventManager.handleFieldChangeForActions('field6');
$timeout.flush();
expect(getProviderActionExpMapStub.called).toBe(true);
expect(evalExpStub.called).toBe(true);
expect(setProviderActionPropStub.called).toBe(false);
expect(clearProviderActionPropStub.called).toBe(true);
});
it('On field change should get provider action expression map, and should sort it by sequence no and set provider action by fieldName', function () {
expressionEventManager.handleFieldChangeForActions('field8');
$timeout.flush();
expect(getProviderActionExpMapStub.called).toBe(true);
expect(setProviderActionFieldNameStub.calledWith('field8', 'AGGAA5V0FKZ9XAPC5WPJPB95F5WX4T')).toBe(true);
expect(evalExpStub.called).toBe(true);
expect(setProviderActionPropStub.called).toBe(true);
expect(clearProviderActionPropStub.called).toBe(false);
});
it('On field change should get provider action expression map, and should sort it by sequence no and clear provider action by fieldName', function () {
expressionEventManager.handleFieldChangeForActions('field9');
$timeout.flush();
expect(getProviderActionExpMapStub.called).toBe(true);
expect(setProviderActionFieldNameStub.calledWith('field9', 'AGGAA5V0FKZ9XAPC5WPJPB95F5WX4T')).toBe(true);
expect(clearProviderActionFieldNameStub.calledWith('field9', 'AGGAA5V0FKZ9XAPC5WPJPB95F5WX4T')).toBe(true);
expect(evalExpStub.called).toBe(true);
});
});