1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-10 05:30:01 +00:00

additional unit tests

This commit is contained in:
✨ Audrey ✨
2025-03-20 14:58:51 -04:00
parent 112f3e416a
commit 0fc3ddcaad
2 changed files with 55 additions and 11 deletions

View File

@@ -4,8 +4,9 @@ import { ConsoleLogService } from "../../platform/services/console-log.service";
import { consoleSemanticLoggerProvider } from "../log";
import { AchievementHub } from "./achievement-hub";
import { ItemCreatedEarnedEvent } from "./examples/achievement-events";
import { ItemCreatedEarnedEvent, ItemCreatedProgressEvent } from "./examples/achievement-events";
import {
ItemCreatedTracker,
TotallyAttachedAchievement,
TotallyAttachedValidator,
} from "./examples/example-validators";
@@ -81,7 +82,7 @@ describe("AchievementHub", () => {
const validators$ = new Subject<AchievementValidator[]>();
const events$ = new Subject<UserActionEvent>();
const achievements$ = new Subject<AchievementEvent>();
const hub = new AchievementHub(validators$, events$, achievements$);
const hub = new AchievementHub(validators$, events$, achievements$, 10, testLog);
const results$ = new ReplaySubject<AchievementEvent | null>(3);
achievements$.next(ItemCreatedEarnedEvent);
achievements$.complete();
@@ -98,24 +99,72 @@ describe("AchievementHub", () => {
});
describe("earned$", () => {
it("", async () => {
it("includes earned achievements from constructor", async () => {
const validators$ = new Subject<AchievementValidator[]>();
const events$ = new Subject<UserActionEvent>();
const achievements$ = new Subject<AchievementEvent>();
const hub = new AchievementHub(validators$, events$, achievements$);
const hub = new AchievementHub(validators$, events$, achievements$, 10, testLog);
const results$ = new ReplaySubject<Map<AchievementId, AchievementEarnedEvent>>(1);
hub.earned$().subscribe(results$);
achievements$.next(ItemCreatedEarnedEvent);
achievements$.complete();
const result = await firstValueFrom(results$);
expect(result.get(ItemCreatedEarnedEvent.achievement.name)).toEqual(ItemCreatedEarnedEvent);
});
it("includes earned achievements from validators", async () => {
const validators$ = new BehaviorSubject<AchievementValidator[]>([TotallyAttachedValidator]);
const events$ = new Subject<UserActionEvent>();
const achievements$ = new Subject<AchievementEvent>();
const hub = new AchievementHub(validators$, events$, achievements$, 10, testLog);
const results$ = new ReplaySubject<Map<AchievementId, AchievementEarnedEvent>>(1);
hub.earned$().subscribe(results$);
achievements$.complete();
events$.next(ItemAddedEvent);
const result = await firstValueFrom(results$);
expect(result.get(TotallyAttachedValidator.achievement)).toMatchObject({
achievement: { type: "earned", name: TotallyAttachedValidator.achievement },
});
});
});
describe("metrics$", () => {
it("", async () => {
it("includes progress events from constructor", async () => {
const validators$ = new Subject<AchievementValidator[]>();
const events$ = new Subject<UserActionEvent>();
const achievements$ = new Subject<AchievementEvent>();
const hub = new AchievementHub(validators$, events$, achievements$);
const hub = new AchievementHub(validators$, events$, achievements$, 10, testLog);
const results$ = new ReplaySubject<Map<MetricId, AchievementProgressEvent>>(1);
hub.metrics$().subscribe(results$);
achievements$.next(ItemCreatedProgressEvent);
achievements$.complete();
const result = await firstValueFrom(results$);
expect(result.get(ItemCreatedProgressEvent.achievement.name)).toEqual(
ItemCreatedProgressEvent,
);
});
it("includes progress events from constructor", async () => {
const validators$ = new BehaviorSubject<AchievementValidator[]>([ItemCreatedTracker]);
const events$ = new Subject<UserActionEvent>();
const achievements$ = new Subject<AchievementEvent>();
const hub = new AchievementHub(validators$, events$, achievements$, 10, testLog);
const results$ = new ReplaySubject<Map<MetricId, AchievementProgressEvent>>(1);
hub.metrics$().subscribe(results$);
achievements$.complete();
events$.next(ItemAddedEvent);
const result = await firstValueFrom(results$);
expect(result.get(ItemCreatedTracker.active.metric)).toMatchObject({
achievement: { type: "progress", name: ItemCreatedTracker.active.metric, value: 1 },
});
});
});
});

View File

@@ -3,7 +3,6 @@ import {
ReplaySubject,
Subject,
concat,
debounceTime,
filter,
map,
shareReplay,
@@ -27,8 +26,6 @@ import {
UserActionEvent,
} from "./types";
const ACHIEVEMENT_INITIAL_DEBOUNCE_MS = 100;
export class AchievementHub {
/** Instantiates the achievement hub. A new achievement hub should be created
* per-user, and streams should be partitioned by user.
@@ -88,7 +85,6 @@ export class AchievementHub {
filter((e) => isEarnedEvent(e)),
map((e) => e as AchievementEarnedEvent),
latestEarnedMetrics(),
debounceTime(ACHIEVEMENT_INITIAL_DEBOUNCE_MS),
tap((m) => this.log.debug(m, "earned achievements update")),
startWith(new Map<AchievementId, AchievementEarnedEvent>()),
);
@@ -99,7 +95,6 @@ export class AchievementHub {
filter((e) => isProgressEvent(e)),
map((e) => e as AchievementProgressEvent),
latestProgressMetrics(),
debounceTime(ACHIEVEMENT_INITIAL_DEBOUNCE_MS),
tap((m) => this.log.debug(m, "achievement metrics update")),
startWith(new Map<MetricId, AchievementProgressEvent>()),
);