-
Notifications
You must be signed in to change notification settings - Fork 4
/
resultAsync.spec.ts
121 lines (87 loc) · 3.63 KB
/
resultAsync.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import { ResultAsync } from '@/src/resultAsync';
import { Unit } from '@/src/unit';
describe('ResultAsync', () => {
describe('success', () => {
test('success creates a successful Unit Result from no value', async () => {
const sut = ResultAsync.success();
const result = await sut.toPromise();
expect(result.isSuccess).toBe(true);
expect(result).toSucceedWith(Unit.Instance);
});
test('success creates a successful Result from a value', async () => {
const sut = ResultAsync.success(1);
const result = await sut.toPromise();
expect(result).toSucceedWith(1);
});
});
describe('failure', () => {
test('failure creates a failed Result', async () => {
const error = { message: 'A problem' };
const sut = ResultAsync.failure(error);
const result = await sut.toPromise();
expect(result).toFailWith(error);
});
});
describe('isSuccess/isFailure', () => {
test('isSuccess returns true and isFailure returns false for a successful Result', async () => {
const sut = ResultAsync.success();
await expect(sut.isSuccess).resolves.toBe(true);
await expect(sut.isFailure).resolves.toBe(false);
});
test('isSuccess returns false and isFailure returns true for a failed Result', async () => {
const sut = ResultAsync.failure('ouch');
await expect(sut.isSuccess).resolves.toBe(false);
await expect(sut.isFailure).resolves.toBe(true);
});
});
describe('getValueOrThrow', () => {
test('will return the inner value for a successful Result', async () => {
const sut = ResultAsync.success();
await expect(sut.getValueOrThrow()).resolves.toBe(Unit.Instance);
});
test('will throw an error for a failed Result', async () => {
const sut = ResultAsync.failure('error');
await expect(sut.getValueOrThrow()).rejects.toThrow();
});
});
describe('getValueOrDefault', () => {
test('will return the inner value for a successful Result', async () => {
const sut = ResultAsync.success(1);
await expect(sut.getValueOrDefault(2)).resolves.toBe(1);
});
test('will return the default value for a failed Result', async () => {
const sut = ResultAsync.failure<number>('error');
await expect(sut.getValueOrDefault(2)).resolves.toBe(2);
});
test('will return the default value factory value for a failed Result', async () => {
const sut = ResultAsync.failure<number>('error');
await expect(sut.getValueOrDefault(() => 2)).resolves.toBe(2);
});
});
describe('getErrorOrThrow', () => {
test('will return the inner error for a failed Result', async () => {
const sut = ResultAsync.failure<number>('error');
await expect(sut.getErrorOrThrow()).resolves.toBe('error');
});
test('will throw for a successful Result', async () => {
const sut = ResultAsync.success(1);
await expect(sut.getErrorOrThrow()).rejects.toThrow();
});
});
describe('getErrorOrDefault', () => {
test('will return the inner error for a failed Result', async () => {
const sut = ResultAsync.failure<number>('error');
await expect(sut.getErrorOrDefault('default')).resolves.toBe('error');
});
test('will throw for a successful Result', async () => {
const sut = ResultAsync.success(1);
await expect(sut.getErrorOrDefault('default')).resolves.toBe('default');
});
test('will return the default value factory value for a successful Result', async () => {
const sut = ResultAsync.success(1);
await expect(sut.getErrorOrDefault(() => 'default')).resolves.toBe(
'default'
);
});
});
});