11const fs = require ( 'fs' )
2- const os = require ( 'os' )
3- const path = require ( 'path' )
2+ // const os = require('os')
3+ // const path = require('path')
44
55const sinon = require ( 'sinon' )
66const t = require ( 'tap' )
77
88const dotenv = require ( '../lib/main' )
99
1010const mockParseResponse = { test : 'foo' }
11- let readFileSyncStub
12- let parseStub
13-
14- t . beforeEach ( ( ) => {
15- readFileSyncStub = sinon . stub ( fs , 'readFileSync' ) . returns ( 'test=foo' )
16- parseStub = sinon . stub ( dotenv , 'parse' ) . returns ( mockParseResponse )
17- } )
18-
19- t . afterEach ( ( ) => {
20- readFileSyncStub . restore ( )
21- parseStub . restore ( )
22- } )
23-
24- t . test ( 'takes string for path option' , ct => {
25- ct . plan ( 1 )
26-
27- const testPath = 'tests/.env'
28- dotenv . config ( { path : testPath } )
29-
30- ct . equal ( readFileSyncStub . args [ 0 ] [ 0 ] , testPath )
31- } )
3211
3312t . test ( 'takes string for path option' , ct => {
34- ct . plan ( 1 )
13+ ct . plan ( 2 )
3514
3615 const testPath = 'tests/.env'
37- dotenv . config ( { path : testPath } )
16+ const env = dotenv . config ( { path : testPath } )
3817
39- ct . equal ( readFileSyncStub . args [ 0 ] [ 0 ] , testPath )
18+ ct . equal ( env . parsed . BASIC , 'basic' )
19+ ct . equal ( process . env . BASIC , 'basic' )
4020} )
4121
4222t . test ( 'takes array for path option' , ct => {
43- ct . plan ( 1 )
23+ ct . plan ( 2 )
4424
4525 const testPath = [ 'tests/.env' ]
46- dotenv . config ( { path : testPath } )
26+ const env = dotenv . config ( { path : testPath } )
4727
48- ct . equal ( readFileSyncStub . args [ 0 ] [ 0 ] , testPath )
28+ ct . equal ( env . parsed . BASIC , 'basic' )
29+ ct . equal ( process . env . BASIC , 'basic' )
4930} )
5031
5132t . test ( 'takes two or more files in the array for path option' , ct => {
52- ct . plan ( 1 )
33+ ct . plan ( 2 )
5334
5435 const testPath = [ 'tests/.env.local' , 'tests/.env' ]
55- dotenv . config ( { path : testPath } )
36+ const env = dotenv . config ( { path : testPath } )
5637
57- ct . equal ( readFileSyncStub . args [ 0 ] [ 0 ] , testPath )
38+ ct . equal ( env . parsed . BASIC , 'local_basic' )
39+ ct . equal ( process . env . BASIC , 'local_basic' )
5840} )
5941
6042t . test ( 'takes URL for path option' , ct => {
61- ct . plan ( 1 )
43+ ct . plan ( 2 )
6244
6345 const testPath = new URL ( 'file://home/user/project/.env' )
64- dotenv . config ( { path : testPath } )
46+ const env = dotenv . config ( { path : testPath } )
6547
66- ct . equal ( readFileSyncStub . args [ 0 ] [ 0 ] , testPath )
48+ ct . equal ( env . parsed . BASIC , 'basic' )
49+ ct . equal ( process . env . BASIC , 'basic' )
6750} )
6851
69- t . test ( 'takes option for path along with home directory char ~' , ct => {
70- ct . plan ( 2 )
71- const mockedHomedir = '/Users/dummy'
72- const homedirStub = sinon . stub ( os , 'homedir' ) . returns ( mockedHomedir )
73- const testPath = '~/.env'
74- dotenv . config ( { path : testPath } )
75-
76- ct . equal ( readFileSyncStub . args [ 0 ] [ 0 ] , path . join ( mockedHomedir , '.env' ) )
77- ct . ok ( homedirStub . called )
78- homedirStub . restore ( )
79- } )
52+ // t.test('takes option for path along with home directory char ~', ct => {
53+ // ct.plan(2)
54+ // const mockedHomedir = '/Users/dummy'
55+ // const homedirStub = sinon.stub(os, 'homedir').returns(mockedHomedir)
56+ // const testPath = '~/.env'
57+ // dotenv.config({ path: testPath })
58+ //
59+ // ct.equal(readFileSyncStub.args[0][0], path.join(mockedHomedir, '.env'))
60+ // ct.ok(homedirStub.called)
61+ // homedirStub.restore()
62+ // })
8063
8164t . test ( 'takes option for encoding' , ct => {
8265 ct . plan ( 1 )
8366
8467 const testEncoding = 'latin1'
8568 dotenv . config ( { encoding : testEncoding } )
8669
70+ const readFileSyncStub = sinon . stub ( fs , 'readFileSync' ) . returns ( 'test=foo' )
71+
8772 ct . equal ( readFileSyncStub . args [ 0 ] [ 1 ] . encoding , testEncoding )
73+ readFileSyncStub . restore ( )
8874} )
8975
9076t . test ( 'takes option for debug' , ct => {
@@ -100,80 +86,70 @@ t.test('takes option for debug', ct => {
10086t . test ( 'reads path with encoding, parsing output to process.env' , ct => {
10187 ct . plan ( 2 )
10288
103- const res = dotenv . config ( )
89+ const env = dotenv . config ( )
10490
105- ct . same ( res . parsed , mockParseResponse )
106- ct . equal ( readFileSyncStub . callCount , 1 )
91+ ct . same ( env . parsed . BASIC , 'basic' )
92+ ct . same ( process . env . BASIC , 'basic' )
10793} )
10894
10995t . test ( 'does not write over keys already in process.env' , ct => {
11096 ct . plan ( 2 )
11197
11298 const existing = 'bar'
113- process . env . test = existing
114- // 'foo' returned as value in `beforeEach`. should keep this 'bar'
99+ process . env . BASIC = existing
115100 const env = dotenv . config ( )
116101
117- ct . equal ( env . parsed && env . parsed . test , mockParseResponse . test )
118- ct . equal ( process . env . test , existing )
102+ ct . equal ( env . parsed . BASIC , 'basic' )
103+ ct . equal ( process . env . BASIC , existing )
119104} )
120105
121106t . test ( 'does write over keys already in process.env if override turned on' , ct => {
122107 ct . plan ( 2 )
123108
124109 const existing = 'bar'
125- process . env . test = existing
126- // 'foo' returned as value in `beforeEach`. should keep this 'bar'
110+ process . env . BASIC = existing
127111 const env = dotenv . config ( { override : true } )
128112
129- ct . equal ( env . parsed && env . parsed . test , mockParseResponse . test )
130- ct . equal ( process . env . test , 'foo ' )
113+ ct . equal ( env . parsed . BASIC , 'basic' )
114+ ct . equal ( process . env . BASIC , 'basic ' )
131115} )
132116
133- t . test (
134- 'does not write over keys already in process.env if the key has a falsy value' ,
135- ct => {
136- ct . plan ( 2 )
117+ t . test ( 'does not write over keys already in process.env if the key has a falsy value' , ct => {
118+ ct . plan ( 2 )
137119
138- const existing = ''
139- process . env . test = existing
140- // 'foo' returned as value in `beforeEach`. should keep this ''
141- const env = dotenv . config ( )
120+ const existing = ''
121+ process . env . BASIC = existing
122+ const env = dotenv . config ( )
142123
143- ct . equal ( env . parsed && env . parsed . test , mockParseResponse . test )
144- // NB: process.env.test becomes undefined on Windows
145- ct . notOk ( process . env . test )
146- }
147- )
124+ ct . equal ( env . parsed . BASIC , 'basic' )
125+ ct . equal ( process . env . BASIC , undefined )
126+ } )
148127
149- t . test (
150- 'does write over keys already in process.env if the key has a falsy value but override is set to true' ,
151- ct => {
152- ct . plan ( 2 )
128+ t . test ( 'does write over keys already in process.env if the key has a falsy value but override is set to true' , ct => {
129+ ct . plan ( 2 )
153130
154- const existing = ''
155- process . env . test = existing
156- // 'foo' returned as value in `beforeEach`. should keep this ''
157- const env = dotenv . config ( { override : true } )
131+ const existing = ''
132+ process . env . BASIC = existing
133+ // 'foo' returned as value in `beforeEach`. should keep this ''
134+ const env = dotenv . config ( { override : true } )
158135
159- ct . equal ( env . parsed && env . parsed . test , mockParseResponse . test )
160- // NB: process.env.test becomes undefined on Windows
161- ct . ok ( process . env . test )
162- }
163- )
136+ ct . equal ( env . parsed . BASIC , 'basic' )
137+ ct . equal ( process . env . BASIC , '' )
138+ // ct.ok(process.env.test)
139+ } )
164140
165141t . test ( 'can write to a different object rather than process.env' , ct => {
166142 ct . plan ( 3 )
167143
168- process . env . test = 'other' // reset process.env
144+ process . env . BASIC = 'other' // reset process.env
169145
170146 const myObject = { }
171147 const env = dotenv . config ( { processEnv : myObject } )
172148
173- ct . equal ( env . parsed && env . parsed . test , mockParseResponse . test )
174- console . log ( 'logging' , process . env . test )
175- ct . equal ( process . env . test , 'other' )
176- ct . equal ( myObject . test , mockParseResponse . test )
149+ ct . equal ( env . parsed . BASIC , 'basic' )
150+ console . log ( 'logging' , process . env . BASIC )
151+ ct . equal ( process . env . BASIC , 'other' )
152+ ct . equal ( myObject . BASIC , 'basic' )
177153} )
178154
179155t . test ( 'returns parsed object' , ct => {
@@ -188,16 +164,21 @@ t.test('returns parsed object', ct => {
188164t . test ( 'returns any errors thrown from reading file or parsing' , ct => {
189165 ct . plan ( 1 )
190166
167+ const readFileSyncStub = sinon . stub ( fs , 'readFileSync' ) . returns ( 'test=foo' )
168+
191169 readFileSyncStub . throws ( )
192170 const env = dotenv . config ( )
193171
194172 ct . type ( env . error , Error )
173+
174+ readFileSyncStub . restore ( )
195175} )
196176
197177t . test ( 'logs any errors thrown from reading file or parsing when in debug mode' , ct => {
198178 ct . plan ( 2 )
199179
200180 const logStub = sinon . stub ( console , 'log' )
181+ const readFileSyncStub = sinon . stub ( fs , 'readFileSync' ) . returns ( 'test=foo' )
201182
202183 readFileSyncStub . throws ( )
203184 const env = dotenv . config ( { debug : true } )
@@ -206,6 +187,7 @@ t.test('logs any errors thrown from reading file or parsing when in debug mode',
206187 ct . type ( env . error , Error )
207188
208189 logStub . restore ( )
190+ readFileSyncStub . restore ( )
209191} )
210192
211193t . test ( 'logs any errors parsing when in debug and override mode' , ct => {
0 commit comments