describe('Test feed-comment-thread directive', function () {
var element, scope, compile, rootScope, $httpBackend, elementScope, events, keyCodes, worknoteTypesData, metadataModel, $q, $templateCache, timelineItem,
smartRecorderModel, assetList, personList, $window, i18nService, feedModel, attachmentService, systemAlertService, configurationModel;
beforeEach(module('myitsmApp', 'templates', 'ticketModule'));
beforeEach(function () {
inject(function ($compile, $rootScope, $injector, _events_, _metadataModel_, _$q_, _$templateCache_, _smartRecorderModel_, _$window_, _i18nService_,
_feedModel_, _attachmentService_, _systemAlertService_, _configurationModel_) {
$httpBackend = $injector.get('$httpBackend');
var getLocale = function () {
return readJSON('scripts/app/i18n/resources-locale_en.json');
};
$httpBackend.whenGET(/^scripts\/app\/i18n\/resources-locale_en.*$/).respond(getLocale());
$httpBackend.whenGET(/^\/smartit\/rest\/v2\/metadata/).respond(new MetadataVO());
$httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200);
$httpBackend.whenGET('/smartit/rest/serverstates').respond(200);
$httpBackend.whenGET('/smartit/restapi/person/supportgroupperson').respond(200);
compile = $compile;
rootScope = $rootScope;
scope = $rootScope.$new();
events = _events_;
metadataModel = _metadataModel_;
$q = _$q_;
$templateCache = _$templateCache_;
smartRecorderModel = _smartRecorderModel_;
$window = _$window_;
i18nService = _i18nService_;
feedModel = _feedModel_;
attachmentService = _attachmentService_;
systemAlertService = _systemAlertService_;
configurationModel = _configurationModel_;
});
});
beforeEach(function () {
navigator.__defineGetter__('userAgent', function(){
return 'Chrome';// customized user agent
});
keyCodes = {
enter: 13,
leftArrow: 37,
rightArrow: 39,
upArrow: 38,
downArrow: 40
};
worknoteTypesData = {
workinfoTypes: [
{
"type": "option",
"index": 16000,
"name": "Email System",
"label": "Email System",
"expanded": false
},
{
"type": "option",
"index": 29000,
"name": "General Information",
"label": "General Information",
"expanded": false
}
]
};
personList = [
{
"firstName": "Allen",
"lastName": "Allbrook",
"fullName": "Allen Allbrook"
},
{
"firstName": "Irwin",
"lastName": "Allen",
"fullName": "Irwin Allen"
}
];
assetList = {
"objects": [
{
"name": "7L851BS",
"desc": "",
"type": "Hardware",
"company": {
"name": "Petramco"
},
"product": {
"name": "OptiPlex",
"model": "3010"
}
},
{
"name": "AkhShukl-pun",
"desc": "",
"type": "Hardware",
"company": {
"name": "Petramco"
},
"product": {
"name": "OptiPlex",
"model": "7010"
}
}
],
"totalMatches": 2
};
spyOn(metadataModel, 'getMetadataByType').and.callFake(function () {
let deferred = $q.defer();
deferred.resolve(worknoteTypesData);
return deferred.promise;
});
spyOn(smartRecorderModel, 'getListOfPersons').and.callFake(function () {
let deferred = $q.defer();
deferred.resolve({exceedsChunkSize: true, list: personList});
return deferred.promise;
});
spyOn(smartRecorderModel, 'getListOfAssets').and.callFake(function () {
let deferred = $q.defer();
deferred.resolve(assetList);
return deferred.promise;
});
});
function getCompiledElement(type) {
element = angular.element('
');
switch (type) {
case EntityVO.TYPE_INCIDENT:
scope.parentContext = new IncidentVO();
break;
case EntityVO.TYPE_CHANGE:
scope.parentContext = new ChangeVO();
break;
}
scope.type = type;
scope.isDraft = false;
var directiveElem = compile(element)(scope);
scope.$digest();
$('body').append(element);
elementScope = element.isolateScope();
return directiveElem;
}
function loadTemplateCache (directiveElem) {
directiveElem.trigger('click');
}
function mockForIEBrowser() {
navigator.__defineGetter__('userAgent', function(){
return 'MSIE';// customized user agent
});
}
it('should compile', function () {
var directiveElem = getCompiledElement();
var divElem = directiveElem[0];
expect(divElem).toBeDefined();
});
it('add note UI should appear when set to focus', function () {
getCompiledElement();
spyOn(elementScope, 'addNoteForm').and.callThrough();
expect(element.find('.timeline-note').length).toEqual(0);
rootScope.$broadcast(events.SET_FOCUS_TO_ACTIVITY_INPUT);
scope.$digest();
expect(elementScope.addNoteForm).toHaveBeenCalled();
expect(elementScope.commentFormNode.find('.timeline-note__text').length).toEqual(1);
});
it('should enable "Share with Vendor" checkbox when incident contains brokerVendorName data', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
rootScope.$broadcast(events.SET_FOCUS_TO_ACTIVITY_INPUT);
scope.$digest();
expect(elementScope.state.isVendorEnabled).not.toEqual(true);
expect(elementScope.commentFormNode.find('input[ng-model="state.shareWithVendor"]').length).toEqual(0);
scope.parentContext.brokerVendorName = 'JIRA';
scope.$digest();
expect(elementScope.state.isVendorEnabled).toEqual(true);
expect(elementScope.commentFormNode.find('input[ng-model="state.shareWithVendor"]').length).toEqual(1);
});
it('should enable "Share with Vendor" checkbox when Change Request contains brokerVendorName data', function () {
getCompiledElement(EntityVO.TYPE_CHANGE);
rootScope.$broadcast(events.SET_FOCUS_TO_ACTIVITY_INPUT);
scope.$digest();
expect(elementScope.state.isVendorEnabled).not.toEqual(true);
expect(elementScope.commentFormNode.find('input[ng-model="state.shareWithVendor"]').length).toEqual(0);
scope.parentContext.brokerVendorName = 'AWS';
scope.$digest();
expect(elementScope.state.isVendorEnabled).toEqual(true);
expect(elementScope.commentFormNode.find('input[ng-model="state.shareWithVendor"]').length).toEqual(1);
});
it('paste data to feed', function () {
getCompiledElement();
var event = jasmine.createSpyObj('e', [ 'preventDefault' ]);
elementScope.handleSmartInputPaste(event);
expect(event.preventDefault).toHaveBeenCalled();
});
it('should load work note types on load', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
expect(elementScope.worknoteTypes[0].name).toBe('Email System');
});
it('should prevent the cursor from moving on the text input field if type-ahead popup is active. The up, down and enter keys will be used exclusive for selection purposes', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
var upArrowEvent, downArrowEvent, leftArrowEvent, rightArrowEvent, enterKeyEvent;
upArrowEvent = downArrowEvent = leftArrowEvent = rightArrowEvent = enterKeyEvent = jasmine.createSpyObj('e', [ 'preventDefault' ]);
elementScope.showPopup = true;
upArrowEvent.keyCode = keyCodes.upArrow;
elementScope.handleSmartInputKeyDown(upArrowEvent);
elementScope.$apply();
expect(upArrowEvent.preventDefault).toHaveBeenCalled();
downArrowEvent.keyCode = keyCodes.downArrow;
elementScope.handleSmartInputKeyDown(downArrowEvent);
elementScope.$apply();
expect(downArrowEvent.preventDefault).toHaveBeenCalled();
leftArrowEvent.keyCode = keyCodes.leftArrow;
elementScope.handleSmartInputKeyDown(leftArrowEvent);
elementScope.$apply();
expect(leftArrowEvent.preventDefault).toHaveBeenCalled();
rightArrowEvent.keyCode = keyCodes.rightArrow;
elementScope.handleSmartInputKeyDown(rightArrowEvent);
elementScope.$apply();
expect(rightArrowEvent.preventDefault).toHaveBeenCalled();
enterKeyEvent.keyCode = keyCodes.enter;
elementScope.handleSmartInputKeyDown(enterKeyEvent);
elementScope.$apply();
expect(enterKeyEvent.preventDefault).toHaveBeenCalled();
});
it('should forcefully insert
tag instead of or
tags for all browsers on press of enter key', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
var enterKeyEvent = jasmine.createSpyObj('e', [ 'preventDefault' ]),
range = {
deleteContents: jasmine.createSpy('deleteContents'),
insertNode: jasmine.createSpy('insertNode'),
setStartAfter: jasmine.createSpy('setStartAfter'),
setEndAfter: jasmine.createSpy('setEndAfter'),
collapse: jasmine.createSpy('collapse')
},
rangeObject = {
getRangeAt: function() {
return range;
},
removeAllRanges: jasmine.createSpy('removeAllRanges'),
addRange: jasmine.createSpy('addRange')
};
spyOn(window, 'getSelection').and.returnValue(rangeObject);
enterKeyEvent.keyCode = keyCodes.enter;
elementScope.handleSmartInputKeyDown(enterKeyEvent);
elementScope.$apply();
expect(range.deleteContents).toHaveBeenCalled();
expect(range.insertNode).toHaveBeenCalled();
expect(range.setStartAfter).toHaveBeenCalled();
expect(range.setEndAfter).toHaveBeenCalled();
expect(range.collapse).toHaveBeenCalled();
expect(rangeObject.removeAllRanges).toHaveBeenCalled();
expect(rangeObject.addRange).toHaveBeenCalled();
expect(enterKeyEvent.preventDefault).toHaveBeenCalled();
});
it('should load fire clickFocusInHandler on click/focus in of activity note text area and load template in cache if it is not already loaded', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT);
loadTemplateCache(directiveElem);
elementScope.$apply();
expect(elementScope.selectedWorknoteType.name).toBe('General Information');
expect(elementScope.state.noteFormIsActive).toBeTruthy();
expect(elementScope.editMode).toBeTruthy();
expect(elementScope.state.unflagging).toBeFalsy();
expect(elementScope.commentFormNode.find('.timeline-note__text-container').length).toBe(1);
expect(elementScope.commentFormNode.find('.timeline-note__attachments').length).toBe(1);
expect(elementScope.commentFormNode.find('.timeline-note__message').length).toBe(1);
expect($templateCache.get('views/feed/feed-add-note-form.html')).toBeDefined();
});
it('should perform check on user input and replace
with \n for inputText model', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
loadTemplateCache(directiveElem);
testContent = 'Text Content
Next Line
Three Line Space';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.inputTextHtml).toBe(testContent);
expect(elementScope.inputText).toBe('Text Content\nNext Line\n\n\nThree Line Space');
});
it('should not do anything if shift or ctrl key is pressed', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
loadTemplateCache(directiveElem);
testContent = 'Text Content
Next Line
Three Line Space';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
keyUpEvent.ctrlKey = true;
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.inputTextHtml).toBe(testContent);
expect(elementScope.inputText).toBe('Text Content\nNext Line\n\n\nThree Line Space');
});
it('should perform check on user input and replace
with \n for inputText model in case of IE browser', function () {
mockForIEBrowser();
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
loadTemplateCache(directiveElem);
testContent = 'Text Content
Next Line
Three Line Space';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.inputTextHtml).toBe(testContent);
expect(elementScope.inputText).toBe('Text Content\nNext Line\n\n\nThree Line Space');
});
it('should check for @ and should show the person list popup', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
assetList = {
"objects": [],
"totalMatches": 0
};
loadTemplateCache(directiveElem);
testContent = 'Text Content @Allen';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.popupType).toBe('profile');
expect(elementScope.actualTypeAheadText).toBe('Allen');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.showPopup).toBeTruthy();
expect(elementScope.showPopupHeader).toBeTruthy();
expect(elementScope.typeAheadText).toBe('Allen');
expect(elementScope.assetProfileListFilteredLength).toBe(0);
expect(elementScope.personProfileList[0].firstName).toBe('Allen');
expect(elementScope.personProfileListFilteredLength).toBe(2);
});
it('should check for @ and should show the asset list popup', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
personList = [];
loadTemplateCache(directiveElem);
testContent = 'Text Content @Opti';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.assetProfileList[0].product.name).toBe('OptiPlex');
expect(elementScope.assetProfileListFilteredLength).toBe(2);
expect(elementScope.typeAheadText).toBe('Opti');
});
it('should highlight the above person item if user press up key to move upward in case of person/asset list popup', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
assetList = {
"objects": [],
"totalMatches": 0
};
keyUpEvent.keyCode = keyCodes.upArrow;
elementScope.showPopup = true;
elementScope.typeAheadListPos = 2;
loadTemplateCache(directiveElem);
testContent = 'Text Content @Allen';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.typeAheadListPos).toBe(1);
});
it('should highlight the below person item if user press down key to move downward in case of person/asset list popup', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
assetList = {
"objects": [],
"totalMatches": 0
};
keyUpEvent.keyCode = keyCodes.downArrow;
elementScope.showPopup = true;
elementScope.typeAheadListPos = 0;
elementScope.personProfileListFilteredLength = 2;
loadTemplateCache(directiveElem);
testContent = 'Text Content @Allen';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.typeAheadListPos).toBe(1);
});
describe('should select the highlighted person, replace with full person name at right position and close the popup if user hit enter key', function () {
var directiveElem, keyUpEvent, testContent;
beforeEach(function () {
mockForIEBrowser();
directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT);
keyUpEvent = new Event('keyup');
assetList = {
"objects": [],
"totalMatches": 0
};
loadTemplateCache(directiveElem);
testContent = 'Text Content @Allen';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
keyUpEvent.keyCode = keyCodes.enter;
});
it(' if last node is text then insert nbsp at end', function () {
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.selectedText).toBe('@Allen');
expect(elementScope.inputText).toBe('Text Content Allen Allbrook');
expect(elementScope.inputTextHtml).toBe('Text Content
Allen Allbrook');
expect(elementScope.showPopup).toBeFalsy();
expect(elementScope.personProfileList.length).toBe(0);
expect(elementScope.assetProfileList.length).toBe(0);
expect(elementScope.typeAheadText).toBe('');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.personProfileListFilteredLength).toBe(0);
expect(elementScope.assetProfileListFilteredLength).toBe(0);
expect(elementScope.showPopupHeader).toBeFalsy();
});
it(' if last node is
then select the previous node', function () {
testContent = 'Text Content @Allen
';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.selectedText).toBe('@Allen');
expect(elementScope.inputText).toBe('Text Content Allen Allbrook');
expect(elementScope.inputTextHtml).toBe('Text Content
Allen Allbrook');
expect(elementScope.showPopup).toBeFalsy();
expect(elementScope.personProfileList.length).toBe(0);
expect(elementScope.assetProfileList.length).toBe(0);
expect(elementScope.typeAheadText).toBe('');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.personProfileListFilteredLength).toBe(0);
expect(elementScope.assetProfileListFilteredLength).toBe(0);
expect(elementScope.showPopupHeader).toBeFalsy();
});
it(' if last node is
then replace with nbsp', function () {
testContent = 'Text Content @Allen';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.selectedText).toBe('@Allen');
expect(elementScope.inputText).toBe('Text Content Allen Allbrook');
expect(elementScope.inputTextHtml).toBe('Text Content Allen Allbrook');
expect(elementScope.showPopup).toBeFalsy();
expect(elementScope.personProfileList.length).toBe(0);
expect(elementScope.assetProfileList.length).toBe(0);
expect(elementScope.typeAheadText).toBe('');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.personProfileListFilteredLength).toBe(0);
expect(elementScope.assetProfileListFilteredLength).toBe(0);
expect(elementScope.showPopupHeader).toBeFalsy();
});
});
it('should select the highlighted asset, replace with full asset name at right position and close the popup if user hit enter key', function () {
var directiveElem, keyUpEvent, testContent;
directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT);
keyUpEvent = new Event('keyup');
personList = [];
loadTemplateCache(directiveElem);
testContent = 'Text Content @Opti';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
keyUpEvent.keyCode = keyCodes.enter;
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.selectedText).toBe('@Opti');
expect(elementScope.inputText).toBe('Text Content 7L851BS');
expect(elementScope.inputTextHtml).toBe('Text Content 7L851BS
');
expect(elementScope.showPopup).toBeFalsy();
expect(elementScope.personProfileList.length).toBe(0);
expect(elementScope.assetProfileList.length).toBe(0);
expect(elementScope.typeAheadText).toBe('');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.personProfileListFilteredLength).toBe(0);
expect(elementScope.assetProfileListFilteredLength).toBe(0);
expect(elementScope.showPopupHeader).toBeFalsy();
});
it('should close person/asset list popup if user removes all the content', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
assetList = {
"objects": [],
"totalMatches": 0
};
loadTemplateCache(directiveElem);
testContent = '@Allen';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
testContent = '';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.showPopup).toBeFalsy();
expect(elementScope.personProfileList.length).toBe(0);
expect(elementScope.assetProfileList.length).toBe(0);
expect(elementScope.typeAheadText).toBe('');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.personProfileListFilteredLength).toBe(0);
expect(elementScope.assetProfileListFilteredLength).toBe(0);
expect(elementScope.showPopupHeader).toBeFalsy();
});
it('should close person/asset list popup if user removes content till @', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
assetList = {
"objects": [],
"totalMatches": 0
};
loadTemplateCache(directiveElem);
testContent = 'Test Content @Allen';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
testContent = 'Test Content';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.showPopup).toBeFalsy();
expect(elementScope.personProfileList.length).toBe(0);
expect(elementScope.assetProfileList.length).toBe(0);
expect(elementScope.typeAheadText).toBe('');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.personProfileListFilteredLength).toBe(0);
expect(elementScope.assetProfileListFilteredLength).toBe(0);
expect(elementScope.showPopupHeader).toBeFalsy();
});
it('should highlight potential item in case of person and should show list of potential match and if user hit the enter key then it should replace with name', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent,
clickEvent = $.Event('click');
assetList = {
"objects": [],
"totalMatches": 0
};
loadTemplateCache(directiveElem);
testContent = '@Allen what to ';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
testContent = '@Allen what to d';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('Allen what to d');
//if popup is already opened then close it and open its own popup
elementScope.showPopup = true;
clickEvent.currentTarget = elementScope.commentFormNode.find('.smart-recorder-highlight')[0];
//Should list potential match on click of highlighted item
elementScope.handleSmartInputHighlightSelected(clickEvent);
elementScope.$apply();
expect(elementScope.personProfileList[0].firstName).toBe('Allen');
expect(elementScope.selectedText).toBe('Allen');
expect(elementScope.showPopup).toBeTruthy();
//Replace Potential item with Confirmed people name on press of enter key on person list
keyUpEvent.keyCode = keyCodes.enter;
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').html()).toBe('Allen Allbrook what to d
');
});
it('should highlight potential item in case of asset', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('click'),
testContent;
personList = [];
loadTemplateCache(directiveElem);
testContent = '@Optiplex this is ';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
testContent = '@Optiplex this is i';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('Optiplex this is i');
});
it('should reset all the parameters if typeahead text length is less then 3', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyUpEvent = new Event('keyup'),
testContent;
assetList = {
"objects": [],
"totalMatches": 0
};
loadTemplateCache(directiveElem);
testContent = 'This is @Allen';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.showPopup).toBeTruthy();
expect(elementScope.personProfileList.length).toBe(2);
expect(elementScope.typeAheadText).toBe('Allen');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.personProfileListFilteredLength).toBe(2);
expect(elementScope.showPopupHeader).toBeTruthy();
testContent = 'This is @A';
//enter some text in text area
elementScope.commentFormNode.find('.timeline-note__text').html(testContent);
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.personProfileList.length).toBe(0);
expect(elementScope.assetProfileList.length).toBe(0);
expect(elementScope.typeAheadText).toBe('');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.personProfileListFilteredLength).toBe(0);
expect(elementScope.assetProfileListFilteredLength).toBe(0);
expect(elementScope.showPopupHeader).toBeFalsy();
});
describe('should paste the copied content', function () {
var pasteEvent, directiveElem, pasteContent;
beforeEach(function () {
directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT);
pasteEvent = jasmine.createSpyObj('e', [ 'preventDefault' ]);
assetList = {
"objects": [],
"totalMatches": 0
};
personList = [];
loadTemplateCache(directiveElem);
pasteContent = 'Copied Content';
});
it('if originalEvent is supported by browser', function () {
pasteEvent.originalEvent = {
clipboardData: {
getData: function () {
return pasteContent;
}
}
};
spyOn(document, 'queryCommandSupported').and.callFake(function (command) {
return command === 'insertText' ? true: false;
});
spyOn(document, 'execCommand');
elementScope.handleSmartInputPaste(pasteEvent);
elementScope.$apply();
expect(document.execCommand).toHaveBeenCalledWith('insertText', false, pasteContent);
});
it('if originalEvent is not supported by browser but window clipboard is supported by browser', function () {
$window.clipboardData = jasmine.createSpyObj('clipboardData', ['test']);
$window.clipboardData.getData = function () {
return pasteContent;
};
spyOn(document, 'queryCommandSupported').and.callFake(function (command) {
return command === 'insertText' ? true: false;
});
spyOn(document, 'execCommand');
elementScope.handleSmartInputPaste(pasteEvent);
elementScope.$apply();
expect(document.execCommand).toHaveBeenCalledWith('insertText', false, pasteContent);
});
it('if insertText command is not supported by browser but paste query command is supported by browser', function () {
pasteEvent.originalEvent = {
clipboardData: {
getData: function () {
return pasteContent;
}
}
};
spyOn(document, 'queryCommandSupported').and.callFake(function (command) {
return command === 'paste' ? true: false;
});
spyOn(document, 'execCommand');
elementScope.handleSmartInputPaste(pasteEvent);
elementScope.$apply();
expect(document.execCommand).toHaveBeenCalledWith('paste', false, pasteContent);
});
it('if both insertText and paste command are not supported by browser then it should not do anything', function () {
pasteEvent.originalEvent = {
clipboardData: {
getData: function () {
return pasteContent;
}
}
};
spyOn(document, 'queryCommandSupported').and.callFake(function (command) {
return false;
});
spyOn(document, 'execCommand');
elementScope.handleSmartInputPaste(pasteEvent);
elementScope.$apply();
expect(document.execCommand).not.toHaveBeenCalledWith('paste', false, pasteContent);
expect(document.execCommand).not.toHaveBeenCalledWith('insertText', false, pasteContent);
});
});
describe('should add @ to the activity note text area on click of @', function () {
var directiveElem, range, rangeObject;
beforeEach(function () {
directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT);
loadTemplateCache(directiveElem);
range = {
deleteContents: jasmine.createSpy('deleteContents'),
insertNode: jasmine.createSpy('insertNode'),
cloneRange: function () {
return range;
},
setStartAfter: jasmine.createSpy('setStartAfter'),
collapse: jasmine.createSpy('collapse'),
selectNodeContents: jasmine.createSpy('selectNodeContents'),
commonAncestorContainer: ''
};
rangeObject = {
getRangeAt: function() {
return range;
},
removeAllRanges: jasmine.createSpy('removeAllRanges'),
addRange: jasmine.createSpy('addRange'),
rangeCount: 1
};
spyOn(window, 'getSelection').and.callFake(function () {
return navigator.userAgent === 'MSIE'? false: rangeObject;
});
});
it('if browser is chrome', function () {
range.commonAncestorContainer = elementScope.commentFormNode.find('.timeline-note__text')[0];
elementScope.toggleMentioning();
elementScope.$apply();
expect(range.deleteContents).toHaveBeenCalled();
expect(range.insertNode).toHaveBeenCalled();
expect(range.setStartAfter).toHaveBeenCalled();
expect(range.collapse).toHaveBeenCalled();
expect(rangeObject.removeAllRanges).toHaveBeenCalled();
expect(rangeObject.addRange).toHaveBeenCalled();
});
});
describe('user click on work note type section ', function () {
var clickEvent;
beforeEach(function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
clickEvent = jasmine.createSpyObj('e', ['preventDefault', 'stopPropagation']);
});
it(' and nothing will be happen when user click on expanded work note section', function () {
elementScope.worknoteTypes[0].expanded = true;
elementScope.expandWorknoteTypeSection(clickEvent, elementScope.worknoteTypes[0]);
elementScope.$apply();
expect(clickEvent.preventDefault).toHaveBeenCalled();
expect(clickEvent.stopPropagation).toHaveBeenCalled();
});
it(' and should able to expand work note section', function () {
elementScope.expandWorknoteTypeSection(clickEvent, elementScope.worknoteTypes[0]);
elementScope.$apply();
expect(clickEvent.preventDefault).toHaveBeenCalled();
expect(clickEvent.stopPropagation).toHaveBeenCalled();
expect(elementScope.worknoteTypes[0].expanded).toBeTruthy();
});
});
it('should work note type if user click on it', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
elementScope.selectWorknoteType(elementScope.worknoteTypes[0]);
elementScope.$apply();
expect(elementScope.selectedWorknoteType.name).toBe(elementScope.worknoteTypes[0].name);
});
it('should select work note if user press space key', function () {
var keyupEvent = jasmine.createSpyObj('e', ['preventDefault', 'stopPropagation']);
keyupEvent.keyCode = 32;
getCompiledElement(EntityVO.TYPE_INCIDENT);
elementScope.handleKeydown(keyupEvent, elementScope.worknoteTypes[0]);
elementScope.$apply();
expect(elementScope.selectedWorknoteType.name).toBe(elementScope.worknoteTypes[0].name);
expect(keyupEvent.preventDefault).toHaveBeenCalled();
expect(keyupEvent.stopPropagation).toHaveBeenCalled();
});
it('should unbind all the events if scope is getting destroyed', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
elementScope.$destroy();
elementScope.$apply();
});
it('should unbind all the events if scope is getting destroyed', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT),
keyPressEvent = $.Event('keydown');
keyPressEvent.which = 13; //enter key down
directiveElem.trigger(keyPressEvent);
elementScope.$apply();
expect(elementScope.selectedWorknoteType.name).toBe(elementScope.worknoteTypes[1].name);
});
it('should dismiss note form on click of set preview item or cancel button', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
rootScope.$broadcast(events.DISMISS_NOTE_FORM, {});
elementScope.$apply();
expect(elementScope.showPopup).toBeFalsy();
expect(elementScope.personProfileList.length).toBe(0);
expect(elementScope.assetProfileList.length).toBe(0);
expect(elementScope.typeAheadText).toBe('');
expect(elementScope.typeAheadListPos).toBe(0);
expect(elementScope.personProfileListFilteredLength).toBe(0);
expect(elementScope.assetProfileListFilteredLength).toBe(0);
expect(elementScope.showPopupHeader).toBeFalsy();
expect(elementScope.state.access).toBeFalsy();
expect(elementScope.state.shareWithVendor).toBeFalsy();
expect(elementScope.state.unflagging).toBeFalsy();
expect(elementScope.addFlagNote).toBeFalsy();
expect(elementScope.attachments.length).toBe(0);
});
it('should add note on click of flag icon of knowledge ticket', function () {
getCompiledElement(EntityVO.TYPE_KNOWLEDGE);
rootScope.$broadcast(events.ADD_FLAG_NOTE, { flag: true });
elementScope.$apply();
expect(elementScope.selectedWorknoteType.name).toBe(elementScope.worknoteTypes[1].name);
expect(elementScope.attachments.length).toBe(0);
expect(elementScope.addFlagNote).toBeTruthy();
expect(elementScope.flag).toBeTruthy();
});
it('should focus the textAreaElement if textAreaElement is already initialized', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_KNOWLEDGE);
loadTemplateCache(directiveElem);
spyOn(elementScope.commentFormNode, 'show');
rootScope.$broadcast(events.ADD_FLAG_NOTE, { flag: true });
elementScope.$apply();
expect(elementScope.commentFormNode.show).toHaveBeenCalled();
});
describe('should load timeline activity notes in case of knowledge article', function () {
beforeEach(function () {
timelineItem = {
"type": "comment",
"note": {
"message": "Add Flag\n",
"workNoteTypeId": "FLAG0001",
"workNoteGuid": "IDGAA5V0HHE9CAP36DW5P29IXQSWTK",
},
"replies": [
{
"type": "comment"
}
]
};
scope.timelineItem = new FeedItemVO().build(timelineItem);
getCompiledElement(EntityVO.TYPE_KNOWLEDGE);
});
it('should set isThreadUnflagged and isFlagThread if there is any timeline activity notes', function () {
expect(elementScope.state.isThreadUnflagged).toBeFalsy();
expect(elementScope.isFlagThread).toBeFalsy();
});
});
it('should handle event SET_TICKET_DRAFT_MENTIONED if user mentioned any other customer in smart recorder and create ticket', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
smartRecorderModel.smartRecorderData = {
confirmedItems: [
{
"displayName": "Allen Allbrook",
"id": "Allen",
"type": "person",
"relationship": "",
"originalName": "Allen Allbrook"
},
{
"displayName": "Bob Baxter",
"id": "Bob",
"type": "person",
"relationship": "mentioned",
"originalName": "Bob Baxter"
},
{
"displayName": "Ivan",
"id": "Ivan",
"type": "person",
"relationship": "mentioned",
"originalName": "Ivan"
}
]
};
spyOn(i18nService, 'getLocalizedString').and.callFake(function (val) {
return val === 'createNew.ticket.mentionedPersons'? 'were mentioned when this ticket was logged': val;
});
rootScope.$broadcast(events.SET_TICKET_DRAFT_MENTIONED);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('Bob Baxter, Ivan were mentioned when this ticket was logged');
});
it('should handle event SAVE_TICKET_DRAFT when user save draft ticket', function () {
var directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT);
loadTemplateCache(directiveElem);
elementScope.commentFormNode.find('.timeline-note__text').html('Test Content');
rootScope.$broadcast(events.SAVE_TICKET_DRAFT);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('Test Content');
expect(feedModel.pendingWorkNote.noteText).toBe('Test Content');
expect(elementScope.state.savingNote).toBeTruthy();
});
it('should not do anything if noteData does not have any value while saving draft ticket', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
rootScope.$broadcast(events.SAVE_TICKET_DRAFT);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('');
});
it('should upload the attachment and show it near text area', function () {
var attachment = {
"pendingSave": true,
"name": "user.png",
"size": 27117,
"file": {},
"fileExt": "png"
};
getCompiledElement(EntityVO.TYPE_INCIDENT);
spyOn(attachmentService, 'prepareFileToUpload').and.returnValue(attachment);
elementScope.handleFileChange();
elementScope.$apply();
expect(elementScope.attachments[0].name).toBe('user.png');
});
it('should alert a warning if attachment file is empty', function () {
var attachment = {
size: 0
};
getCompiledElement(EntityVO.TYPE_INCIDENT);
spyOn(attachmentService, 'prepareFileToUpload').and.returnValue(attachment);
spyOn(systemAlertService, 'warning');
elementScope.handleFileChange();
elementScope.$apply();
expect(systemAlertService.warning).toHaveBeenCalled();
});
it('should remove the attachment when user deletes the attachment', function () {
var attachment = {
"pendingSave": true,
"name": "user.png",
"size": 27117,
"file": {},
"fileExt": "png"
},
clickEvent = jasmine.createSpyObj('e', ['stopImmediatePropagation']);
getCompiledElement(EntityVO.TYPE_INCIDENT);
elementScope.attachments[0] = attachment;
elementScope.dismissAttachment(clickEvent, attachment);
elementScope.$apply();
expect(elementScope.attachments.length).toBe(0);
expect(clickEvent.stopImmediatePropagation).toHaveBeenCalled();
});
describe(' user clicks on post button ', function () {
var directiveElem, clickEvent, runSaveNoteSuccess, keyUpEvent;
beforeEach(function () {
var error = {
data: {
detailMessage: 'Error'
}
};
directiveElem = getCompiledElement(EntityVO.TYPE_KNOWLEDGE);
loadTemplateCache(directiveElem);
elementScope.attachments[0] = {
"pendingSave": true,
"name": "user.png",
"size": 27117,
"file": {},
"fileExt": "png"
};
assetList = {
"objects": [],
"totalMatches": 0
};
keyUpEvent = new Event('keyup');
elementScope.commentFormNode.find('.timeline-note__text').html('Test Content @Allen');
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
keyUpEvent.keyCode = keyCodes.enter;
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('Test Content Allen Allbrook');
clickEvent = $.Event('click');
clickEvent.target = elementScope.commentFormNode.find('[type=submit]')[0];
runSaveNoteSuccess = true;
spyOn(elementScope, 'runSaveNoteHandler').and.callFake(function () {
let deferred = $q.defer();
runSaveNoteSuccess ? deferred.resolve() : deferred.reject(error);
return deferred.promise;
});
});
it('but should not do anything if it does not have any attachment or text', function () {
var result;
elementScope.attachments = [];
elementScope.commentFormNode.find('.timeline-note__text').html('');
result = elementScope.submitNote();
elementScope.$apply();
expect(result).toBeFalsy();
});
it('and it should post the activity if it has any attachment or text and empty the textarea', function () {
elementScope.submitNote(clickEvent);
elementScope.$apply();
expect(elementScope.inputText).toBe('');
expect(elementScope.state.noteFormIsActive).toBeFalsy();
expect(elementScope.state.access).toBeFalsy();
expect(elementScope.state.shareWithVendor).toBeFalsy();
expect(elementScope.state.unflagging).toBeFalsy();
expect(elementScope.addFlagNote).toBeFalsy();
expect(elementScope.attachments.length).toBe(0);
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('');
});
it('and it should post the activity if user replies to a flagged comment', function () {
//Article is flagged
elementScope.isFlagThread = true;
elementScope.state.isThreadUnflagged = false;
elementScope.timelineItem = {
note: {
workNoteGuid: 'IDGAA5V0HHE9CAP3YKXTP3BPZE46IM'
}
};
elementScope.submitNote(clickEvent);
elementScope.$apply();
expect(elementScope.inputText).toBe('');
expect(elementScope.state.noteFormIsActive).toBeFalsy();
expect(elementScope.state.access).toBeFalsy();
expect(elementScope.state.shareWithVendor).toBeFalsy();
expect(elementScope.state.unflagging).toBeFalsy();
expect(elementScope.addFlagNote).toBeFalsy();
expect(elementScope.attachments.length).toBe(0);
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('');
});
it('and it should post the activity if user replies to a unflagged comment', function () {
//Article is unflagged
elementScope.isFlagThread = true;
elementScope.state.isThreadUnflagged = true;
elementScope.timelineItem = {
note: {
workNoteGuid: 'IDGAA5V0HHE9CAP3YKXTP3BPZE46IM'
}
};
elementScope.submitNote(clickEvent);
elementScope.$apply();
expect(elementScope.inputText).toBe('');
expect(elementScope.state.noteFormIsActive).toBeFalsy();
expect(elementScope.state.access).toBeFalsy();
expect(elementScope.state.shareWithVendor).toBeFalsy();
expect(elementScope.state.unflagging).toBeFalsy();
expect(elementScope.addFlagNote).toBeFalsy();
expect(elementScope.attachments.length).toBe(0);
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('');
});
it('and it should clean up text before posting', function () {
elementScope.commentFormNode.find('.timeline-note__text').html('Test
Content 1
2');
elementScope.submitNote(clickEvent);
elementScope.$apply();
//Remove more than 2 line break with only 2. Replace special characters line breaks with normal \n.
expect(elementScope.noteData.noteText).toBe('Test\n\nContent 1\n2');
});
it('and it should alert an error if there is any error while posting note', function () {
spyOn(systemAlertService, 'error');
runSaveNoteSuccess = false;
elementScope.submitNote(clickEvent);
elementScope.$apply();
expect(systemAlertService.error).toHaveBeenCalled();
});
});
it('and it should post the activity if it has any attachment or text and empty the textarea and browser is IE', function () {
mockForIEBrowser();
var directiveElem = getCompiledElement(EntityVO.TYPE_KNOWLEDGE),
keyUpEvent,
clickEvent;
loadTemplateCache(directiveElem);
assetList = {
"objects": [],
"totalMatches": 0
};
keyUpEvent = new Event('keyup');
elementScope.commentFormNode.find('.timeline-note__text').html('Test Content @Allen');
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
keyUpEvent.keyCode = keyCodes.enter;
elementScope.handleSmartInputChange(keyUpEvent);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('Test Content Allen Allbrook ');
clickEvent = $.Event('click');
clickEvent.target = elementScope.commentFormNode.find('[type=submit]')[0];
spyOn(elementScope, 'runSaveNoteHandler').and.callFake(function () {
let deferred = $q.defer();
deferred.resolve();
return deferred.promise;
});
elementScope.submitNote(clickEvent);
elementScope.$apply();
expect(elementScope.inputText).toBe('');
expect(elementScope.state.noteFormIsActive).toBeFalsy();
expect(elementScope.state.access).toBeFalsy();
expect(elementScope.state.shareWithVendor).toBeFalsy();
expect(elementScope.state.unflagging).toBeFalsy();
expect(elementScope.addFlagNote).toBeFalsy();
expect(elementScope.attachments.length).toBe(0);
expect(elementScope.commentFormNode.find('.timeline-note__text').text()).toBe('');
});
it('should hide draft loader if there is any error in saving draft ticket', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
elementScope.state.savingNote = true;
rootScope.$broadcast(events.HIDE_TICKET_DRAFT_LOADER);
elementScope.$apply();
expect(elementScope.state.savingNote).toBeFalsy();
});
it('should watch vendor name and info model successfully and enable vendor list in ui', function () {
getCompiledElement(EntityVO.TYPE_INCIDENT);
elementScope.parentContext.brokerVendorName = 'Calbro Services';
elementScope.parentContext.vendorInfo = [
{name: 'Calbro Services', selected: true},
{name: 'Petramco', selected: false}
];
elementScope.$apply();
expect(elementScope.state.isMultipleVendorTickets).toBeTruthy();
expect(elementScope.state.isVendorEnabled).toBeTruthy();
expect(elementScope.state.shareWithVendor).toBeTruthy();
});
it('should check/uncheck vendor on press of space bar', function () {
var spaceEvent = new Event('keyup');
getCompiledElement(EntityVO.TYPE_INCIDENT);
elementScope.parentContext.brokerVendorName = 'Calbro Services';
elementScope.parentContext.vendorInfo = [
{name: 'Calbro Services', selected: true},
{name: 'Petramco', selected: false}
];
elementScope.$apply();
spaceEvent.keyCode = 32;
elementScope.handleKeydownOnUpdate(spaceEvent, elementScope.parentContext.vendorInfo[1]);
expect(elementScope.parentContext.vendorInfo[1]).toBeTruthy();
});
it('should post note if any vendor is selected in case of Incident', function () {
var clickEvent = $.Event('click'),
directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT);
loadTemplateCache(directiveElem);
clickEvent.target = elementScope.commentFormNode.find('[type=submit]')[0];
elementScope.parentContext.brokerVendorName = 'Calbro Services';
elementScope.parentContext.vendorInfo = [
{name: 'Calbro Services', selected: true},
{name: 'Petramco', selected: false}
];
elementScope.commentFormNode.find('.timeline-note__text').html('Test Content');
elementScope.$apply();
spyOn(elementScope, 'runSaveNoteHandler').and.callFake(function () {
let deferred = $q.defer();
deferred.resolve();
return deferred.promise;
});
elementScope.submitNote(clickEvent);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').html()).toBe('');
});
it('should post note if any vendor is selected in case of change and multiple vendor', function () {
var clickEvent = $.Event('click'),
directiveElem = getCompiledElement(EntityVO.TYPE_CHANGE);
loadTemplateCache(directiveElem);
clickEvent.target = elementScope.commentFormNode.find('[type=submit]')[0];
elementScope.parentContext.brokerVendorName = 'Calbro Services';
elementScope.parentContext.vendorInfo = [
{name: 'Calbro Services', selected: true},
{name: 'Petramco', selected: false}
];
elementScope.commentFormNode.find('.timeline-note__text').html('Test Content');
elementScope.$apply();
spyOn(elementScope, 'runSaveNoteHandler').and.callFake(function () {
let deferred = $q.defer();
deferred.resolve();
return deferred.promise;
});
elementScope.submitNote(clickEvent);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').html()).toBe('');
});
it('should post note if any vendor is selected in case of change and only one vendor', function () {
var clickEvent = $.Event('click'),
directiveElem = getCompiledElement(EntityVO.TYPE_CHANGE);
loadTemplateCache(directiveElem);
clickEvent.target = elementScope.commentFormNode.find('[type=submit]')[0];
elementScope.parentContext.brokerVendorName = 'Calbro Services';
elementScope.parentContext.vendorInfo = [
{name: 'Calbro Services', selected: true}
];
elementScope.commentFormNode.find('.timeline-note__text').html('Test Content');
elementScope.$apply();
spyOn(elementScope, 'runSaveNoteHandler').and.callFake(function () {
let deferred = $q.defer();
deferred.resolve();
return deferred.promise;
});
elementScope.submitNote(clickEvent);
elementScope.$apply();
expect(elementScope.commentFormNode.find('.timeline-note__text').html()).toBe('');
});
it('should by default check the public checkbox in case of Service Request, it is not dependant on socialWorklogAccessSetting configuration parameter', function () {
var directiveElem;
configurationModel.socialWorklogAccessSetting = false;
directiveElem = getCompiledElement(EntityVO.TYPE_SERVICEREQUEST);
loadTemplateCache(directiveElem);
expect(elementScope.state.access).toBeTruthy();
});
it('should by default uncheck the public checkbox in case of knowledge, it is not dependant on socialWorklogAccessSetting configuration parameter', function () {
var directiveElem;
configurationModel.socialWorklogAccessSetting = true;
directiveElem = getCompiledElement(EntityVO.TYPE_KNOWLEDGE);
loadTemplateCache(directiveElem);
expect(elementScope.state.access).toBeFalsy();
});
it('should by default check the public checkbox in case of Incident or ticket type other than knowledge and service request if socialWorklogAccessSetting configuration parameter is true', function () {
var directiveElem;
configurationModel.socialWorklogAccessSetting = true;
directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT);
loadTemplateCache(directiveElem);
expect(elementScope.state.access).toBeTruthy();
});
it('should by default uncheck the public checkbox in case of Incident or ticket type other than knowledge and service request if socialWorklogAccessSetting configuration parameter is false', function () {
var directiveElem;
configurationModel.socialWorklogAccessSetting = false;
directiveElem = getCompiledElement(EntityVO.TYPE_INCIDENT);
loadTemplateCache(directiveElem);
expect(elementScope.state.access).toBeFalsy();
});
it('should by default uncheck the public checkbox in case of Incident or ticket type other than knowledge and service request if socialWorklogAccessSetting configuration parameter is not defined', function () {
var directiveElem;
configurationModel.socialWorklogAccessSetting = undefined;
directiveElem = getCompiledElement(EntityVO.TYPE_WORKORDER);
loadTemplateCache(directiveElem);
expect(elementScope.state.access).toBeFalsy();
});
});