mirror of
https://github.com/nasa/openmct.git
synced 2025-06-26 19:12:02 +00:00
Compare commits
8 Commits
status-api
...
create-new
Author | SHA1 | Date | |
---|---|---|---|
a53a669154 | |||
0602613b6e | |||
7620432388 | |||
fc8663c049 | |||
adfe30a891 | |||
5218e350c3 | |||
88615e92d2 | |||
12477a220b |
@ -33,6 +33,7 @@ define([
|
|||||||
"./src/actions/SaveAndStopEditingAction",
|
"./src/actions/SaveAndStopEditingAction",
|
||||||
"./src/actions/SaveAsAction",
|
"./src/actions/SaveAsAction",
|
||||||
"./src/actions/CancelAction",
|
"./src/actions/CancelAction",
|
||||||
|
"./src/actions/CreateNewFolderAction",
|
||||||
"./src/policies/EditActionPolicy",
|
"./src/policies/EditActionPolicy",
|
||||||
"./src/policies/EditPersistableObjectsPolicy",
|
"./src/policies/EditPersistableObjectsPolicy",
|
||||||
"./src/policies/EditableLinkPolicy",
|
"./src/policies/EditableLinkPolicy",
|
||||||
@ -71,6 +72,7 @@ define([
|
|||||||
SaveAndStopEditingAction,
|
SaveAndStopEditingAction,
|
||||||
SaveAsAction,
|
SaveAsAction,
|
||||||
CancelAction,
|
CancelAction,
|
||||||
|
CreateNewFolderAction,
|
||||||
EditActionPolicy,
|
EditActionPolicy,
|
||||||
EditPersistableObjectsPolicy,
|
EditPersistableObjectsPolicy,
|
||||||
EditableLinkPolicy,
|
EditableLinkPolicy,
|
||||||
@ -145,7 +147,10 @@ define([
|
|||||||
"depends": [
|
"depends": [
|
||||||
"$scope",
|
"$scope",
|
||||||
"$timeout",
|
"$timeout",
|
||||||
"objectService"
|
"objectService",
|
||||||
|
"typeService",
|
||||||
|
"policyService",
|
||||||
|
"instantiate"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -242,6 +247,14 @@ define([
|
|||||||
"cssClass": "icon-x no-label",
|
"cssClass": "icon-x no-label",
|
||||||
"description": "Discard changes made to these objects.",
|
"description": "Discard changes made to these objects.",
|
||||||
"depends": []
|
"depends": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "create-new-folder",
|
||||||
|
"implementation": CreateNewFolderAction,
|
||||||
|
"description": "Creates a new folder.",
|
||||||
|
"depends": [
|
||||||
|
"typeService"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"policies": [
|
"policies": [
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
<!--span
|
||||||
|
Open MCT, Copyright (c) 2014-2018, United States Government
|
||||||
|
as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
Administration. All rights reserved.
|
||||||
|
|
||||||
|
Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
Open MCT includes source code licensed under additional open source
|
||||||
|
licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
this source code distribution or the Licensing information page available
|
||||||
|
at runtime from the About dialog for additional information.
|
||||||
|
-->
|
||||||
|
<div name="newFolder" ng-controller="LocatorController">
|
||||||
|
<div ng-if="!createNewFolder">
|
||||||
|
<a class="s-button icon-folder-new" ng-click="createNewFolderClickHandler()" >
|
||||||
|
<span class="title-label">New Folder</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div ng-if="createNewFolder">
|
||||||
|
<span><input type="text" ng-model="newFolderName" name="newFolderName"></span>
|
||||||
|
<a class="s-button" ng-click="createClickHandler()">Create</a>
|
||||||
|
<a class="s-button icon-x" ng-click="cancelClickHandler()"></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
Open MCT, Copyright (c) 2014-2018, United States Government
|
Open MCT, Copyright (c) 2014-2017, United States Government
|
||||||
as represented by the Administrator of the National Aeronautics and Space
|
as represented by the Administrator of the National Aeronautics and Space
|
||||||
Administration. All rights reserved.
|
Administration. All rights reserved.
|
||||||
|
|
||||||
@ -26,4 +26,22 @@
|
|||||||
ng-model="treeModel">
|
ng-model="treeModel">
|
||||||
</mct-representation>
|
</mct-representation>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Create New Folder Action -->
|
||||||
|
<div class="newFolderCreation" style="margin-top:10px; position:absolute; left:0px;">
|
||||||
|
|
||||||
|
<!-- New folder button, triggers create new folder action. -->
|
||||||
|
<div ng-show="!newFolderCreationTriggered">
|
||||||
|
<a class="s-button icon-folder-new" ng-class="{disabled: !validParent()}" ng-click="newFolderButtonClickHandler()">
|
||||||
|
<span class="text-label">New Folder</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Get folder name -->
|
||||||
|
<div ng-show="newFolderCreationTriggered">
|
||||||
|
<input type="text" ng-model="newFolderNameInput">
|
||||||
|
<a class="s-button" ng-class="{ disabled: !validParent() || !validFolderName() }" ng-click="newFolderCreateButtonClickHandler()">Create</a>
|
||||||
|
<a class="s-button icon-x" ng-click="newFolderCancelButtonClickHandler()"></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
89
platform/commonUI/edit/src/actions/CreateNewFolderAction.js
Normal file
89
platform/commonUI/edit/src/actions/CreateNewFolderAction.js
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2018, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
define([
|
||||||
|
|
||||||
|
],
|
||||||
|
function (
|
||||||
|
|
||||||
|
) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The CreateNewFolderAction; action is triggered by the new folder button in the locator.
|
||||||
|
*
|
||||||
|
* @constructor
|
||||||
|
* @implements {Action}
|
||||||
|
* @memberof platform/commonUI/edit
|
||||||
|
*/
|
||||||
|
function CreateNewFolderAction(
|
||||||
|
typeService,
|
||||||
|
context
|
||||||
|
) {
|
||||||
|
this.parent = (context || {}).domainObject;
|
||||||
|
this.typeService = typeService;
|
||||||
|
this.type = typeService.getType('folder');
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateNewFolderAction.prototype.perform = function (folderName) {
|
||||||
|
var parent = this.parent,
|
||||||
|
typeService = this.typeService,
|
||||||
|
newModel = this.type.getInitialModel(),
|
||||||
|
folderType = typeService.getType('folder');
|
||||||
|
|
||||||
|
newModel.type = folderType.getKey();
|
||||||
|
newModel.name = folderName;
|
||||||
|
|
||||||
|
function instantiateObject() {
|
||||||
|
var newObject = parent.useCapability('instantiation', newModel);
|
||||||
|
newObject.useCapability('mutation', function () {
|
||||||
|
newModel.location = parent.getId();
|
||||||
|
});
|
||||||
|
return addToParentAndReturn(newObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addToParentAndReturn(newObject) {
|
||||||
|
return parent.getCapability('composition').add(newObject)
|
||||||
|
.then(function () {
|
||||||
|
return newObject;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return instantiateObject(newModel, parent);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this action is applicable in a given context.
|
||||||
|
* This will ensure that a domain object is present in the context,
|
||||||
|
* and that this domain object is in Edit mode.
|
||||||
|
* @returns true if applicable
|
||||||
|
*/
|
||||||
|
CreateNewFolderAction.appliesTo = function (context) {
|
||||||
|
var parent = (context || {}).domainObject;
|
||||||
|
return parent && parent.hasCapability('editor');
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
return CreateNewFolderAction;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Open MCT, Copyright (c) 2014-2018, United States Government
|
* Open MCT, Copyright (c) 2014-2017, United States Government
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
* Administration. All rights reserved.
|
* Administration. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -31,7 +31,7 @@ define(
|
|||||||
* @memberof platform/commonUI/browse
|
* @memberof platform/commonUI/browse
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
function LocatorController($scope, $timeout, objectService) {
|
function LocatorController($scope, $timeout, objectService, typeService, policyService, instantiate) {
|
||||||
// Populate values needed by the locator control. These are:
|
// Populate values needed by the locator control. These are:
|
||||||
// * rootObject: The top-level object, since we want to show
|
// * rootObject: The top-level object, since we want to show
|
||||||
// the full tree
|
// the full tree
|
||||||
@ -81,11 +81,64 @@ define(
|
|||||||
!!$scope.treeModel.selectedObject
|
!!$scope.treeModel.selectedObject
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if create new folder is a valid action for selected object
|
||||||
|
$scope.validParent = function () {
|
||||||
|
if ($scope.treeModel.selectedObject) {
|
||||||
|
return policyService.allow(
|
||||||
|
"composition",
|
||||||
|
$scope.treeModel.selectedObject,
|
||||||
|
instantiate(typeService.getType('folder').getInitialModel())
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$scope.newFolderButtonClickHandler = function () {
|
||||||
|
$scope.newFolderCreationTriggered = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.newFolderCancelButtonClickHandler = function () {
|
||||||
|
$scope.newFolderCreationTriggered = false;
|
||||||
|
resetNewFolderNameInput();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get expected input pattern for folder name
|
||||||
|
var folderNamePattern = new RegExp(
|
||||||
|
typeService.getType('folder').getProperties()[0].propertyDefinition.pattern
|
||||||
|
);
|
||||||
|
|
||||||
|
// Validate folder name externally to avoid affecting overall form validation
|
||||||
|
$scope.validFolderName = function () {
|
||||||
|
return $scope.newFolderNameInput && folderNamePattern.test($scope.newFolderNameInput);
|
||||||
|
};
|
||||||
|
|
||||||
|
function selectAndScrollToNewFolder(newFolder) {
|
||||||
|
$scope.treeModel.selectedObject = newFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetNewFolderNameInput() {
|
||||||
|
$scope.newFolderNameInput = "Unnamed Folder";
|
||||||
|
$scope.newFolderCreationTriggered = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Create new folder, update selection to new folder and reset new folder button
|
||||||
|
$scope.newFolderCreateButtonClickHandler = function () {
|
||||||
|
var createNewFolderAction = $scope.treeModel.selectedObject.getCapability('action').getActions('create-new-folder')[0];
|
||||||
|
createNewFolderAction.perform($scope.newFolderNameInput)
|
||||||
|
.then(selectAndScrollToNewFolder)
|
||||||
|
.then(resetNewFolderNameInput);
|
||||||
|
};
|
||||||
|
|
||||||
// Initial state for the tree's model
|
// Initial state for the tree's model
|
||||||
$scope.treeModel =
|
$scope.treeModel = { selectedObject: $scope.ngModel[$scope.field] };
|
||||||
{ selectedObject: $scope.ngModel[$scope.field] };
|
|
||||||
|
//Initial values for new folder action
|
||||||
|
$scope.newFolderNameInput = "Unnamed Folder";
|
||||||
|
$scope.newFolderCreationTriggered = false;
|
||||||
|
|
||||||
// Watch for changes from the tree
|
// Watch for changes from the tree
|
||||||
$scope.$watch("treeModel.selectedObject", setLocatingObject);
|
$scope.$watch("treeModel.selectedObject", setLocatingObject);
|
||||||
|
117
platform/commonUI/edit/test/actions/CreateNewFolderActionSpec.js
Normal file
117
platform/commonUI/edit/test/actions/CreateNewFolderActionSpec.js
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2018, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
define(
|
||||||
|
['../../src/actions/CreateNewFolderAction'],
|
||||||
|
function (CreateNewFolderAction) {
|
||||||
|
|
||||||
|
describe("The Create New Folder Action", function () {
|
||||||
|
var mockDomainObject,
|
||||||
|
mockNewObject,
|
||||||
|
mockType,
|
||||||
|
testModel,
|
||||||
|
mockFolderName,
|
||||||
|
mockTypeService,
|
||||||
|
mockActionContext,
|
||||||
|
mockCompositionCapability,
|
||||||
|
action;
|
||||||
|
function mockPromise(value) {
|
||||||
|
return (value && value.then) ? value : {
|
||||||
|
then: function (callback) {
|
||||||
|
return mockPromise(callback(value));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
beforeEach(function () {
|
||||||
|
mockDomainObject = jasmine.createSpyObj(
|
||||||
|
"domainObject",
|
||||||
|
[
|
||||||
|
"getCapability",
|
||||||
|
"useCapability",
|
||||||
|
"hasCapability",
|
||||||
|
"getId"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
mockNewObject = jasmine.createSpyObj(
|
||||||
|
"newObject",
|
||||||
|
[
|
||||||
|
"getCapability",
|
||||||
|
"useCapability",
|
||||||
|
"hasCapability",
|
||||||
|
"getId"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
mockType = jasmine.createSpyObj(
|
||||||
|
"type",
|
||||||
|
[
|
||||||
|
"getKey",
|
||||||
|
"getInitialModel"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
testModel = {
|
||||||
|
type: mockType,
|
||||||
|
name: "Name",
|
||||||
|
location: "someLocation"
|
||||||
|
};
|
||||||
|
mockFolderName = "Name";
|
||||||
|
mockTypeService = jasmine.createSpyObj(
|
||||||
|
"typeService",
|
||||||
|
["getType"]
|
||||||
|
);
|
||||||
|
mockActionContext = { domainObject: mockDomainObject };
|
||||||
|
mockCompositionCapability = jasmine.createSpyObj(
|
||||||
|
"composition",
|
||||||
|
["add"]
|
||||||
|
);
|
||||||
|
mockType.getKey.and.returnValue("test");
|
||||||
|
mockType.getInitialModel.and.returnValue(testModel);
|
||||||
|
mockDomainObject.getCapability.and.callFake(function (capability) {
|
||||||
|
return (capability === 'composition') && mockCompositionCapability;
|
||||||
|
});
|
||||||
|
mockDomainObject.hasCapability.and.returnValue(true);
|
||||||
|
mockCompositionCapability.add.and.returnValue(mockPromise(true));
|
||||||
|
mockDomainObject.useCapability.and.callFake(function (capability) {
|
||||||
|
return (capability === 'instantiation') && mockNewObject;
|
||||||
|
});
|
||||||
|
mockTypeService.getType.and.returnValue(mockType);
|
||||||
|
mockDomainObject.getId.and.returnValue("id");
|
||||||
|
action = new CreateNewFolderAction(mockTypeService, mockActionContext);
|
||||||
|
});
|
||||||
|
it("uses the instantiation capability when performed", function () {
|
||||||
|
action.perform(mockFolderName);
|
||||||
|
expect(mockDomainObject.useCapability)
|
||||||
|
.toHaveBeenCalledWith("instantiation", jasmine.any(Object));
|
||||||
|
});
|
||||||
|
it("adds new objects to the parent's composition", function () {
|
||||||
|
action.perform(mockFolderName);
|
||||||
|
expect(mockDomainObject.getCapability).toHaveBeenCalledWith("composition");
|
||||||
|
expect(mockCompositionCapability.add).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
it("is only applicable when a domain object is in context", function () {
|
||||||
|
expect(CreateNewFolderAction.appliesTo(mockActionContext)).toBeTruthy();
|
||||||
|
expect(CreateNewFolderAction.appliesTo({})).toBeFalsy();
|
||||||
|
expect(mockDomainObject.hasCapability).toHaveBeenCalledWith('editor');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
@ -31,26 +31,63 @@ define(
|
|||||||
var mockScope,
|
var mockScope,
|
||||||
mockTimeout,
|
mockTimeout,
|
||||||
mockDomainObject,
|
mockDomainObject,
|
||||||
|
mockFolderObject,
|
||||||
mockRootObject,
|
mockRootObject,
|
||||||
mockContext,
|
mockContext,
|
||||||
|
mockActions,
|
||||||
mockObjectService,
|
mockObjectService,
|
||||||
|
mockTypeService,
|
||||||
|
mockType,
|
||||||
|
mockInstantiate,
|
||||||
|
mockPolicyService,
|
||||||
getObjectsPromise,
|
getObjectsPromise,
|
||||||
|
testModel,
|
||||||
|
capabilities,
|
||||||
|
mockCreateNewFolderAction,
|
||||||
|
mockActionCapability,
|
||||||
|
mockProperties,
|
||||||
controller;
|
controller;
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
mockScope = jasmine.createSpyObj(
|
mockScope = jasmine.createSpyObj(
|
||||||
"$scope",
|
"$scope",
|
||||||
["$watch"]
|
["$watch", "validParent"]
|
||||||
);
|
);
|
||||||
mockTimeout = jasmine.createSpy("$timeout");
|
mockTimeout = jasmine.createSpy("$timeout");
|
||||||
|
mockInstantiate = jasmine.createSpy("instantiate");
|
||||||
mockDomainObject = jasmine.createSpyObj(
|
mockDomainObject = jasmine.createSpyObj(
|
||||||
"domainObject",
|
"domainObject",
|
||||||
["getCapability"]
|
[
|
||||||
|
"useCapability",
|
||||||
|
"getModel",
|
||||||
|
"getCapability"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
mockFolderObject = jasmine.createSpyObj(
|
||||||
|
"folderObject",
|
||||||
|
[
|
||||||
|
"useCapability",
|
||||||
|
"getModel",
|
||||||
|
"getCapability"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
mockCreateNewFolderAction = jasmine.createSpyObj(
|
||||||
|
"createNewFolderAction",
|
||||||
|
[
|
||||||
|
"perform"
|
||||||
|
]
|
||||||
);
|
);
|
||||||
mockRootObject = jasmine.createSpyObj(
|
mockRootObject = jasmine.createSpyObj(
|
||||||
"rootObject",
|
"rootObject",
|
||||||
["getCapability"]
|
["getCapability"]
|
||||||
);
|
);
|
||||||
|
mockActionCapability = jasmine.createSpyObj(
|
||||||
|
"actionCapability",
|
||||||
|
[
|
||||||
|
"getActions",
|
||||||
|
"perform"
|
||||||
|
]
|
||||||
|
);
|
||||||
mockContext = jasmine.createSpyObj(
|
mockContext = jasmine.createSpyObj(
|
||||||
"context",
|
"context",
|
||||||
["getRoot"]
|
["getRoot"]
|
||||||
@ -59,25 +96,70 @@ define(
|
|||||||
"objectService",
|
"objectService",
|
||||||
["getObjects"]
|
["getObjects"]
|
||||||
);
|
);
|
||||||
|
mockTypeService = jasmine.createSpyObj(
|
||||||
|
"typeService",
|
||||||
|
["getType"]
|
||||||
|
);
|
||||||
|
mockPolicyService = jasmine.createSpyObj(
|
||||||
|
"policyService",
|
||||||
|
["allow"]
|
||||||
|
);
|
||||||
getObjectsPromise = jasmine.createSpyObj(
|
getObjectsPromise = jasmine.createSpyObj(
|
||||||
"promise",
|
"promise",
|
||||||
["then"]
|
["then"]
|
||||||
);
|
);
|
||||||
|
mockType = jasmine.createSpyObj(
|
||||||
mockDomainObject.getCapability.and.returnValue(mockContext);
|
"type",
|
||||||
|
[
|
||||||
|
"getKey",
|
||||||
|
"getProperties",
|
||||||
|
"getInitialModel"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
testModel = { someKey: "some value" };
|
||||||
|
mockProperties = ['a', 'b', 'c'].map(function (k) {
|
||||||
|
var mockProperty = jasmine.createSpyObj(
|
||||||
|
'property-' + k,
|
||||||
|
['propertyDefinition']
|
||||||
|
);
|
||||||
|
mockProperty.propertyDefinition = {
|
||||||
|
key: "name",
|
||||||
|
pattern: "test"
|
||||||
|
};
|
||||||
|
return mockProperty;
|
||||||
|
});
|
||||||
|
capabilities = {
|
||||||
|
"action" : mockActionCapability,
|
||||||
|
"context": mockContext
|
||||||
|
};
|
||||||
|
mockActions = [mockCreateNewFolderAction];
|
||||||
mockContext.getRoot.and.returnValue(mockRootObject);
|
mockContext.getRoot.and.returnValue(mockRootObject);
|
||||||
mockObjectService.getObjects.and.returnValue(getObjectsPromise);
|
mockObjectService.getObjects.and.returnValue(getObjectsPromise);
|
||||||
|
mockTypeService.getType.and.callFake(function (typename) {
|
||||||
|
return mockType;
|
||||||
|
});
|
||||||
|
mockInstantiate.and.returnValue(mockFolderObject);
|
||||||
|
mockType.getKey.and.returnValue("test");
|
||||||
|
mockType.getInitialModel.and.returnValue(testModel);
|
||||||
|
mockType.getProperties.and.returnValue(mockProperties);
|
||||||
|
mockDomainObject.getCapability.and.callFake(function (capability) {
|
||||||
|
return capabilities[capability];
|
||||||
|
});
|
||||||
|
mockDomainObject.useCapability.and.returnValue();
|
||||||
|
mockDomainObject.getModel.and.returnValue(testModel);
|
||||||
|
mockFolderObject.getCapability.and.returnValue(capabilities);
|
||||||
|
mockFolderObject.useCapability.and.returnValue();
|
||||||
|
mockFolderObject.getModel.and.returnValue(testModel);
|
||||||
mockScope.ngModel = {};
|
mockScope.ngModel = {};
|
||||||
mockScope.field = "someField";
|
mockScope.field = "someField";
|
||||||
|
|
||||||
controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
|
controller = new LocatorController(mockScope, mockTimeout, mockObjectService, mockTypeService, mockPolicyService, mockInstantiate);
|
||||||
});
|
});
|
||||||
describe("when context is available", function () {
|
describe("when context is available", function () {
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
mockContext.getRoot.and.returnValue(mockRootObject);
|
mockContext.getRoot.and.returnValue(mockRootObject);
|
||||||
controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
|
controller = new LocatorController(mockScope, mockTimeout, mockObjectService, mockTypeService, mockPolicyService, mockInstantiate);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("adds a treeModel to scope", function () {
|
it("adds a treeModel to scope", function () {
|
||||||
@ -145,7 +227,7 @@ define(
|
|||||||
getObjectsPromise.then.and.callFake(function (callback) {
|
getObjectsPromise.then.and.callFake(function (callback) {
|
||||||
callback({'ROOT': defaultRoot});
|
callback({'ROOT': defaultRoot});
|
||||||
});
|
});
|
||||||
controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
|
controller = new LocatorController(mockScope, mockTimeout, mockObjectService, mockTypeService, mockPolicyService, mockInstantiate);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("provides a default context where none is available", function () {
|
it("provides a default context where none is available", function () {
|
||||||
@ -169,3 +251,4 @@ define(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user