environment_test.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import codecs
  2. import os
  3. import shutil
  4. import tempfile
  5. from ddt import data
  6. from ddt import ddt
  7. from ddt import unpack
  8. from compose.config.environment import env_vars_from_file
  9. from compose.config.environment import Environment
  10. from tests import unittest
  11. @ddt
  12. class EnvironmentTest(unittest.TestCase):
  13. @classmethod
  14. def test_get_simple(self):
  15. env = Environment({
  16. 'FOO': 'bar',
  17. 'BAR': '1',
  18. 'BAZ': ''
  19. })
  20. assert env.get('FOO') == 'bar'
  21. assert env.get('BAR') == '1'
  22. assert env.get('BAZ') == ''
  23. @classmethod
  24. def test_get_undefined(self):
  25. env = Environment({
  26. 'FOO': 'bar'
  27. })
  28. assert env.get('FOOBAR') is None
  29. @classmethod
  30. def test_get_boolean(self):
  31. env = Environment({
  32. 'FOO': '',
  33. 'BAR': '0',
  34. 'BAZ': 'FALSE',
  35. 'FOOBAR': 'true',
  36. })
  37. assert env.get_boolean('FOO') is False
  38. assert env.get_boolean('BAR') is False
  39. assert env.get_boolean('BAZ') is False
  40. assert env.get_boolean('FOOBAR') is True
  41. assert env.get_boolean('UNDEFINED') is False
  42. @data(
  43. ('unicode exclude test', '\ufeffPARK_BOM=박봄\n', {'PARK_BOM': '박봄'}),
  44. ('export prefixed test', 'export PREFIXED_VARS=yes\n', {"PREFIXED_VARS": "yes"}),
  45. ('quoted vars test', "QUOTED_VARS='yes'\n", {"QUOTED_VARS": "yes"}),
  46. ('double quoted vars test', 'DOUBLE_QUOTED_VARS="yes"\n', {"DOUBLE_QUOTED_VARS": "yes"}),
  47. ('extra spaces test', 'SPACES_VARS = "yes"\n', {"SPACES_VARS": "yes"}),
  48. )
  49. @unpack
  50. def test_env_vars(self, test_name, content, expected):
  51. tmpdir = tempfile.mkdtemp('env_file')
  52. self.addCleanup(shutil.rmtree, tmpdir)
  53. file_abs_path = str(os.path.join(tmpdir, ".env"))
  54. with codecs.open(file_abs_path, 'w', encoding='utf-8') as f:
  55. f.write(content)
  56. assert env_vars_from_file(file_abs_path) == expected, '"{}" Failed'.format(test_name)