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