[Telemetry] Update specs

Update telemetry bundle specs to account for subscription
functionality added to support autoflow tabular views,
WTD-614.
This commit is contained in:
Victor Woeltjen
2014-12-30 14:00:20 -08:00
parent cc5cfd95a7
commit 8dd255a06e
3 changed files with 70 additions and 4 deletions

View File

@@ -8,6 +8,7 @@ define(
describe("The telemetry aggregator", function () { describe("The telemetry aggregator", function () {
var mockQ, var mockQ,
mockProviders, mockProviders,
mockUnsubscribes,
aggregator; aggregator;
function mockPromise(value) { function mockPromise(value) {
@@ -20,10 +21,15 @@ define(
function mockProvider(key, index) { function mockProvider(key, index) {
var provider = jasmine.createSpyObj( var provider = jasmine.createSpyObj(
"provider" + index, "provider" + index,
[ "requestTelemetry" ] [ "requestTelemetry", "subscribe" ]
); ),
unsubscribe = jasmine.createSpy("unsubscribe" + index);
provider.requestTelemetry.andReturn({ someKey: key }); provider.requestTelemetry.andReturn({ someKey: key });
provider.subscribe.andReturn(unsubscribe);
// Store to verify interactions later
mockUnsubscribes[index] = unsubscribe;
return provider; return provider;
} }
@@ -31,6 +37,7 @@ define(
mockQ = jasmine.createSpyObj("$q", [ "all" ]); mockQ = jasmine.createSpyObj("$q", [ "all" ]);
mockQ.all.andReturn(mockPromise([])); mockQ.all.andReturn(mockPromise([]));
mockUnsubscribes = [];
mockProviders = [ "a", "b", "c" ].map(mockProvider); mockProviders = [ "a", "b", "c" ].map(mockProvider);
aggregator = new TelemetryAggregator(mockQ, mockProviders); aggregator = new TelemetryAggregator(mockQ, mockProviders);
@@ -74,6 +81,24 @@ define(
}); });
}); });
it("broadcasts subscriptions from all providers", function () {
var mockCallback = jasmine.createSpy("callback"),
subscription = aggregator.subscribe(mockCallback);
// Make sure all providers got subscribed to
mockProviders.forEach(function (mockProvider) {
expect(mockProvider.subscribe).toHaveBeenCalled();
});
// Verify that unsubscription gets broadcast too
mockUnsubscribes.forEach(function (mockUnsubscribe) {
expect(mockUnsubscribe).not.toHaveBeenCalled();
});
subscription(); // unsubscribe
mockUnsubscribes.forEach(function (mockUnsubscribe) {
expect(mockUnsubscribe).toHaveBeenCalled();
});
});
}); });
} }

View File

@@ -12,6 +12,7 @@ define(
mockDomainObject, mockDomainObject,
mockTelemetryService, mockTelemetryService,
mockReject, mockReject,
mockUnsubscribe,
telemetry; telemetry;
@@ -33,9 +34,10 @@ define(
); );
mockTelemetryService = jasmine.createSpyObj( mockTelemetryService = jasmine.createSpyObj(
"telemetryService", "telemetryService",
[ "requestTelemetry" ] [ "requestTelemetry", "subscribe" ]
); );
mockReject = jasmine.createSpyObj("reject", ["then"]); mockReject = jasmine.createSpyObj("reject", ["then"]);
mockUnsubscribe = jasmine.createSpy("unsubscribe");
mockInjector.get.andReturn(mockTelemetryService); mockInjector.get.andReturn(mockTelemetryService);
@@ -52,6 +54,8 @@ define(
mockTelemetryService.requestTelemetry mockTelemetryService.requestTelemetry
.andReturn(mockPromise({})); .andReturn(mockPromise({}));
mockTelemetryService.subscribe
.andReturn(mockUnsubscribe);
// Bubble up... // Bubble up...
mockReject.then.andReturn(mockReject); mockReject.then.andReturn(mockReject);
@@ -127,6 +131,36 @@ define(
expect(mockLog.warn).toHaveBeenCalled(); expect(mockLog.warn).toHaveBeenCalled();
}); });
it("allows subscriptions to updates", function () {
var mockCallback = jasmine.createSpy("callback"),
subscription = telemetry.subscribe(mockCallback);
// Verify subscription to the appropriate object
expect(mockTelemetryService.subscribe).toHaveBeenCalledWith(
jasmine.any(Function),
[{
id: "testId", // from domain object
source: "testSource",
key: "testKey"
}]
);
// Check that the callback gets invoked
expect(mockCallback).not.toHaveBeenCalled();
mockTelemetryService.subscribe.mostRecentCall.args[0]({
testSource: { testKey: { someKey: "some value" } }
});
expect(mockCallback).toHaveBeenCalledWith(
{ someKey: "some value" }
);
// Finally, unsubscribe
expect(mockUnsubscribe).not.toHaveBeenCalled();
subscription(); // should be an unsubscribe function
expect(mockUnsubscribe).toHaveBeenCalled();
});
}); });
} }
); );

View File

@@ -187,6 +187,13 @@ define(
.toHaveBeenCalledWith("telemetryUpdate"); .toHaveBeenCalledWith("telemetryUpdate");
}); });
it("listens for scope destruction to clean up", function () {
expect(mockScope.$on).toHaveBeenCalledWith(
"$destroy",
jasmine.any(Function)
);
mockScope.$on.mostRecentCall.args[1]();
});
}); });
} }