Skip to content

Commit 571f7d5

Browse files
committed
adds tests
1 parent df37b16 commit 571f7d5

File tree

3 files changed

+92
-8
lines changed

3 files changed

+92
-8
lines changed

src/extension.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import statusBar from "./plugins/status-bar.ts";
1010
import { PluginManager } from "./plugins.ts";
1111
import { createCliStatusTracker } from "./utils/cli.ts";
1212
import { createLocalStackContainerStatusTracker } from "./utils/localstack-container.ts";
13-
import { createLocalStackInstanceStatusTracker } from "./utils/localstack-instance.ts";
13+
import {
14+
createHealthStatusTracker,
15+
createLocalStackInstanceStatusTracker,
16+
} from "./utils/localstack-instance.ts";
1417
import { getOrCreateExtensionSessionId } from "./utils/manage.ts";
1518
import { createSetupStatusTracker } from "./utils/setup.ts";
1619
import { createTelemetry } from "./utils/telemetry.ts";
@@ -57,10 +60,11 @@ export async function activate(context: ExtensionContext) {
5760
);
5861
context.subscriptions.push(containerStatusTracker);
5962

63+
const healthCheckStatusTracker = createHealthStatusTracker(timeTracker);
6064
const localStackStatusTracker = createLocalStackInstanceStatusTracker(
6165
containerStatusTracker,
66+
healthCheckStatusTracker,
6267
outputChannel,
63-
timeTracker,
6468
);
6569
context.subscriptions.push(localStackStatusTracker);
6670

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import * as assert from "node:assert";
2+
import { setImmediate } from "node:timers/promises";
3+
4+
import { window } from "vscode";
5+
import type { LogOutputChannel } from "vscode";
6+
7+
import { createValueEmitter } from "../utils/emitter.ts";
8+
import type {
9+
LocalStackContainerStatus,
10+
LocalStackContainerStatusTracker,
11+
} from "../utils/localstack-container.ts";
12+
import { createLocalStackInstanceStatusTracker } from "../utils/localstack-instance.ts";
13+
import type {
14+
HealthStatus,
15+
HealthStatusTracker,
16+
} from "../utils/localstack-instance.ts";
17+
18+
function createFixtures() {
19+
const containerStatus = createValueEmitter<LocalStackContainerStatus>();
20+
const containerStatusTracker: LocalStackContainerStatusTracker = {
21+
status() {
22+
return containerStatus.value();
23+
},
24+
onChange(callback) {
25+
containerStatus.onChange(callback);
26+
},
27+
dispose() {},
28+
};
29+
30+
const healthStatus = createValueEmitter<HealthStatus>();
31+
const healthCheckStatusTracker: HealthStatusTracker = {
32+
start() {},
33+
stop() {},
34+
status() {
35+
return healthStatus.value();
36+
},
37+
onChange(callback) {
38+
healthStatus.onChange(callback);
39+
},
40+
dispose() {},
41+
};
42+
43+
const outputChannel = window.createOutputChannel("LocalStack", {
44+
log: true,
45+
});
46+
47+
const tracker = createLocalStackInstanceStatusTracker(
48+
containerStatusTracker,
49+
healthCheckStatusTracker,
50+
outputChannel,
51+
);
52+
53+
return {
54+
containerStatus,
55+
healthStatus,
56+
tracker,
57+
};
58+
}
59+
60+
suite("LocalStack Instance Test Suite", () => {
61+
test("Derives LocalStack instance status correctly", async () => {
62+
const { containerStatus, healthStatus, tracker } = createFixtures();
63+
64+
///////////////////////////////////////////////////////////////////////////
65+
containerStatus.setValue(undefined);
66+
healthStatus.setValue(undefined);
67+
await setImmediate();
68+
assert.strictEqual(tracker.status(), undefined);
69+
70+
///////////////////////////////////////////////////////////////////////////
71+
containerStatus.setValue("running");
72+
healthStatus.setValue("unhealthy");
73+
await setImmediate();
74+
assert.strictEqual(tracker.status(), "starting");
75+
76+
///////////////////////////////////////////////////////////////////////////
77+
containerStatus.setValue("running");
78+
healthStatus.setValue("healthy");
79+
await setImmediate();
80+
assert.strictEqual(tracker.status(), "running");
81+
});
82+
});

src/utils/localstack-instance.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,12 @@ export interface LocalStackInstanceStatusTracker extends Disposable {
2727
*/
2828
export function createLocalStackInstanceStatusTracker(
2929
containerStatusTracker: LocalStackContainerStatusTracker,
30+
healthCheckStatusTracker: HealthStatusTracker,
3031
outputChannel: LogOutputChannel,
31-
timeTracker: TimeTracker,
3232
): LocalStackInstanceStatusTracker {
3333
let containerStatus: LocalStackContainerStatus | undefined;
3434
const status = createValueEmitter<LocalStackInstanceStatus>();
3535

36-
const healthCheckStatusTracker = createHealthStatusTracker(timeTracker);
37-
3836
const setStatus = (newStatus: LocalStackInstanceStatus) => {
3937
status.setValue(newStatus);
4038
};
@@ -141,16 +139,16 @@ function getLocalStackStatus(
141139
return "stopped";
142140
}
143141

144-
type HealthStatus = "healthy" | "unhealthy";
142+
export type HealthStatus = "healthy" | "unhealthy";
145143

146-
interface HealthStatusTracker extends Disposable {
144+
export interface HealthStatusTracker extends Disposable {
147145
status(): HealthStatus | undefined;
148146
start(): void;
149147
stop(): void;
150148
onChange(callback: (status: HealthStatus | undefined) => void): void;
151149
}
152150

153-
function createHealthStatusTracker(
151+
export function createHealthStatusTracker(
154152
timeTracker: TimeTracker,
155153
): HealthStatusTracker {
156154
const status = createValueEmitter<HealthStatus | undefined>();

0 commit comments

Comments
 (0)