SmartIT_Extensions/BMC/smart-it-full/test/app/admin/screen-configuration/custom-area-editor-controll...

326 lines
8.7 KiB
JavaScript

var regularField = {
'id': 'field1',
'name': 'testField',
'itsmFieldId': 1,
'type': 'characterField',
'dataType': 'text',
'displayOrder': 0,
'label': 'Test Field',
'groupMember': false,
'widgetMember': false,
'ootb': true,
'itsmRequired': true,
'arFieldName': 'Test Field',
'hide': false,
'required': false,
'editable': true,
'hideLabel': true,
'maxLength': 15,
availability: 0
};
var widgetField = {
'id': 'widget1',
'name': 'myWidget',
'type': 'priority',
'dataType': 'widget',
'displayOrder': 1,
'groupMember': false,
'widgetMember': false,
'ootb': true,
'itsmRequired': false,
'hide': false,
'required': true,
'editable': true,
'hideLabel': true,
availability: 0,
'members': [
{
'id': 'member1',
'name': 'member1',
'itsmFieldId': 1000111001,
'parentId': 'widget1',
'type': 'staticSelectionField',
'dataType': 'dropdown',
'displayOrder': 2,
'label': 'Member Field',
'groupMember': false,
'widgetMember': true,
'ootb': true,
'itsmRequired': true,
'arFieldName': 'Member Field',
'hide': false,
'required': false,
'editable': true,
'hideLabel': false,
availability: 0,
'options': [
{
'index': 0,
'name': 'Option_1',
'label': 'Option 1'
},
{
'index': 1,
'name': 'Option_2',
'label': 'Option 2'
}
],
'accessible': true
}
],
'accessible': true
};
var availableFieldsList = [
{
"id": "field2",
"name": "company",
"itsmFieldId": 1000003299,
"type": "dynamicSelectionField",
"dataType": "menu",
"displayOrder": 1,
"label": "Field 2",
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": true,
"arFieldName": "Field 2",
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"menu": "menu-name",
"accessible": true,
availability: 0
},
{
"id": "widget2",
"name": "customerEmail",
"type": "emailField",
"dataType": "widget",
"displayOrder": 1,
"groupMember": false,
"widgetMember": false,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": false,
"hideLabel": false,
availability: 0,
"members": [
{
"id": "member2",
"name": "customerInternetEmail",
"itsmFieldId": 1000000048,
"parentId": "widget2",
"displayOrder": 0,
"groupMember": false,
"widgetMember": true,
"ootb": true,
"itsmRequired": false,
"hide": false,
"required": false,
"editable": true,
"hideLabel": false,
"accessible": true
}
],
"accessible": true
},
widgetField.members[0]
];
var panel = {
id: 'panel1',
name: 'testPanel',
type: 'simplePanel',
fields: [regularField, widgetField]
},
panel2 = {
id: 'panel1',
name: 'testPanel',
type: 'simplePanel',
fields: []
};
var screen = {
id: 'screen1',
name: 'customScreen',
datasource: 'workorder',
panels: [panel, panel2]
};
var appConfig = {
id: "test-app",
tenantId: "000000000000001",
name: "Galileo",
version: "1.0",
screens: [screen]
};
describe('CustomAreaEditorController', function () {
var $controller, $rootScope, $scope, $httpBackend, $q, events, screenConfigurationModel,
layoutConfigurationModel, configurationModel, metadataModel, parentScreen;
function initController() {
$controller('CustomAreaEditorController', {
$scope: $scope, $modalInstance: {}, customArea: parentScreen.panels[0], allPanels: parentScreen.panels
});
$httpBackend.flush();
$scope.$digest();
}
beforeEach(module('myitsmApp', 'adminModule'));
beforeEach(inject(function (_$q_, _$controller_, _$rootScope_, _$httpBackend_, _configurationModel_,
_screenConfigurationModel_, _layoutConfigurationModel_, _events_, _metadataModel_) {
$controller = _$controller_;
$rootScope = _$rootScope_;
$httpBackend = _$httpBackend_;
screenConfigurationModel = _screenConfigurationModel_;
layoutConfigurationModel = _layoutConfigurationModel_;
configurationModel = _configurationModel_;
$q = _$q_;
events = _events_;
metadataModel = _metadataModel_;
$scope = $rootScope.$new();
var getLocale = function () {
return readJSON('scripts/app/i18n/resources-locale_en.json');
};
spyOn(configurationModel, 'isServerApplicationEnabled').and.returnValue(true);
$httpBackend.whenGET(/^scripts\/app\/i18n\/resources-locale_en.*$/).respond(200, getLocale());
$httpBackend.whenGET('/smartit/rest/serverstates').respond(200, 1);
$httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200, {});
$httpBackend.whenGET('views/dashboard/index.html').respond(200);
$httpBackend.whenGET('/smartit/rest/v2/metadata?type=global').respond(200, readJSON('mocks/metadata-global.json'));
$httpBackend.whenGET('/smartit/rest/v2/customization/application/search?name=Galileo&phase=2&fromConfig=true')
.respond(200, appConfig);
$httpBackend.whenGET(/smartit\/rest\/v2\/customization\/available\/accelerators/)
.respond(200, {items: {}});
$httpBackend.whenGET(/smartit\/rest\/v2\/customization\/field\/available\/search/)
.respond(200, availableFieldsList);
$httpBackend.whenGET(/smartit\/rest\/v3\/action\/search/)
.respond(200, [
{
"items": [
{
"actionOrder": "alphabetical",
"resourceType": "incident",
"actionList": []
}
],
"numMatch": 1,
"dataSourceName": "Action"
}
]);
$httpBackend.whenGET('/smartit/rest/v2/metadata?type=workorder')
.respond(200, readJSON('mocks/workorder-metadata.json'));
$httpBackend.whenGET(/smartit\/rest\/customization\/field\/search/)
.respond(200, []);
screenConfigurationModel.loadConfiguration();
$httpBackend.flush();
parentScreen = screenConfigurationModel.screenList[0];
spyOn(screenConfigurationModel, 'isV2CompatibleScreen').and.returnValue(true);
spyOn(ScreenConfigurationVO.prototype, 'isV2Compatible').and.returnValue(true);
}));
it('should exist', function () {
var CustomAreaEditorController = $controller('CustomAreaEditorController', {
$scope: $scope, $modalInstance: {}, customArea: parentScreen.panels[0], allPanels: []
});
expect(CustomAreaEditorController).toBeDefined();
});
it('should initialize properly for v2 compatible screens', function () {
spyOn(screenConfigurationModel, 'getAccelerators').and.callThrough();
spyOn(screenConfigurationModel, 'loadActionsNew').and.callThrough();
spyOn(screenConfigurationModel, 'loadFields').and.callThrough();
spyOn(metadataModel, 'getMetadataByType').and.callThrough();
spyOn(PanelVO.prototype, 'initFields').and.callThrough();
initController();
expect($scope.customArea).toEqual(jasmine.objectContaining(parentScreen.panels[0]));
expect($scope.screenName).toEqual(parentScreen.name);
expect($scope.allPanels).toEqual(jasmine.arrayContaining(parentScreen.panels));
expect($scope.customArea.addFieldAllowed).toEqual(true);
expect($scope.availableFields.length).toEqual(3);
expect(screenConfigurationModel.getAccelerators).toHaveBeenCalled();
expect(screenConfigurationModel.loadActionsNew).toHaveBeenCalled();
expect(screenConfigurationModel.loadFields).toHaveBeenCalled();
expect(metadataModel.getMetadataByType).toHaveBeenCalled();
expect(PanelVO.prototype.initFields).toHaveBeenCalled();
});
it('should add field to the panel', function () {
initController();
var availableField = $scope.availableFields[0];
$scope.onAddFieldClick(availableField);
expect(availableField.isNewField).toEqual(true);
expect($scope.customArea.fields.length).toEqual(3);
expect($scope.customArea.addedFields.length).toEqual(1);
});
it('should toggle selected field expanded state', function () {
initController();
var selectedField = $scope.customArea.fields[0],
initialExpandedState = selectedField.expanded;
$scope.onExpandFieldClick(selectedField);
expect(selectedField.expanded).toEqual(!initialExpandedState);
});
it('should remove field from the panel', function () {
initController();
var selectedField = $scope.customArea.fields[0];
expect($scope.customArea.fields.length).toEqual(2);
expect($scope.customArea.removedFields.length).toEqual(0);
expect($scope.availableFields.length).toEqual(3);
$scope.onRemoveFieldClick(selectedField);
expect($scope.customArea.fields.length).toEqual(1);
expect($scope.customArea.removedFields.length).toEqual(1);
expect($scope.availableFields.length).toEqual(4);
});
it('should create group field and add it to the panel', function () {
initController();
expect($scope.customArea.fields.length).toEqual(2);
spyOn(PanelVO.prototype, 'addField').and.callThrough();
$scope.onCreateGroup();
expect(PanelVO.prototype.addField).toHaveBeenCalledWith(jasmine.objectContaining({
type: 'groupField',
dataType: 'group',
editable: true,
name: 'Customization Group',
label: 'Customization Group'
}));
expect($scope.customArea.fields.length).toEqual(3);
});
});