Merging in latest github master; resolved conflicts
This commit is contained in:
@@ -27,10 +27,10 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "BrowseTreeController",
|
||||
"implementation": "BrowseTreeController.js",
|
||||
"key": "PaneController",
|
||||
"implementation": "PaneController.js",
|
||||
"priority": "preferred",
|
||||
"depends": [ "$scope", "agentService" ]
|
||||
"depends": [ "$scope", "agentService","$window" ]
|
||||
},
|
||||
{
|
||||
"key": "BrowseObjectController",
|
||||
@@ -157,7 +157,7 @@
|
||||
"provides": "creationService",
|
||||
"type": "provider",
|
||||
"implementation": "creation/CreationService.js",
|
||||
"depends": [ "persistenceService", "now", "$q", "$log" ]
|
||||
"depends": [ "$q", "$log" ]
|
||||
}
|
||||
],
|
||||
"runs": [
|
||||
@@ -176,16 +176,6 @@
|
||||
"copyright": "Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/sindresorhus/screenfull.js/blob/gh-pages/license"
|
||||
},
|
||||
{
|
||||
"name": "Math.uuid.js",
|
||||
"version": "1.4",
|
||||
"description": "Unique identifer generation (code adapted.)",
|
||||
"author": "Robert Kieffer",
|
||||
"website": "https://github.com/broofa/node-uuid",
|
||||
"copyright": "Copyright (c) 2010 Robert Kieffer",
|
||||
"license": "license-mit",
|
||||
"link": "http://opensource.org/licenses/MIT"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
/*global define*/
|
||||
|
||||
|
||||
/*
|
||||
Adapted from:
|
||||
Math.uuid.js (v1.4)
|
||||
http://www.broofa.com
|
||||
mailto:robert@broofa.com
|
||||
|
||||
Copyright (c) 2010 Robert Kieffer
|
||||
Dual licensed under the MIT and GPL licenses.
|
||||
*/
|
||||
define(
|
||||
function () {
|
||||
'use strict';
|
||||
return function generateUUID() {
|
||||
var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'],
|
||||
uuid = new Array(36),
|
||||
rnd = 0,
|
||||
r,
|
||||
i,
|
||||
offset = Math.floor(Date.now()) % 0xF;
|
||||
for (i = 0; i < 36; i = i + 1) {
|
||||
if (i === 8 || i === 13 || i === 18 || i === 23) {
|
||||
uuid[i] = '-';
|
||||
} else if (i === 14) {
|
||||
uuid[i] = '4';
|
||||
} else {
|
||||
if (rnd <= 0x02) {
|
||||
rnd = 0x2000000 + Math.floor(Math.random() * 0x1000000);
|
||||
}
|
||||
r = rnd % 0xf;
|
||||
rnd = Math.floor(rnd / 16);
|
||||
uuid[i] = chars[(i === 19) ? ((r % 0x3) + 0x8) : r];
|
||||
}
|
||||
}
|
||||
return uuid.join('');
|
||||
};
|
||||
}
|
||||
);
|
||||
@@ -23,19 +23,17 @@
|
||||
editBtns = [{ cssclass: 'save',title: 'Save' },{ cssclass: 'cancel',title: 'Discard Changes', action:'cancelEditing' }];
|
||||
"></div>
|
||||
<span ng-controller="BrowseObjectController">
|
||||
<!--<a class="s-btn"
|
||||
style="opacity: 0.9; position:absolute; right: 250px; z-index: 100"
|
||||
ng-class="{ major:!editMode }"
|
||||
ng-click="editMode = !editMode">Set EditMode to {{!editMode}}</a> -->
|
||||
<div class="object-browse-bar bar l-flex">
|
||||
<div class="items-select left">
|
||||
<div class="object-browse-bar l-flex-row">
|
||||
<div class="items-select left flex-elem l-flex-row grows">
|
||||
<mct-representation key="'back-arrow'"
|
||||
mct-object="domainObject"
|
||||
class="l-back"></mct-representation>
|
||||
<mct-representation key="'object-header'" mct-object="domainObject">
|
||||
class="flex-elem l-back"></mct-representation>
|
||||
<mct-representation key="'object-header'"
|
||||
mct-object="domainObject"
|
||||
class="l-flex-row flex-elem grows object-header">
|
||||
</mct-representation>
|
||||
</div>
|
||||
<div class="btn-bar right">
|
||||
<div class="btn-bar right l-flex-row flex-elem flex-justify-end flex-fixed">
|
||||
<mct-representation key="'switcher'"
|
||||
mct-object="domainObject"
|
||||
ng-model="representation">
|
||||
@@ -49,6 +47,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="l-object-wrapper"
|
||||
ng-class="{ active:editMode, 'edit-main':editMode}">
|
||||
<div class="l-object-wrapper-inner l-flex flex-col">
|
||||
|
||||
@@ -22,45 +22,66 @@
|
||||
|
||||
<div class="abs holder-all browse-mode" ng-controller="BrowseController">
|
||||
<mct-include key="'topbar-browse'"></mct-include>
|
||||
<div class="holder browse-area s-browse-area abs browse-wrapper"
|
||||
ng-controller="BrowseTreeController as tree"
|
||||
ng-class="tree.visible() ? 'browse-showtree' : 'browse-hidetree'">
|
||||
<mct-split-pane class='contents abs' anchor='left'>
|
||||
<div class="abs holder holder-main browse-area s-browse-area browse-wrapper"
|
||||
ng-controller="PaneController as modelPaneTree"
|
||||
ng-class="modelPaneTree.visible() ? 'pane-tree-showing' : 'pane-tree-hidden'">
|
||||
<mct-split-pane class='abs contents'
|
||||
anchor='left'>
|
||||
<div class='split-pane-component treeview pane left'>
|
||||
<div class="holder abs l-mobile">
|
||||
<div class="abs holder l-flex-col holder-treeview-elements">
|
||||
<mct-representation key="'create-button'"
|
||||
mct-object="navigatedObject"
|
||||
mct-device="desktop">
|
||||
class="holder flex-elem create-btn-holder">
|
||||
</mct-representation>
|
||||
<mct-include key="'search'"
|
||||
ng-model="treeModel"
|
||||
class="holder l-flex-col flex-elem search-holder"
|
||||
ng-class="{ active: treeModel.search, grows: treeModel.search }">
|
||||
</mct-include>
|
||||
<mct-representation key="'tree'"
|
||||
mct-object="domainObject"
|
||||
parameters="tree"
|
||||
ng-model="treeModel"
|
||||
class="holder flex-elem grows vscroll tree-holder"
|
||||
ng-hide="treeModel.search">
|
||||
</mct-representation>
|
||||
<div class='holder search-holder abs'
|
||||
ng-class="{active: treeModel.search}">
|
||||
<mct-representation key="'search'"
|
||||
mct-object="domainObject"
|
||||
ng-model="treeModel">
|
||||
</mct-representation>
|
||||
</div>
|
||||
<div class='tree-holder abs mobile-tree-holder'
|
||||
ng-hide="treeModel.search">
|
||||
<mct-representation key="'tree'"
|
||||
mct-object="domainObject"
|
||||
parameters="tree"
|
||||
ng-model="treeModel">
|
||||
</mct-representation>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<mct-splitter class="mobile-hide"></mct-splitter>
|
||||
<mct-splitter class="splitter-treeview mobile-hide"></mct-splitter>
|
||||
|
||||
<div class='split-pane-component items pane right-repr'>
|
||||
<div class='holder abs l-mobile' id='content-area'>
|
||||
<mct-representation mct-object="navigatedObject"
|
||||
key="'browse-object'">
|
||||
</mct-representation>
|
||||
<div class='split-pane-component items pane primary-pane right'>
|
||||
<a class="mini-tab-icon anchor-left toggle-pane toggle-tree"
|
||||
title="{{ modelPaneTree.visible()? 'Hide' : 'Show' }} this pane"
|
||||
ng-click="modelPaneTree.toggle()"
|
||||
ng-class="{ collapsed : !modelPaneTree.visible() }"></a>
|
||||
|
||||
<div class='holder holder-object-and-inspector abs' id='content-area'
|
||||
ng-controller="PaneController as modelPaneInspect"
|
||||
ng-class="modelPaneInspect.visible() ? 'pane-inspect-showing' : 'pane-inspect-hidden'">
|
||||
|
||||
<mct-split-pane class='l-object-and-inspector contents abs' anchor='right'>
|
||||
<div class='split-pane-component t-object pane primary-pane left'>
|
||||
<mct-representation mct-object="navigatedObject"
|
||||
key="'browse-object'"
|
||||
class="abs holder holder-object">
|
||||
</mct-representation>
|
||||
</div>
|
||||
|
||||
<mct-splitter class="splitter-inspect mobile-hide flush-right edge-shdw"></mct-splitter>
|
||||
|
||||
<div class="split-pane-component t-inspect pane right mobile-hide">
|
||||
<mct-representation key="'object-inspector'"
|
||||
mct-object="domainObject"
|
||||
ng-model="treeModel">
|
||||
</mct-representation>
|
||||
<a class="mini-tab-icon anchor-right mobile-hide toggle-pane toggle-inspect"
|
||||
title="{{ modelPaneInspect.visible()? 'Hide' : 'Show' }} the Inspection pane"
|
||||
ng-click="modelPaneInspect.toggle()"
|
||||
ng-class="{ collapsed : !modelPaneInspect.visible() }"></a>
|
||||
</div>
|
||||
</mct-split-pane>
|
||||
</div>
|
||||
<div class="key-properties ui-symbol icon mobile-menu-icon desktop-hide"
|
||||
mct-device="mobile"
|
||||
ng-click="tree.toggle()">m</div>
|
||||
</div>
|
||||
</mct-split-pane>
|
||||
</div>
|
||||
|
||||
@@ -19,12 +19,12 @@
|
||||
this source code distribution or the Licensing information page available
|
||||
at runtime from the About dialog for additional information.
|
||||
-->
|
||||
<div class='object-header object-header-mobile'>
|
||||
<span class='type-icon ui-symbol'>{{type.getGlyph()}}</span>
|
||||
<!--span class='type-name mobile-important-hide'>{{type.getName()}}</span-->
|
||||
<span class="l-elem-wrapper l-flex">
|
||||
<span ng-if="parameters.mode" class='action'>{{parameters.mode}}</span>
|
||||
<span class='title-label'>{{model.name}}</span>
|
||||
<mct-representation key="'menu-arrow'" mct-object='domainObject'></mct-representation>
|
||||
</span>
|
||||
</div>
|
||||
<span class='type-icon ui-symbol flex-elem'>{{type.getGlyph()}}</span>
|
||||
<span class="l-elem-wrapper l-flex-row flex-elem grows">
|
||||
<span ng-if="parameters.mode" class='action flex-elem'>{{parameters.mode}}</span>
|
||||
<span class='title-label flex-elem flex-can-shrink'>{{model.name}}</span>
|
||||
<mct-representation
|
||||
key="'menu-arrow'"
|
||||
mct-object='domainObject'
|
||||
class="flex-elem"></mct-representation>
|
||||
</span>
|
||||
@@ -19,13 +19,12 @@
|
||||
this source code distribution or the Licensing information page available
|
||||
at runtime from the About dialog for additional information.
|
||||
-->
|
||||
<div class="menu-element wrapper" ng-controller="ClickAwayController as createController">
|
||||
<span ng-controller="ClickAwayController as createController">
|
||||
<div class="s-menu-btn major create-btn" ng-click="createController.toggle()">
|
||||
<span class="ui-symbol icon type-icon">+</span>
|
||||
<span class="title-label">Create</span>
|
||||
</div>
|
||||
<div class="menu super-menu" ng-show="createController.isActive()">
|
||||
<mct-representation mct-object="domainObject" key="'create-menu'">
|
||||
</mct-representation>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
@@ -26,14 +26,8 @@
|
||||
<div class='ui-symbol profile' title='Shared'>O</div>
|
||||
<mct-representation class="desktop-hide" key="'info-button'" mct-object="domainObject"></mct-representation>
|
||||
</div>
|
||||
<div class='item-main abs'>
|
||||
<div class='ui-symbol icon lg item-type'>
|
||||
{{type.getGlyph()}}
|
||||
<span
|
||||
class="ui-symbol l-icon-link" title="This object is a link"
|
||||
ng-show="location.isLink()"
|
||||
></span>
|
||||
</div>
|
||||
<div class='item-main abs lg'>
|
||||
<span class="t-item-icon" ng-class="{ 'l-icon-link':location.isLink() }">{{type.getGlyph()}}</span>
|
||||
<div class='ui-symbol abs item-open'>}</div>
|
||||
</div>
|
||||
<div class='bottom-bar bar abs'>
|
||||
|
||||
@@ -170,7 +170,6 @@ define(
|
||||
$scope.$on("$destroy", function () {
|
||||
navigationService.removeListener(setNavigation);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
return BrowseController;
|
||||
|
||||
@@ -33,10 +33,12 @@ define(
|
||||
* @constructor
|
||||
* @memberof platform/commonUI/browse
|
||||
*/
|
||||
function BrowseTreeController($scope, agentService) {
|
||||
function PaneController($scope, agentService, $window) {
|
||||
var self = this;
|
||||
this.agentService = agentService;
|
||||
this.state = true;
|
||||
|
||||
// Fast and cheap: if this has been opened in a new window, hide panes by default
|
||||
this.state = !$window.opener;
|
||||
|
||||
/**
|
||||
* Callback to invoke when any selection occurs in the tree.
|
||||
@@ -44,7 +46,7 @@ define(
|
||||
* to the tree representation.
|
||||
*
|
||||
* @property {Function} callback
|
||||
* @memberof platform/commonUI/browse.BrowseTreeController#
|
||||
* @memberof platform/commonUI/browse.PaneController#
|
||||
*/
|
||||
this.callback = function () {
|
||||
// Note that, since this is a callback to pass, this is not
|
||||
@@ -59,20 +61,20 @@ define(
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle the visibility of the tree.
|
||||
* Toggle the visibility of the pane.
|
||||
*/
|
||||
BrowseTreeController.prototype.toggle = function () {
|
||||
PaneController.prototype.toggle = function () {
|
||||
this.state = !this.state;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the desired visibility state of the tree.
|
||||
* Get the desired visibility state of the pane.
|
||||
* @returns {boolean} true when visible
|
||||
*/
|
||||
BrowseTreeController.prototype.visible = function () {
|
||||
PaneController.prototype.visible = function () {
|
||||
return this.state;
|
||||
};
|
||||
|
||||
return BrowseTreeController;
|
||||
return PaneController;
|
||||
}
|
||||
);
|
||||
@@ -25,8 +25,8 @@
|
||||
* Module defining CreateService. Created by vwoeltje on 11/10/14.
|
||||
*/
|
||||
define(
|
||||
["../../lib/uuid"],
|
||||
function (uuid) {
|
||||
[],
|
||||
function () {
|
||||
"use strict";
|
||||
|
||||
var NON_PERSISTENT_WARNING =
|
||||
@@ -42,11 +42,9 @@ define(
|
||||
* @memberof platform/commonUI/browse
|
||||
* @constructor
|
||||
*/
|
||||
function CreationService(persistenceService, now, $q, $log) {
|
||||
this.persistenceService = persistenceService;
|
||||
function CreationService($q, $log) {
|
||||
this.$q = $q;
|
||||
this.$log = $log;
|
||||
this.now = now;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -70,26 +68,17 @@ define(
|
||||
*/
|
||||
CreationService.prototype.createObject = function (model, parent) {
|
||||
var persistence = parent.getCapability("persistence"),
|
||||
newObject = parent.useCapability("instantiation", model),
|
||||
newObjectPersistence = newObject.getCapability("persistence"),
|
||||
self = this;
|
||||
|
||||
// Persist the new domain object's model; it will be fully
|
||||
// constituted as a domain object when loaded back, as all
|
||||
// domain object models are.
|
||||
function doPersist(space, id, model) {
|
||||
return self.persistenceService.createObject(
|
||||
space,
|
||||
id,
|
||||
model
|
||||
).then(function () { return id; });
|
||||
}
|
||||
|
||||
// Add the newly-created object's id to the parent's
|
||||
// composition, so that it will subsequently appear
|
||||
// as a child contained by that parent.
|
||||
function addToComposition(id, parent, parentPersistence) {
|
||||
function addToComposition() {
|
||||
var compositionCapability = parent.getCapability('composition'),
|
||||
addResult = compositionCapability &&
|
||||
compositionCapability.add(id);
|
||||
compositionCapability.add(newObject);
|
||||
|
||||
return self.$q.when(addResult).then(function (result) {
|
||||
if (!result) {
|
||||
@@ -97,7 +86,7 @@ define(
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return parentPersistence.persist().then(function () {
|
||||
return persistence.persist().then(function () {
|
||||
return result;
|
||||
});
|
||||
});
|
||||
@@ -105,21 +94,13 @@ define(
|
||||
|
||||
// We need the parent's persistence capability to determine
|
||||
// what space to create the new object's model in.
|
||||
if (!persistence) {
|
||||
if (!persistence || !newObjectPersistence) {
|
||||
self.$log.warn(NON_PERSISTENT_WARNING);
|
||||
return self.$q.reject(new Error(NON_PERSISTENT_WARNING));
|
||||
}
|
||||
|
||||
// We create a new domain object in three sequential steps:
|
||||
// 1. Get a new UUID for the object
|
||||
// 2. Create a model with that ID in the persistence space
|
||||
// 3. Add that ID to
|
||||
return self.$q.when(uuid()).then(function (id) {
|
||||
model.persisted = self.now();
|
||||
return doPersist(persistence.getSpace(), id, model);
|
||||
}).then(function (id) {
|
||||
return addToComposition(id, parent, persistence);
|
||||
});
|
||||
// Persist the new object, then add it to composition.
|
||||
return newObjectPersistence.persist().then(addToComposition);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -22,22 +22,24 @@
|
||||
/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
|
||||
|
||||
define(
|
||||
["../src/BrowseTreeController"],
|
||||
function (BrowseTreeController) {
|
||||
["../src/PaneController"],
|
||||
function (PaneController) {
|
||||
'use strict';
|
||||
|
||||
describe("The BrowseTreeController", function () {
|
||||
describe("The PaneController", function () {
|
||||
var mockScope,
|
||||
mockAgentService,
|
||||
mockDomainObjects,
|
||||
mockWindow,
|
||||
controller;
|
||||
|
||||
// We want to reinstantiate for each test case
|
||||
// because device state can influence constructor-time behavior
|
||||
function instantiateController() {
|
||||
return new BrowseTreeController(
|
||||
return new PaneController(
|
||||
mockScope,
|
||||
mockAgentService
|
||||
mockAgentService,
|
||||
mockWindow
|
||||
);
|
||||
}
|
||||
|
||||
@@ -58,6 +60,7 @@ define(
|
||||
"agentService",
|
||||
[ "isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape" ]
|
||||
);
|
||||
mockWindow = jasmine.createSpyObj("$window", ["open"]);
|
||||
});
|
||||
|
||||
it("is initially visible", function () {
|
||||
@@ -30,9 +30,7 @@ define(
|
||||
"use strict";
|
||||
|
||||
describe("The creation service", function () {
|
||||
var mockPersistenceService,
|
||||
mockNow,
|
||||
mockQ,
|
||||
var mockQ,
|
||||
mockLog,
|
||||
mockParentObject,
|
||||
mockNewObject,
|
||||
@@ -40,7 +38,9 @@ define(
|
||||
mockPersistenceCapability,
|
||||
mockCompositionCapability,
|
||||
mockContextCapability,
|
||||
mockCreationCapability,
|
||||
mockCapabilities,
|
||||
mockNewPersistenceCapability,
|
||||
creationService;
|
||||
|
||||
function mockPromise(value) {
|
||||
@@ -60,11 +60,6 @@ define(
|
||||
}
|
||||
|
||||
beforeEach(function () {
|
||||
mockPersistenceService = jasmine.createSpyObj(
|
||||
"persistenceService",
|
||||
[ "createObject" ]
|
||||
);
|
||||
mockNow = jasmine.createSpy('now');
|
||||
mockQ = { when: mockPromise, reject: mockReject };
|
||||
mockLog = jasmine.createSpyObj(
|
||||
"$log",
|
||||
@@ -76,7 +71,7 @@ define(
|
||||
);
|
||||
mockNewObject = jasmine.createSpyObj(
|
||||
"newObject",
|
||||
[ "getId" ]
|
||||
[ "getId", "getCapability", "useCapability" ]
|
||||
);
|
||||
mockMutationCapability = jasmine.createSpyObj(
|
||||
"mutation",
|
||||
@@ -94,19 +89,22 @@ define(
|
||||
"context",
|
||||
["getPath"]
|
||||
);
|
||||
mockCreationCapability = jasmine.createSpyObj(
|
||||
"creation",
|
||||
["instantiate", "invoke"]
|
||||
);
|
||||
mockCapabilities = {
|
||||
mutation: mockMutationCapability,
|
||||
persistence: mockPersistenceCapability,
|
||||
composition: mockCompositionCapability,
|
||||
context: mockContextCapability
|
||||
context: mockContextCapability,
|
||||
instantiation: mockCreationCapability
|
||||
};
|
||||
|
||||
mockPersistenceService.createObject.andReturn(
|
||||
mockPromise(true)
|
||||
mockNewPersistenceCapability = jasmine.createSpyObj(
|
||||
"new-persistence",
|
||||
[ "persist", "getSpace" ]
|
||||
);
|
||||
|
||||
mockNow.andReturn(12321);
|
||||
|
||||
mockParentObject.getCapability.andCallFake(function (key) {
|
||||
return mockCapabilities[key];
|
||||
});
|
||||
@@ -115,9 +113,16 @@ define(
|
||||
});
|
||||
mockParentObject.getId.andReturn('parentId');
|
||||
|
||||
mockPersistenceCapability.persist.andReturn(
|
||||
mockPromise(true)
|
||||
);
|
||||
mockNewObject.getId.andReturn('newId');
|
||||
mockNewObject.getCapability.andCallFake(function (c) {
|
||||
return c === 'persistence' ?
|
||||
mockNewPersistenceCapability : undefined;
|
||||
});
|
||||
|
||||
mockPersistenceCapability.persist
|
||||
.andReturn(mockPromise(true));
|
||||
mockNewPersistenceCapability.persist
|
||||
.andReturn(mockPromise(true));
|
||||
|
||||
mockMutationCapability.invoke.andReturn(mockPromise(true));
|
||||
mockPersistenceCapability.getSpace.andReturn("testSpace");
|
||||
@@ -125,10 +130,12 @@ define(
|
||||
mockPromise([mockNewObject])
|
||||
);
|
||||
mockCompositionCapability.add.andReturn(mockPromise(true));
|
||||
mockCreationCapability.instantiate.andReturn(mockNewObject);
|
||||
mockCreationCapability.invoke.andCallFake(function (model) {
|
||||
return mockCreationCapability.instantiate(model);
|
||||
});
|
||||
|
||||
creationService = new CreationService(
|
||||
mockPersistenceService,
|
||||
mockNow,
|
||||
mockQ,
|
||||
mockLog
|
||||
);
|
||||
@@ -137,21 +144,18 @@ define(
|
||||
it("allows new objects to be created", function () {
|
||||
var model = { someKey: "some value" };
|
||||
creationService.createObject(model, mockParentObject);
|
||||
expect(mockPersistenceService.createObject).toHaveBeenCalledWith(
|
||||
"testSpace",
|
||||
jasmine.any(String), // the object id; generated UUID
|
||||
model
|
||||
);
|
||||
expect(mockCreationCapability.instantiate)
|
||||
.toHaveBeenCalledWith(model);
|
||||
});
|
||||
|
||||
it("adds new id's to the parent's composition", function () {
|
||||
it("adds new objects to the parent's composition", function () {
|
||||
var model = { someKey: "some value" },
|
||||
parentModel = { composition: ["notAnyUUID"] };
|
||||
creationService.createObject(model, mockParentObject);
|
||||
|
||||
// Verify that a new ID was added
|
||||
expect(mockCompositionCapability.add)
|
||||
.toHaveBeenCalledWith(jasmine.any(String));
|
||||
.toHaveBeenCalledWith(mockNewObject);
|
||||
});
|
||||
|
||||
it("provides the newly-created object", function () {
|
||||
@@ -207,11 +211,6 @@ define(
|
||||
expect(mockLog.error).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("attaches a 'persisted' timestamp", function () {
|
||||
var model = { someKey: "some value" };
|
||||
creationService.createObject(model, mockParentObject);
|
||||
expect(model.persisted).toEqual(mockNow());
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[
|
||||
"BrowseController",
|
||||
"BrowseObjectController",
|
||||
"BrowseTreeController",
|
||||
"PaneController",
|
||||
"MenuArrowController",
|
||||
"creation/CreateAction",
|
||||
"creation/CreateActionProvider",
|
||||
|
||||
Reference in New Issue
Block a user