326 lines
8.7 KiB
JavaScript
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);
|
|
});
|
|
}); |