Skip to content

Commit 3c8a57c

Browse files
committed
add test
1 parent c705ccb commit 3c8a57c

File tree

4 files changed

+95
-4
lines changed

4 files changed

+95
-4
lines changed

lib/service.spec.ts

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import { it, expect } from 'vitest';
2+
import { BaseService, ServiceState } from './service';
3+
4+
class TestService extends BaseService {
5+
constructor() {
6+
super();
7+
}
8+
9+
start(): void {
10+
this.setState(ServiceState.Running);
11+
this.startPromise.resolve();
12+
}
13+
14+
failStart(): void {
15+
this.setState(ServiceState.Failed);
16+
this.startPromise.reject();
17+
}
18+
19+
stop(): void {
20+
this.setState(ServiceState.Running);
21+
this.startPromise.resolve();
22+
}
23+
24+
failStop(): void {
25+
this.setState(ServiceState.Failed);
26+
this.startPromise.reject();
27+
}
28+
29+
setState(state: ServiceState): void {
30+
this.state = state;
31+
}
32+
}
33+
34+
35+
it('should set state to New on construction', async () => {
36+
const service = new TestService();
37+
expect(service.getState()).toBe(ServiceState.New);
38+
});
39+
40+
it('should return correct state when getState() is called', () => {
41+
const service = new TestService();
42+
expect(service.getState()).toBe(ServiceState.New);
43+
service.setState(ServiceState.Running);
44+
expect(service.getState()).toBe(ServiceState.Running);
45+
service.setState(ServiceState.Terminated);
46+
expect(service.getState()).toBe(ServiceState.Terminated);
47+
service.setState(ServiceState.Failed);
48+
expect(service.getState()).toBe(ServiceState.Failed);
49+
});
50+
51+
it('should return an appropraite promise when onRunning() is called', () => {
52+
const service1 = new TestService();
53+
const onRunning1 = service1.onRunning();
54+
55+
const service2 = new TestService();
56+
const onRunning2 = service2.onRunning();
57+
58+
return new Promise<void>((done) => {
59+
Promise.all([
60+
onRunning1.then(() => {
61+
expect(service1.getState()).toBe(ServiceState.Running);
62+
}), onRunning2.catch(() => {
63+
expect(service2.getState()).toBe(ServiceState.Failed);
64+
})
65+
]).then(() => done());
66+
67+
service1.start();
68+
service2.failStart();
69+
});
70+
});
71+
72+
it('should return an appropraite promise when onRunning() is called', () => {
73+
const service1 = new TestService();
74+
const onRunning1 = service1.onRunning();
75+
76+
const service2 = new TestService();
77+
const onRunning2 = service2.onRunning();
78+
79+
return new Promise<void>((done) => {
80+
Promise.all([
81+
onRunning1.then(() => {
82+
expect(service1.getState()).toBe(ServiceState.Running);
83+
}), onRunning2.catch(() => {
84+
expect(service2.getState()).toBe(ServiceState.Failed);
85+
})
86+
]).then(() => done());
87+
88+
service1.start();
89+
service2.failStart();
90+
});
91+
});

lib/service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ export abstract class BaseService implements Service {
6767
return this.state;
6868
}
6969

70-
protected isNew(): boolean {
70+
isNew(): boolean {
7171
return this.state === ServiceState.New;
7272
}
7373

74-
protected isDone(): boolean {
74+
isDone(): boolean {
7575
return [
7676
ServiceState.Stopping,
7777
ServiceState.Terminated,

lib/utils/ticker/ticker.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2022, 2024, Optimizely
2+
* Copyright 2024, Optimizely
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

vitest.config.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export default defineConfig({
44
test: {
55
onConsoleLog: () => true,
66
environment: 'happy-dom',
7-
include: ["**/ticker.spec.ts"],
7+
include: ["**/service.spec.ts"],
88
typecheck: {
99
tsconfig: 'tsconfig.spec.json',
1010
exclude: ['**/index.react_native.spec.ts'],

0 commit comments

Comments
 (0)