1
- import { mkdtempSync , rmdirSync , existsSync , readFileSync } from 'fs' ;
1
+ import fs from 'fs/promises ' ;
2
2
import path from 'path' ;
3
3
import os from 'os' ;
4
4
import { UserStorage , StoragePreferences , type User } from './storage' ;
5
5
import { expect } from 'chai' ;
6
6
import type { UserPreferences } from './preferences' ;
7
7
8
+ const getPreferencesFolder = ( tmpDir : string ) => {
9
+ return path . join ( tmpDir , 'AppPreferences' ) ;
10
+ } ;
11
+
12
+ const getPreferencesFile = ( tmpDir : string ) => {
13
+ return path . join ( getPreferencesFolder ( tmpDir ) , 'General.json' ) ;
14
+ } ;
15
+
8
16
describe ( 'storage' , function ( ) {
9
17
let tmpDir : string ;
10
18
describe ( 'UserStorage' , function ( ) {
11
19
let storedUser : User ;
12
20
let userStorage : UserStorage ;
13
21
before ( async function ( ) {
14
- tmpDir = mkdtempSync ( path . join ( os . tmpdir ( ) ) ) ;
22
+ tmpDir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) ) ) ;
15
23
userStorage = new UserStorage ( tmpDir ) ;
16
24
storedUser = await userStorage . getOrCreate ( '' ) ;
17
25
} ) ;
18
- after ( function ( ) {
19
- rmdirSync ( tmpDir , { recursive : true } ) ;
26
+ after ( async function ( ) {
27
+ await fs . rmdir ( tmpDir , { recursive : true } ) ;
20
28
} ) ;
21
29
22
30
it ( 'creates a new user if user does not exist' , async function ( ) {
@@ -47,12 +55,12 @@ describe('storage', function () {
47
55
const defaultPreferences = {
48
56
showedNetworkOptIn : true ,
49
57
} as unknown as UserPreferences ;
50
- beforeEach ( function ( ) {
51
- tmpDir = mkdtempSync ( path . join ( os . tmpdir ( ) ) ) ;
58
+ beforeEach ( async function ( ) {
59
+ tmpDir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) ) ) ;
52
60
} ) ;
53
61
54
- afterEach ( function ( ) {
55
- rmdirSync ( tmpDir , { recursive : true } ) ;
62
+ afterEach ( async function ( ) {
63
+ await fs . rmdir ( tmpDir , { recursive : true } ) ;
56
64
} ) ;
57
65
58
66
it ( 'sets up the storage' , async function ( ) {
@@ -61,22 +69,19 @@ describe('storage', function () {
61
69
62
70
const storage = new StoragePreferences ( defaultPreferences , tmpDir ) ;
63
71
64
- const preferencesDir = path . join ( tmpDir , 'AppPreferences' ) ;
65
- const preferencesFile = path . join (
66
- tmpDir ,
67
- 'AppPreferences' ,
68
- 'General.json'
69
- ) ;
72
+ const preferencesDir = getPreferencesFolder ( tmpDir ) ;
73
+ const preferencesFile = getPreferencesFile ( tmpDir ) ;
70
74
71
- expect ( existsSync ( preferencesDir ) ) . to . be . false ;
72
- expect ( existsSync ( preferencesFile ) ) . to . be . false ;
75
+ expect ( async ( ) => await fs . access ( preferencesDir ) ) . to . throw ;
76
+ expect ( async ( ) => await fs . access ( preferencesFile ) ) . to . throw ;
73
77
74
78
await storage . setup ( ) ;
75
79
76
- expect ( existsSync ( preferencesDir ) ) . to . be . true ;
77
- expect ( existsSync ( preferencesFile ) ) . to . be . true ;
80
+ expect ( async ( ) => await fs . access ( preferencesDir ) ) . to . not . throw ;
81
+ expect ( async ( ) => await fs . access ( preferencesFile ) ) . to . not . throw ;
82
+
78
83
expect (
79
- JSON . parse ( readFileSync ( preferencesFile ) . toString ( ) )
84
+ JSON . parse ( ( await fs . readFile ( preferencesFile ) ) . toString ( ) )
80
85
) . to . deep . equal ( defaultPreferences ) ;
81
86
} ) ;
82
87
@@ -93,5 +98,26 @@ describe('storage', function () {
93
98
currentUserId : '123456789' ,
94
99
} ) ;
95
100
} ) ;
101
+
102
+ it ( 'returns default preference values if its not stored on disk' , async function ( ) {
103
+ const storage = new StoragePreferences ( defaultPreferences , tmpDir ) ;
104
+
105
+ // manually setup the file with no content
106
+ await fs . mkdir ( getPreferencesFolder ( tmpDir ) ) ;
107
+ await fs . writeFile (
108
+ getPreferencesFile ( tmpDir ) ,
109
+ JSON . stringify ( { } ) ,
110
+ 'utf-8'
111
+ ) ;
112
+
113
+ await storage . updatePreferences ( {
114
+ currentUserId : '123456789' ,
115
+ } ) ;
116
+
117
+ expect ( storage . getPreferences ( ) ) . to . deep . equal ( {
118
+ ...defaultPreferences ,
119
+ currentUserId : '123456789' ,
120
+ } ) ;
121
+ } ) ;
96
122
} ) ;
97
123
} ) ;
0 commit comments