1import fs from 'fs-extra';
2import { vol } from 'memfs';
3import path from 'path';
4
5import UserSettings from '../UserSettings';
6
7describe(UserSettings.getDirectory, () => {
8  beforeEach(() => {
9    delete process.env.__UNSAFE_EXPO_HOME_DIRECTORY;
10    delete process.env.EXPO_STAGING;
11    delete process.env.EXPO_LOCAL;
12  });
13  afterAll(() => {
14    delete process.env.__UNSAFE_EXPO_HOME_DIRECTORY;
15    delete process.env.EXPO_STAGING;
16    delete process.env.EXPO_LOCAL;
17  });
18
19  it(`gets the default state directory`, () => {
20    expect(UserSettings.getDirectory()).toBe('/home/.expo');
21  });
22  it(`gets the staging state directory`, () => {
23    process.env.EXPO_STAGING = 'true';
24    expect(UserSettings.getDirectory()).toBe('/home/.expo-staging');
25  });
26  it(`gets the local state directory`, () => {
27    process.env.EXPO_LOCAL = 'true';
28    expect(UserSettings.getDirectory()).toBe('/home/.expo-local');
29  });
30  it(`gets the custom state directory`, () => {
31    process.env.__UNSAFE_EXPO_HOME_DIRECTORY = '/foobar/yolo';
32    expect(UserSettings.getDirectory()).toBe('/foobar/yolo');
33  });
34});
35
36const authStub: any = {
37  sessionSecret: 'SESSION_SECRET',
38  userId: 'USER_ID',
39  username: 'USERNAME',
40  currentConnection: 'Username-Password-Authentication',
41};
42
43beforeEach(() => {
44  vol.reset();
45});
46
47describe(UserSettings.getSession, () => {
48  it('returns null when session is not stored', () => {
49    expect(UserSettings.getSession()).toBeNull();
50  });
51
52  it('returns stored session data', async () => {
53    await fs.mkdirp(path.dirname(UserSettings.getFilePath()));
54    await fs.writeJSON(UserSettings.getFilePath(), { auth: authStub });
55    expect(UserSettings.getSession()).toMatchObject(authStub);
56  });
57});
58
59describe(UserSettings.setSessionAsync, () => {
60  it('stores empty session data', async () => {
61    await UserSettings.setSessionAsync();
62    expect(await fs.pathExists(UserSettings.getFilePath())).toBeTruthy();
63  });
64
65  it('stores actual session data', async () => {
66    await UserSettings.setSessionAsync(authStub);
67    expect(await fs.readJSON(UserSettings.getFilePath())).toMatchObject({ auth: authStub });
68  });
69});
70
71describe(UserSettings.getAccessToken, () => {
72  it('returns null when envvar is undefined', () => {
73    expect(UserSettings.getAccessToken()).toBeNull();
74  });
75
76  it('returns token when envar is defined', () => {
77    process.env.EXPO_TOKEN = 'mytesttoken';
78    expect(UserSettings.getAccessToken()).toBe('mytesttoken');
79    process.env.EXPO_TOKEN = undefined;
80  });
81});
82