import json
import os

import pytest

from app.cloudfoundry_config import (
    extract_cloudfoundry_config,
    set_config_env_vars,
)


@pytest.fixture
def cloudfoundry_config():
    return {
        'postgres': [{
            'credentials': {
                'uri': 'postgres uri'
            }
        }],
        'user-provided': []
    }


@pytest.fixture
def cloudfoundry_environ(os_environ, cloudfoundry_config):
    os.environ['VCAP_SERVICES'] = json.dumps(cloudfoundry_config)
    os.environ['VCAP_APPLICATION'] = '{"space_name": "🚀🌌"}'


def test_extract_cloudfoundry_config_populates_other_vars(cloudfoundry_environ):
    extract_cloudfoundry_config()

    assert os.environ['SQLALCHEMY_DATABASE_URI'] == 'postgresql uri'
    assert os.environ['NOTIFY_ENVIRONMENT'] == '🚀🌌'
    assert os.environ['NOTIFY_LOG_PATH'] == '/home/vcap/logs/app.log'


def test_set_config_env_vars_ignores_unknown_configs(cloudfoundry_config, cloudfoundry_environ):
    cloudfoundry_config['foo'] = {'credentials': {'foo': 'foo'}}
    cloudfoundry_config['user-provided'].append({
        'name': 'bar', 'credentials': {'bar': 'bar'}
    })

    set_config_env_vars(cloudfoundry_config)

    assert 'foo' not in os.environ
    assert 'bar' not in os.environ

import json
import os

import pytest

from app.cloudfoundry_config import (
    extract_cloudfoundry_config,
    set_config_env_vars,
)


@pytest.fixture
def cloudfoundry_config():
    return {
        'postgres': [{
            'credentials': {
                'uri': 'postgres uri'
            }
        }],
        'user-provided': []
    }


@pytest.fixture
def vcap_application(os_environ):
    os.environ['VCAP_APPLICATION'] = '{"space_name": "🚀🌌"}'


def test_extract_cloudfoundry_config_populates_other_vars(cloudfoundry_config, vcap_application):
    os.environ['VCAP_SERVICES'] = json.dumps(cloudfoundry_config)
    extract_cloudfoundry_config()

    assert os.environ['SQLALCHEMY_DATABASE_URI'] == 'postgresql uri'
    assert os.environ['NOTIFY_ENVIRONMENT'] == '🚀🌌'
    assert os.environ['NOTIFY_LOG_PATH'] == '/home/vcap/logs/app.log'


def test_set_config_env_vars_ignores_unknown_configs(cloudfoundry_config, vcap_application):
    cloudfoundry_config['foo'] = {'credentials': {'foo': 'foo'}}
    cloudfoundry_config['user-provided'].append({
        'name': 'bar', 'credentials': {'bar': 'bar'}
    })

    set_config_env_vars(cloudfoundry_config)

    assert 'foo' not in os.environ
    assert 'bar' not in os.environ

Move setting VCAP_SERVICES out of fixture
Move setting VCAP_SERVICES out of fixture

This was inconsistent with the source data for the fixture being
overidden in some of the tests. We only need to set it in the env
once, so it makes sense to just put the code there.

  import json
  import os
  
  import pytest
  
  from app.cloudfoundry_config import (
      extract_cloudfoundry_config,
      set_config_env_vars,
  )
  
  
  @pytest.fixture
  def cloudfoundry_config():
      return {
          'postgres': [{
              'credentials': {
                  'uri': 'postgres uri'
              }
          }],
          'user-provided': []
      }
  
  
  @pytest.fixture
+ def vcap_application(os_environ):
- def cloudfoundry_environ(os_environ, cloudfoundry_config):
-     os.environ['VCAP_SERVICES'] = json.dumps(cloudfoundry_config)
      os.environ['VCAP_APPLICATION'] = '{"space_name": "🚀🌌"}'
  
  
- def test_extract_cloudfoundry_config_populates_other_vars(cloudfoundry_environ):
+ def test_extract_cloudfoundry_config_populates_other_vars(cloudfoundry_config, vcap_application):
+     os.environ['VCAP_SERVICES'] = json.dumps(cloudfoundry_config)
      extract_cloudfoundry_config()
  
      assert os.environ['SQLALCHEMY_DATABASE_URI'] == 'postgresql uri'
      assert os.environ['NOTIFY_ENVIRONMENT'] == '🚀🌌'
      assert os.environ['NOTIFY_LOG_PATH'] == '/home/vcap/logs/app.log'
  
  
- def test_set_config_env_vars_ignores_unknown_configs(cloudfoundry_config, cloudfoundry_environ):
+ def test_set_config_env_vars_ignores_unknown_configs(cloudfoundry_config, vcap_application):
      cloudfoundry_config['foo'] = {'credentials': {'foo': 'foo'}}
      cloudfoundry_config['user-provided'].append({
          'name': 'bar', 'credentials': {'bar': 'bar'}
      })
  
      set_config_env_vars(cloudfoundry_config)
  
      assert 'foo' not in os.environ
      assert 'bar' not in os.environ
  
Move setting VCAP_SERVICES out of fixture
## Code Before:
import json
import os

import pytest

from app.cloudfoundry_config import (
    extract_cloudfoundry_config,
    set_config_env_vars,
)


@pytest.fixture
def cloudfoundry_config():
    return {
        'postgres': [{
            'credentials': {
                'uri': 'postgres uri'
            }
        }],
        'user-provided': []
    }


@pytest.fixture
def cloudfoundry_environ(os_environ, cloudfoundry_config):
    os.environ['VCAP_SERVICES'] = json.dumps(cloudfoundry_config)
    os.environ['VCAP_APPLICATION'] = '{"space_name": "🚀🌌"}'


def test_extract_cloudfoundry_config_populates_other_vars(cloudfoundry_environ):
    extract_cloudfoundry_config()

    assert os.environ['SQLALCHEMY_DATABASE_URI'] == 'postgresql uri'
    assert os.environ['NOTIFY_ENVIRONMENT'] == '🚀🌌'
    assert os.environ['NOTIFY_LOG_PATH'] == '/home/vcap/logs/app.log'


def test_set_config_env_vars_ignores_unknown_configs(cloudfoundry_config, cloudfoundry_environ):
    cloudfoundry_config['foo'] = {'credentials': {'foo': 'foo'}}
    cloudfoundry_config['user-provided'].append({
        'name': 'bar', 'credentials': {'bar': 'bar'}
    })

    set_config_env_vars(cloudfoundry_config)

    assert 'foo' not in os.environ
    assert 'bar' not in os.environ

## Instruction:
Move setting VCAP_SERVICES out of fixture
## Code After:
import json
import os

import pytest

from app.cloudfoundry_config import (
    extract_cloudfoundry_config,
    set_config_env_vars,
)


@pytest.fixture
def cloudfoundry_config():
    return {
        'postgres': [{
            'credentials': {
                'uri': 'postgres uri'
            }
        }],
        'user-provided': []
    }


@pytest.fixture
def vcap_application(os_environ):
    os.environ['VCAP_APPLICATION'] = '{"space_name": "🚀🌌"}'


def test_extract_cloudfoundry_config_populates_other_vars(cloudfoundry_config, vcap_application):
    os.environ['VCAP_SERVICES'] = json.dumps(cloudfoundry_config)
    extract_cloudfoundry_config()

    assert os.environ['SQLALCHEMY_DATABASE_URI'] == 'postgresql uri'
    assert os.environ['NOTIFY_ENVIRONMENT'] == '🚀🌌'
    assert os.environ['NOTIFY_LOG_PATH'] == '/home/vcap/logs/app.log'


def test_set_config_env_vars_ignores_unknown_configs(cloudfoundry_config, vcap_application):
    cloudfoundry_config['foo'] = {'credentials': {'foo': 'foo'}}
    cloudfoundry_config['user-provided'].append({
        'name': 'bar', 'credentials': {'bar': 'bar'}
    })

    set_config_env_vars(cloudfoundry_config)

    assert 'foo' not in os.environ
    assert 'bar' not in os.environ
