/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */

/* eslint-env node */

const test = require('tape');

const getEnvironment = require('../../config/environment.js');

test('config has the correct environment settings', function (t) {
  [
    {
      environment: 'production',
      CONSUL_BINARY_TYPE: 'oss',
      operatorConfig: {
        APIPrefix: '',
      },
    },
    {
      environment: 'test',
      CONSUL_BINARY_TYPE: 'oss',
      operatorConfig: {
        ACLsEnabled: true,
        NamespacesEnabled: false,
        SSOEnabled: false,
        PartitionsEnabled: false,
        PeeringEnabled: true,
        HCPEnabled: false,
        LocalDatacenter: 'dc1',
        PrimaryDatacenter: 'dc1',
        APIPrefix: '',
      },
    },
    {
      $: {
        CONSUL_NSPACES_ENABLED: 1,
      },
      environment: 'test',
      CONSUL_BINARY_TYPE: 'oss',
      operatorConfig: {
        ACLsEnabled: true,
        NamespacesEnabled: true,
        SSOEnabled: false,
        PartitionsEnabled: false,
        PeeringEnabled: true,
        HCPEnabled: false,
        LocalDatacenter: 'dc1',
        PrimaryDatacenter: 'dc1',
        APIPrefix: '',
      },
    },
    {
      $: {
        CONSUL_SSO_ENABLED: 1,
      },
      environment: 'test',
      CONSUL_BINARY_TYPE: 'oss',
      operatorConfig: {
        ACLsEnabled: true,
        NamespacesEnabled: false,
        SSOEnabled: true,
        PartitionsEnabled: false,
        PeeringEnabled: true,
        HCPEnabled: false,
        LocalDatacenter: 'dc1',
        PrimaryDatacenter: 'dc1',
        APIPrefix: '',
      },
    },
    {
      environment: 'staging',
      CONSUL_BINARY_TYPE: 'oss',
      operatorConfig: {
        ACLsEnabled: true,
        NamespacesEnabled: true,
        SSOEnabled: true,
        PartitionsEnabled: true,
        PeeringEnabled: true,
        HCPEnabled: false,
        LocalDatacenter: 'dc1',
        PrimaryDatacenter: 'dc1',
        APIPrefix: '',
      },
    },
  ].forEach(function (item) {
    const env = getEnvironment(
      item.environment,
      typeof item.$ !== 'undefined' ? item.$ : undefined
    );
    Object.keys(item).forEach(function (key) {
      if (key === '$') {
        return;
      }
      t.deepEqual(
        env[key],
        item[key],
        `Expect ${key} to equal ${item[key]} in the ${item.environment} environment ${
          typeof item.$ !== 'undefined' ? `(with ${JSON.stringify(item.$)})` : ''
        }`
      );
    });
  });
  t.end();
});
