 433dee0314
			
		
	
	433dee0314
	
	
	
		
			
			* Updated Karma and Jasmine versions * Added DOMObserver class. Supports promise-based testing of DOM changes Update asynchronous test specs to use promises or done() instead of waitsFor/runs * Modified ActionCapability to duplicate context object properties as own properties for better object equality comparisons * Global find + replace to fix syntax issues * Fixed various issues caused by non-deterministic runtime order of tests in Jasmine 3. Fixed issues caused by changes to determination of object equality * Addressed review comments * Resolved merge conflicts with master * Fixed style errors * Use spy.calls.count() instead of manually tracking
		
			
				
	
	
		
			193 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*****************************************************************************
 | |
|  * 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/capabilities/EditorCapability"],
 | |
|     function (EditorCapability) {
 | |
| 
 | |
|         describe("The editor capability", function () {
 | |
|             var mockDomainObject,
 | |
|                 capabilities,
 | |
|                 mockParentObject,
 | |
|                 mockTransactionService,
 | |
|                 mockStatusCapability,
 | |
|                 mockParentStatus,
 | |
|                 mockContextCapability,
 | |
|                 capability;
 | |
| 
 | |
|             function fastPromise(val) {
 | |
|                 return {
 | |
|                     then: function (callback) {
 | |
|                         return callback(val);
 | |
|                     }
 | |
|                 };
 | |
|             }
 | |
| 
 | |
|             beforeEach(function () {
 | |
|                 mockDomainObject = jasmine.createSpyObj(
 | |
|                     "domainObject",
 | |
|                     ["getId", "getModel", "hasCapability", "getCapability", "useCapability"]
 | |
|                 );
 | |
|                 mockParentObject = jasmine.createSpyObj(
 | |
|                     "domainObject",
 | |
|                     ["getId", "getModel", "hasCapability", "getCapability", "useCapability"]
 | |
|                 );
 | |
|                 mockTransactionService = jasmine.createSpyObj(
 | |
|                     "transactionService",
 | |
|                     [
 | |
|                         "startTransaction",
 | |
|                         "size",
 | |
|                         "commit",
 | |
|                         "cancel"
 | |
|                     ]
 | |
|                 );
 | |
|                 mockTransactionService.commit.and.returnValue(fastPromise());
 | |
|                 mockTransactionService.cancel.and.returnValue(fastPromise());
 | |
|                 mockTransactionService.isActive = jasmine.createSpy('isActive');
 | |
| 
 | |
|                 mockStatusCapability = jasmine.createSpyObj(
 | |
|                     "statusCapability",
 | |
|                     ["get", "set"]
 | |
|                 );
 | |
|                 mockParentStatus = jasmine.createSpyObj(
 | |
|                     "statusCapability",
 | |
|                     ["get", "set"]
 | |
|                 );
 | |
|                 mockContextCapability = jasmine.createSpyObj(
 | |
|                     "contextCapability",
 | |
|                     ["getParent"]
 | |
|                 );
 | |
|                 mockContextCapability.getParent.and.returnValue(mockParentObject);
 | |
| 
 | |
|                 capabilities = {
 | |
|                     context: mockContextCapability,
 | |
|                     status: mockStatusCapability
 | |
|                 };
 | |
| 
 | |
|                 mockDomainObject.hasCapability.and.callFake(function (name) {
 | |
|                     return capabilities[name] !== undefined;
 | |
|                 });
 | |
| 
 | |
|                 mockDomainObject.getCapability.and.callFake(function (name) {
 | |
|                     return capabilities[name];
 | |
|                 });
 | |
| 
 | |
|                 mockParentObject.getCapability.and.returnValue(mockParentStatus);
 | |
|                 mockParentObject.hasCapability.and.returnValue(false);
 | |
| 
 | |
|                 capability = new EditorCapability(
 | |
|                     mockTransactionService,
 | |
|                     mockDomainObject
 | |
|                 );
 | |
|             });
 | |
| 
 | |
|             it("starts a transaction when edit is invoked", function () {
 | |
|                 capability.edit();
 | |
|                 expect(mockTransactionService.startTransaction).toHaveBeenCalled();
 | |
|             });
 | |
| 
 | |
|             it("sets editing status on object", function () {
 | |
|                 capability.edit();
 | |
|                 expect(mockStatusCapability.set).toHaveBeenCalledWith("editing", true);
 | |
|             });
 | |
| 
 | |
|             it("uses editing status to determine editing context root", function () {
 | |
|                 capability.edit();
 | |
|                 mockStatusCapability.get.and.returnValue(false);
 | |
|                 expect(capability.isEditContextRoot()).toBe(false);
 | |
|                 mockStatusCapability.get.and.returnValue(true);
 | |
|                 expect(capability.isEditContextRoot()).toBe(true);
 | |
|             });
 | |
| 
 | |
|             it("inEditingContext returns true if parent object is being" +
 | |
|                 " edited", function () {
 | |
|                 mockStatusCapability.get.and.returnValue(false);
 | |
|                 mockParentStatus.get.and.returnValue(false);
 | |
|                 expect(capability.inEditContext()).toBe(false);
 | |
|                 mockParentStatus.get.and.returnValue(true);
 | |
|                 expect(capability.inEditContext()).toBe(true);
 | |
|             });
 | |
| 
 | |
|             describe("save", function () {
 | |
|                 beforeEach(function () {
 | |
|                     capability.edit();
 | |
|                     capability.save();
 | |
|                 });
 | |
|                 it("commits the transaction", function () {
 | |
|                     expect(mockTransactionService.commit).toHaveBeenCalled();
 | |
|                 });
 | |
|                 it("begins a new transaction", function () {
 | |
|                     expect(mockTransactionService.startTransaction).toHaveBeenCalled();
 | |
|                 });
 | |
|             });
 | |
| 
 | |
|             describe("finish", function () {
 | |
|                 beforeEach(function () {
 | |
|                     mockTransactionService.isActive.and.returnValue(true);
 | |
|                     capability.edit();
 | |
|                     capability.finish();
 | |
|                 });
 | |
|                 it("cancels the transaction", function () {
 | |
|                     expect(mockTransactionService.cancel).toHaveBeenCalled();
 | |
|                 });
 | |
|                 it("resets the edit state", function () {
 | |
|                     expect(mockStatusCapability.set).toHaveBeenCalledWith('editing', false);
 | |
|                 });
 | |
|             });
 | |
| 
 | |
|             describe("finish", function () {
 | |
|                 beforeEach(function () {
 | |
|                     mockTransactionService.isActive.and.returnValue(false);
 | |
|                     capability.edit();
 | |
|                 });
 | |
| 
 | |
|                 it("does not cancel transaction when transaction is not active", function () {
 | |
|                     capability.finish();
 | |
|                     expect(mockTransactionService.cancel).not.toHaveBeenCalled();
 | |
|                 });
 | |
| 
 | |
|                 it("returns a promise", function () {
 | |
|                     expect(capability.finish() instanceof Promise).toBe(true);
 | |
|                 });
 | |
| 
 | |
|             });
 | |
| 
 | |
|             describe("dirty", function () {
 | |
|                 var model = {};
 | |
| 
 | |
|                 beforeEach(function () {
 | |
|                     mockDomainObject.getModel.and.returnValue(model);
 | |
|                     capability.edit();
 | |
|                     capability.finish();
 | |
|                 });
 | |
|                 it("returns true if the object has been modified since it" +
 | |
|                     " was last persisted", function () {
 | |
|                     mockTransactionService.size.and.returnValue(0);
 | |
|                     expect(capability.dirty()).toBe(false);
 | |
|                     mockTransactionService.size.and.returnValue(1);
 | |
|                     expect(capability.dirty()).toBe(true);
 | |
|                 });
 | |
|             });
 | |
|         });
 | |
|     }
 | |
| );
 |