1
1
import { assert , expect } from 'chai' ;
2
2
import 'mocha' ;
3
3
import * as path from 'path' ;
4
- import ConfigManager , { IConfigManager } from './index' ;
4
+ import { stdout } from 'test-console' ;
5
+ import Logger from '../util/logger' ;
6
+ import ConfigManager , { ERRORS , IConfigManager } from './index' ;
5
7
import { Config , ConfigReader } from './package-json-config-reader' ;
6
8
7
9
describe ( 'ConfigManager' , ( ) => {
8
- const testDir = '/tmp/tests/' ;
9
- const configFile = 'package.json' ;
10
10
let configManager : IConfigManager ;
11
11
12
-
13
- beforeEach ( async ( ) => configManager = await ConfigManager ( 'frontvue' ) ) ;
12
+ beforeEach ( async function ( ) {
13
+ this . timeout ( 12000 ) ;
14
+ configManager = await ConfigManager ( 'frontvue' ) ;
15
+ } ) ;
14
16
15
17
16
18
it ( 'instantiates' , async ( ) => {
17
- expect ( configManager ) . to . be . an ( 'object' ) . to . have . all . keys ( 'get' , 'has' , 'remove' , 'set' ) ;
19
+ expect ( configManager ) . to . be . an ( 'object' )
20
+ . to . contain . keys ( 'get' , 'has' , 'remove' , 'set' ) ;
21
+ } ) ;
22
+
23
+
24
+ it ( 'instantiates with default namespace' , async ( ) => {
25
+ expect ( await ConfigManager ( ) ) . to . be . an ( 'object' )
26
+ . to . contain . keys ( 'get' , 'has' , 'remove' , 'set' ) ;
18
27
} ) ;
19
28
20
29
@@ -36,9 +45,15 @@ describe('ConfigManager', () => {
36
45
} ,
37
46
} ;
38
47
} ;
39
-
40
48
const customConfigManager = await ConfigManager ( 'frontvue' , customReader ) ;
41
- expect ( customConfigManager ) . to . be . an ( 'object' ) . to . have . all . keys ( 'get' , 'has' , 'remove' , 'set' ) ;
49
+ expect ( customConfigManager ) . to . be . an ( 'object' )
50
+ . to . contain . keys ( 'get' , 'has' , 'remove' , 'set' ) ;
51
+ } ) ;
52
+
53
+
54
+ it ( 'instantiates with custom logger' , async ( ) => {
55
+ const customLogger = Logger ( 'frontvue' ) ( 'customConfigManager' ) ;
56
+ const configManagerWithLogger = await ConfigManager ( 'frontvue' , undefined , customLogger ) ;
42
57
} ) ;
43
58
44
59
@@ -89,4 +104,89 @@ describe('ConfigManager', () => {
89
104
const removed = await configManager . remove ( 'key2' , 'key3' ) ;
90
105
expect ( await configManager . get ( ) ) . to . eql ( { } ) ;
91
106
} ) ;
107
+
108
+
109
+ it ( 'console logs even if errorHandler did not receive an error' , ( ) => {
110
+ const inspect = stdout . inspect ( ) ;
111
+ configManager . errorHandler ( ) ;
112
+ inspect . restore ( ) ;
113
+ expect ( inspect . output . length ) . to . gt ( 0 ) ;
114
+ } ) ;
115
+
116
+
117
+ describe ( 'Inaccessible configuration' , ( ) => {
118
+ // Stub for customReader with errors
119
+ const badCustomReaderFactory = (
120
+ options : {
121
+ badDestroy ?: boolean ,
122
+ badFetch ?: boolean ,
123
+ badUpdate ?: boolean ,
124
+ } = { } ,
125
+ ) => {
126
+ const {
127
+ badDestroy = false ,
128
+ badFetch = false ,
129
+ badUpdate = false ,
130
+ } = options ;
131
+
132
+ // Custom reader with very nasty errors
133
+ return function ( namespace : string ) : ConfigReader {
134
+ return {
135
+ destroy ( ) : Promise < Config | Error > {
136
+ if ( badDestroy ) {
137
+ return Promise . reject ( new Error ( 'customReader> Some nasty destroy() error here' ) ) ;
138
+ }
139
+ return Promise . resolve ( { } ) ;
140
+ } ,
141
+ fetch ( ) : Promise < Config | Error > {
142
+ if ( badFetch ) {
143
+ return Promise . reject ( new Error ( 'customReader> Some nasty fetch() error here' ) ) ;
144
+ }
145
+ return Promise . resolve ( { } ) ;
146
+ } ,
147
+ update ( object : object ) : Promise < boolean | Error > {
148
+ if ( badUpdate ) {
149
+ return Promise . reject ( new Error ( 'customReader> Some nasty update() error here' ) ) ;
150
+ }
151
+ return Promise . resolve ( true ) ;
152
+ } ,
153
+ } ;
154
+ } ;
155
+ } ;
156
+
157
+
158
+ it ( 'returns rejected promise when configReader fails to instantiate' , async ( ) => {
159
+ const customReader = ( ) => {
160
+ return new Promise ( ( resolve , reject ) => {
161
+ reject ( new Error ( 'customReader> Some nasty init error here' ) ) ;
162
+ } ) ;
163
+ } ;
164
+
165
+ return expect ( ConfigManager ( 'frontvue' , customReader ) )
166
+ . to . be . rejectedWith ( Error ) ;
167
+ } ) ;
168
+
169
+
170
+ it ( 'returns a rejected promise when configuration cannot be fetched' , async ( ) => {
171
+ const customReader = badCustomReaderFactory ( { badFetch : true } ) ;
172
+ return expect ( ConfigManager ( 'frontvue' , customReader ) )
173
+ . to . be . rejectedWith ( Error ) ;
174
+ } ) ;
175
+
176
+
177
+ it ( 'returns a rejected promise when .set() fails' , async ( ) => {
178
+ const customReader = badCustomReaderFactory ( { badUpdate : true } ) ;
179
+ const badConfigManager = await ConfigManager ( 'frontvue' , customReader ) ;
180
+ return expect ( badConfigManager . set ( 'key' , 'value' ) )
181
+ . to . be . rejectedWith ( Error ) ;
182
+ } ) ;
183
+
184
+
185
+ it ( 'returns a rejected promise when .remove() fails' , async ( ) => {
186
+ const customReader = badCustomReaderFactory ( { badUpdate : true } ) ;
187
+ const badConfigManager = await ConfigManager ( 'frontvue' , customReader ) ;
188
+ return expect ( badConfigManager . remove ( 'key' ) )
189
+ . to . be . rejectedWith ( Error ) ;
190
+ } ) ;
191
+ } ) ;
92
192
} ) ;
0 commit comments