Update test specs to use Jasmine 3 (#2089)

* 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
This commit is contained in:
Andrew Henry
2018-06-29 17:32:59 -07:00
committed by Pete Richards
parent 013eba744d
commit 433dee0314
305 changed files with 2866 additions and 3324 deletions

View File

@@ -40,7 +40,7 @@ define(
);
mockTypes = ['a', 'b'].map(function (type) {
var mockType = jasmine.createSpyObj('type-' + type, ['getKey']);
mockType.getKey.andReturn(type);
mockType.getKey.and.returnValue(type);
return mockType;
});
mockDomainObjects = ['a', 'b'].map(function (id, index) {
@@ -48,8 +48,8 @@ define(
'domainObject-' + id,
['getId', 'getCapability']
);
mockDomainObject.getId.andReturn(id);
mockDomainObject.getCapability.andCallFake(function (c) {
mockDomainObject.getId.and.returnValue(id);
mockDomainObject.getCapability.and.callFake(function (c) {
return c === 'type' && mockTypes[index];
});
return mockDomainObject;
@@ -62,8 +62,8 @@ define(
selectedObject: mockDomainObjects[1]
};
mockAction.getMetadata.andReturn(testContext);
mockInjector.get.andCallFake(function (service) {
mockAction.getMetadata.and.returnValue(testContext);
mockInjector.get.and.callFake(function (service) {
return service === 'policyService' && mockPolicyService;
});
@@ -71,9 +71,9 @@ define(
});
it("defers to composition policy", function () {
mockPolicyService.allow.andReturn(false);
mockPolicyService.allow.and.returnValue(false);
expect(policy.allow(mockAction, testContext)).toBeFalsy();
mockPolicyService.allow.andReturn(true);
mockPolicyService.allow.and.returnValue(true);
expect(policy.allow(mockAction, testContext)).toBeTruthy();
expect(mockPolicyService.allow).toHaveBeenCalledWith(
@@ -85,7 +85,7 @@ define(
it("allows actions other than compose", function () {
testContext.key = 'somethingElse';
mockPolicyService.allow.andReturn(false);
mockPolicyService.allow.and.returnValue(false);
expect(policy.allow(mockAction, testContext)).toBeTruthy();
});
});

View File

@@ -19,9 +19,9 @@ define(
});
it("only allows composition for types which will have a composition property", function () {
mockType.getInitialModel.andReturn({});
mockType.getInitialModel.and.returnValue({});
expect(policy.allow(mockObject)).toBeFalsy();
mockType.getInitialModel.andReturn({ composition: [] });
mockType.getInitialModel.and.returnValue({ composition: [] });
expect(policy.allow(mockObject)).toBeTruthy();
});
});

View File

@@ -41,7 +41,7 @@ define(
it("only allows composition for types which can be created/modified", function () {
expect(policy.allow(mockObject)).toBeFalsy();
mockType.hasFeature.andReturn(true);
mockType.hasFeature.and.returnValue(true);
expect(policy.allow(mockObject)).toBeTruthy();
expect(mockType.hasFeature).toHaveBeenCalledWith('creation');
});

View File

@@ -40,8 +40,8 @@ define(
'type A-- the particular kind',
['getKey', 'getDefinition']
);
typeA.getKey.andReturn('a');
typeA.getDefinition.andReturn({
typeA.getKey.and.returnValue('a');
typeA.getDefinition.and.returnValue({
contains: ['a']
});
@@ -50,8 +50,8 @@ define(
'type B-- anything goes',
['getKey', 'getDefinition']
);
typeB.getKey.andReturn('b');
typeB.getDefinition.andReturn({
typeB.getKey.and.returnValue('b');
typeB.getDefinition.and.returnValue({
contains: ['a', 'b']
});
@@ -59,8 +59,8 @@ define(
'type C-- distinguishing and interested in telemetry',
['getKey', 'getDefinition']
);
typeC.getKey.andReturn('c');
typeC.getDefinition.andReturn({
typeC.getKey.and.returnValue('c');
typeC.getDefinition.and.returnValue({
contains: [{has: 'telemetry'}]
});
@@ -75,17 +75,17 @@ define(
describe('enforces simple containment rules', function () {
it('allows when type matches', function () {
mockParentObject.getCapability.andReturn(typeA);
mockParentObject.getCapability.and.returnValue(typeA);
mockChildObject.getCapability.andReturn(typeA);
mockChildObject.getCapability.and.returnValue(typeA);
expect(policy.allow(mockParentObject, mockChildObject))
.toBeTruthy();
mockParentObject.getCapability.andReturn(typeB);
mockParentObject.getCapability.and.returnValue(typeB);
expect(policy.allow(mockParentObject, mockChildObject))
.toBeTruthy();
mockChildObject.getCapability.andReturn(typeB);
mockChildObject.getCapability.and.returnValue(typeB);
expect(policy.allow(mockParentObject, mockChildObject))
.toBeTruthy();
});
@@ -93,12 +93,12 @@ define(
it('disallows when type doesn\'t match', function () {
mockParentObject.getCapability.andReturn(typeA);
mockChildObject.getCapability.andReturn(typeB);
mockParentObject.getCapability.and.returnValue(typeA);
mockChildObject.getCapability.and.returnValue(typeB);
expect(policy.allow(mockParentObject, mockChildObject))
.toBeFalsy();
mockChildObject.getCapability.andReturn(typeC);
mockChildObject.getCapability.and.returnValue(typeC);
expect(policy.allow(mockParentObject, mockChildObject))
.toBeFalsy();
});
@@ -107,9 +107,9 @@ define(
describe('enforces capability-based containment rules', function () {
it('allows when object has capability', function () {
mockParentObject.getCapability.andReturn(typeC);
mockParentObject.getCapability.and.returnValue(typeC);
mockChildObject.hasCapability.andReturn(true);
mockChildObject.hasCapability.and.returnValue(true);
expect(policy.allow(mockParentObject, mockChildObject))
.toBeTruthy();
expect(mockChildObject.hasCapability)
@@ -117,9 +117,9 @@ define(
});
it('skips when object doesn\'t have capability', function () {
mockChildObject.hasCapability.andReturn(false);
mockChildObject.hasCapability.and.returnValue(false);
mockParentObject.getCapability.andReturn(typeC);
mockParentObject.getCapability.and.returnValue(typeC);
expect(policy.allow(mockParentObject, mockChildObject))
.toBeFalsy();

View File

@@ -44,15 +44,15 @@ define(
'getCapability',
'getId'
]);
mockParent.hasCapability.andReturn(true);
mockParent.getId.andReturn('someNamespace:someId');
mockParent.hasCapability.and.returnValue(true);
mockParent.getId.and.returnValue('someNamespace:someId');
mockChild = {};
mockEditorCapability = jasmine.createSpyObj('domainObject', [
'isEditContextRoot'
]);
mockParent.getCapability.andReturn(mockEditorCapability);
mockParent.getCapability.and.returnValue(mockEditorCapability);
objectAPI.getProvider.andReturn({
objectAPI.getProvider.and.returnValue({
save: function () {}
});
persistableCompositionPolicy = new PersistableCompositionPolicy(mockOpenMCT);
@@ -64,18 +64,18 @@ define(
// - openMct.objects.getProvider
it("Does not allow composition for objects that are not persistable", function () {
mockEditorCapability.isEditContextRoot.andReturn(false);
mockEditorCapability.isEditContextRoot.and.returnValue(false);
expect(persistableCompositionPolicy.allow(mockParent, mockChild)).toBe(true);
objectAPI.getProvider.andReturn({});
objectAPI.getProvider.and.returnValue({});
expect(persistableCompositionPolicy.allow(mockParent, mockChild)).toBe(false);
});
it("Always allows composition of objects in edit mode to support object creation", function () {
mockEditorCapability.isEditContextRoot.andReturn(true);
mockEditorCapability.isEditContextRoot.and.returnValue(true);
expect(persistableCompositionPolicy.allow(mockParent, mockChild)).toBe(true);
expect(objectAPI.getProvider).not.toHaveBeenCalled();
mockEditorCapability.isEditContextRoot.andReturn(false);
mockEditorCapability.isEditContextRoot.and.returnValue(false);
expect(persistableCompositionPolicy.allow(mockParent, mockChild)).toBe(true);
expect(objectAPI.getProvider).toHaveBeenCalled();
});