environment_test.py 2.0 KB

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