Simplify/clarify Analytics API types and naming.

Signed-off-by: Eric Peterson <ericpeterson@spotify.com>
This commit is contained in:
Eric Peterson
2021-09-16 14:16:16 +02:00
parent 83c163a234
commit 1ff7386291
25 changed files with 305 additions and 344 deletions
@@ -17,40 +17,45 @@
import { MockAnalyticsApi } from './MockAnalyticsApi';
describe('MockAnalyticsApi', () => {
const domain = {
const context = {
pluginId: 'some-plugin',
};
it('should collect events', () => {
const api = new MockAnalyticsApi();
api.captureEvent({ verb: 'verb-1', noun: 'noun-1', domain });
api.captureEvent({ verb: 'verb-2', noun: 'noun-2', value: 42, domain });
api.captureEvent({ action: 'action-1', subject: 'subject-1', context });
api.captureEvent({
verb: 'verb-3',
noun: 'noun-3',
action: 'action-2',
subject: 'subject-2',
value: 42,
context,
});
api.captureEvent({
action: 'action-3',
subject: 'subject-3',
value: 1337,
context: { some: 'context' },
domain,
attributes: { some: 'context' },
context,
});
expect(api.getEvents()[0]).toMatchObject({
noun: 'noun-1',
verb: 'verb-1',
domain,
subject: 'subject-1',
action: 'action-1',
context,
});
expect(api.getEvents()[1]).toMatchObject({
noun: 'noun-2',
verb: 'verb-2',
subject: 'subject-2',
action: 'action-2',
value: 42,
domain,
context,
});
expect(api.getEvents()[2]).toMatchObject({
noun: 'noun-3',
verb: 'verb-3',
subject: 'subject-3',
action: 'action-3',
value: 1337,
domain,
context: {
context,
attributes: {
some: 'context',
},
});
@@ -14,31 +14,28 @@
* limitations under the License.
*/
import {
AnalyticsApi,
DomainDecoratedAnalyticsEvent,
} from '@backstage/core-plugin-api';
import { AnalyticsApi, AnalyticsEvent } from '@backstage/core-plugin-api';
export class MockAnalyticsApi implements AnalyticsApi {
private events: DomainDecoratedAnalyticsEvent[] = [];
private events: AnalyticsEvent[] = [];
captureEvent({
verb,
noun,
action,
subject,
value,
attributes,
context,
domain,
}: DomainDecoratedAnalyticsEvent) {
}: AnalyticsEvent) {
this.events.push({
verb,
noun,
domain,
action,
subject,
context,
...(value !== undefined ? { value } : {}),
...(context !== undefined ? { context } : {}),
...(attributes !== undefined ? { attributes } : {}),
});
}
getEvents(): DomainDecoratedAnalyticsEvent[] {
getEvents(): AnalyticsEvent[] {
return this.events;
}
}