Simplify Analytics API from analytics module POV

Signed-off-by: Eric Peterson <ericpeterson@spotify.com>
This commit is contained in:
Eric Peterson
2021-08-13 16:44:15 +02:00
parent edd5293d68
commit dffa1892cd
9 changed files with 100 additions and 86 deletions
+6 -6
View File
@@ -4,8 +4,6 @@
```ts
import { AnalyticsApi } from '@backstage/core-plugin-api';
import { AnalyticsDomainValue } from '@backstage/core-plugin-api';
import { AnalyticsTracker } from '@backstage/core-plugin-api';
import { ComponentType } from 'react';
import { DomainDecoratedAnalyticsEvent } from '@backstage/core-plugin-api';
import { ErrorApi } from '@backstage/core-plugin-api';
@@ -24,11 +22,13 @@ import { StorageValueChange } from '@backstage/core-plugin-api';
// @public (undocumented)
export class MockAnalyticsApi implements AnalyticsApi {
// (undocumented)
getDecoratedTracker({
captureEvent({
verb,
noun,
value,
context,
domain,
}: {
domain: AnalyticsDomainValue;
}): AnalyticsTracker;
}: DomainDecoratedAnalyticsEvent): void;
// (undocumented)
getEvents(): DomainDecoratedAnalyticsEvent[];
}
@@ -23,11 +23,16 @@ describe('MockAnalyticsApi', () => {
it('should collect events', () => {
const api = new MockAnalyticsApi();
const tracker = api.getDecoratedTracker({ domain });
tracker.captureEvent('verb-1', 'noun-1');
tracker.captureEvent('verb-2', 'noun-2', 42);
tracker.captureEvent('verb-3', 'noun-3', 1337, { some: 'context' });
api.captureEvent({ verb: 'verb-1', noun: 'noun-1', domain });
api.captureEvent({ verb: 'verb-2', noun: 'noun-2', value: 42, domain });
api.captureEvent({
verb: 'verb-3',
noun: 'noun-3',
value: 1337,
context: { some: 'context' },
domain,
});
expect(api.getEvents()[0]).toMatchObject({
noun: 'noun-1',
@@ -16,30 +16,26 @@
import {
AnalyticsApi,
AnalyticsDomainValue,
AnalyticsTracker,
DomainDecoratedAnalyticsEvent,
} from '@backstage/core-plugin-api';
export class MockAnalyticsApi implements AnalyticsApi {
private events: DomainDecoratedAnalyticsEvent[] = [];
getDecoratedTracker({
captureEvent({
verb,
noun,
value,
context,
domain,
}: {
domain: AnalyticsDomainValue;
}): AnalyticsTracker {
return {
captureEvent: (verb, noun, value, context) => {
this.events.push({
verb,
noun,
domain,
...(value !== undefined ? { value } : {}),
...(context !== undefined ? { context } : {}),
});
},
};
}: DomainDecoratedAnalyticsEvent) {
this.events.push({
verb,
noun,
domain,
...(value !== undefined ? { value } : {}),
...(context !== undefined ? { context } : {}),
});
}
getEvents(): DomainDecoratedAnalyticsEvent[] {