environment_test.py 2.1 KB

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