const parser = require('../src/jsonToEnv');

describe('env parser', () => {
  it('should parse empty vars', () => {
    const input = {
      variables: []
    };

    const output = parser(input);
    const expected = `vars {
}
`;

    expect(output).toEqual(expected);
  });

  it('should parse single var line', () => {
    const input = {
      variables: [
        {
          name: 'url',
          value: 'http://localhost:3000',
          enabled: true
        }
      ]
    };

    const output = parser(input);
    const expected = `vars {
  url: http://localhost:3000
}
`;
    expect(output).toEqual(expected);
  });

  it('should parse multiple var lines', () => {
    const input = {
      variables: [
        {
          name: 'url',
          value: 'http://localhost:3000',
          enabled: true
        },
        {
          name: 'port',
          value: '3000',
          enabled: false
        }
      ]
    };

    const expected = `vars {
  url: http://localhost:3000
  ~port: 3000
}
`;
    const output = parser(input);
    expect(output).toEqual(expected);
  });

  it('should parse secret vars', () => {
    const input = {
      variables: [
        {
          name: 'url',
          value: 'http://localhost:3000',
          enabled: true
        },
        {
          name: 'token',
          value: 'abracadabra',
          enabled: true,
          secret: true
        }
      ]
    };

    const output = parser(input);
    const expected = `vars {
  url: http://localhost:3000
}
vars:secret [
  token
]
`;
    expect(output).toEqual(expected);
  });

  it('should parse multiple secret vars', () => {
    const input = {
      variables: [
        {
          name: 'url',
          value: 'http://localhost:3000',
          enabled: true
        },
        {
          name: 'access_token',
          value: 'abracadabra',
          enabled: true,
          secret: true
        },
        {
          name: 'access_secret',
          value: 'abracadabra',
          enabled: false,
          secret: true
        }
      ]
    };

    const output = parser(input);
    const expected = `vars {
  url: http://localhost:3000
}
vars:secret [
  access_token,
  ~access_secret
]
`;
    expect(output).toEqual(expected);
  });

  it('should parse even if the only secret vars are present', () => {
    const input = {
      variables: [
        {
          name: 'token',
          value: 'abracadabra',
          enabled: true,
          secret: true
        }
      ]
    };

    const output = parser(input);
    const expected = `vars:secret [
  token
]
`;
    expect(output).toEqual(expected);
  });
});
