25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

206 lines
6.9 KiB

  1. # imports - standard imports
  2. import json
  3. import os
  4. import subprocess
  5. import unittest
  6. # imports - third paty imports
  7. import git
  8. # imports - module imports
  9. from bench.utils import exec_cmd
  10. from bench.app import App
  11. from bench.tests.test_base import XHIVEFRAMEWORK_BRANCH, TestBenchBase
  12. from bench.bench import Bench
  13. # changed from xhiveframework_theme because it wasn't maintained and incompatible,
  14. # chat app & wiki was breaking too. hopefully xhiveframework_docs will be maintained
  15. # for longer since docs.xhiveerp.com is powered by it ;)
  16. TEST_XHIVEFRAMEWORK_APP = "xhiveframework_docs"
  17. class TestBenchInit(TestBenchBase):
  18. def test_utils(self):
  19. self.assertEqual(subprocess.call("bench"), 0)
  20. def test_init(self, bench_name="test-bench", **kwargs):
  21. self.init_bench(bench_name, **kwargs)
  22. app = App("file:///tmp/xhiveframework")
  23. self.assertTupleEqual(
  24. (app.mount_path, app.url, app.repo, app.app_name, app.org),
  25. ("/tmp/xhiveframework", "file:///tmp/xhiveframework", "xhiveframework", "xhiveframework", "xhiveframework"),
  26. )
  27. self.assert_folders(bench_name)
  28. self.assert_virtual_env(bench_name)
  29. self.assert_config(bench_name)
  30. test_bench = Bench(bench_name)
  31. app = App("xhiveframework", bench=test_bench)
  32. self.assertEqual(app.from_apps, True)
  33. def basic(self):
  34. try:
  35. self.test_init()
  36. except Exception:
  37. print(self.get_traceback())
  38. def test_multiple_benches(self):
  39. for bench_name in ("test-bench-1", "test-bench-2"):
  40. self.init_bench(bench_name, skip_assets=True)
  41. self.assert_common_site_config(
  42. "test-bench-1",
  43. {
  44. "webserver_port": 8000,
  45. "socketio_port": 9000,
  46. "file_watcher_port": 6787,
  47. "redis_queue": "redis://127.0.0.1:11000",
  48. "redis_socketio": "redis://127.0.0.1:13000",
  49. "redis_cache": "redis://127.0.0.1:13000",
  50. },
  51. )
  52. self.assert_common_site_config(
  53. "test-bench-2",
  54. {
  55. "webserver_port": 8001,
  56. "socketio_port": 9001,
  57. "file_watcher_port": 6788,
  58. "redis_queue": "redis://127.0.0.1:11001",
  59. "redis_socketio": "redis://127.0.0.1:13001",
  60. "redis_cache": "redis://127.0.0.1:13001",
  61. },
  62. )
  63. def test_new_site(self):
  64. bench_name = "test-bench"
  65. site_name = "test-site.local"
  66. bench_path = os.path.join(self.benches_path, bench_name)
  67. site_path = os.path.join(bench_path, "sites", site_name)
  68. site_config_path = os.path.join(site_path, "site_config.json")
  69. self.init_bench(bench_name)
  70. self.new_site(site_name, bench_name)
  71. self.assertTrue(os.path.exists(site_path))
  72. self.assertTrue(os.path.exists(os.path.join(site_path, "private", "backups")))
  73. self.assertTrue(os.path.exists(os.path.join(site_path, "private", "files")))
  74. self.assertTrue(os.path.exists(os.path.join(site_path, "public", "files")))
  75. self.assertTrue(os.path.exists(site_config_path))
  76. with open(site_config_path) as f:
  77. site_config = json.loads(f.read())
  78. for key in ("db_name", "db_password"):
  79. self.assertTrue(key in site_config)
  80. self.assertTrue(site_config[key])
  81. def test_get_app(self):
  82. self.init_bench("test-bench", skip_assets=True)
  83. bench_path = os.path.join(self.benches_path, "test-bench")
  84. exec_cmd(f"bench get-app {TEST_XHIVEFRAMEWORK_APP} --skip-assets", cwd=bench_path)
  85. self.assertTrue(os.path.exists(os.path.join(bench_path, "apps", TEST_XHIVEFRAMEWORK_APP)))
  86. app_installed_in_env = TEST_XHIVEFRAMEWORK_APP in subprocess.check_output(
  87. ["bench", "pip", "freeze"], cwd=bench_path
  88. ).decode("utf8")
  89. self.assertTrue(app_installed_in_env)
  90. @unittest.skipIf(XHIVEFRAMEWORK_BRANCH != "develop", "only for develop branch")
  91. def test_get_app_resolve_deps(self):
  92. XHIVEFRAMEWORK_APP = "healthcare"
  93. self.init_bench("test-bench", skip_assets=True)
  94. bench_path = os.path.join(self.benches_path, "test-bench")
  95. exec_cmd(f"bench get-app {XHIVEFRAMEWORK_APP} --resolve-deps --skip-assets", cwd=bench_path)
  96. self.assertTrue(os.path.exists(os.path.join(bench_path, "apps", XHIVEFRAMEWORK_APP)))
  97. states_path = os.path.join(bench_path, "sites", "apps.json")
  98. self.assertTrue(os.path.exists(states_path))
  99. with open(states_path) as f:
  100. states = json.load(f)
  101. self.assertTrue(XHIVEFRAMEWORK_APP in states)
  102. def test_install_app(self):
  103. bench_name = "test-bench"
  104. site_name = "install-app.test"
  105. bench_path = os.path.join(self.benches_path, "test-bench")
  106. self.init_bench(bench_name, skip_assets=True)
  107. exec_cmd(
  108. f"bench get-app {TEST_XHIVEFRAMEWORK_APP} --branch master --skip-assets", cwd=bench_path
  109. )
  110. self.assertTrue(os.path.exists(os.path.join(bench_path, "apps", TEST_XHIVEFRAMEWORK_APP)))
  111. # check if app is installed
  112. app_installed_in_env = TEST_XHIVEFRAMEWORK_APP in subprocess.check_output(
  113. ["bench", "pip", "freeze"], cwd=bench_path
  114. ).decode("utf8")
  115. self.assertTrue(app_installed_in_env)
  116. # create and install app on site
  117. self.new_site(site_name, bench_name)
  118. installed_app = not exec_cmd(
  119. f"bench --site {site_name} install-app {TEST_XHIVEFRAMEWORK_APP}",
  120. cwd=bench_path,
  121. _raise=False,
  122. )
  123. if installed_app:
  124. app_installed_on_site = subprocess.check_output(
  125. ["bench", "--site", site_name, "list-apps"], cwd=bench_path
  126. ).decode("utf8")
  127. self.assertTrue(TEST_XHIVEFRAMEWORK_APP in app_installed_on_site)
  128. def test_remove_app(self):
  129. self.init_bench("test-bench", skip_assets=True)
  130. bench_path = os.path.join(self.benches_path, "test-bench")
  131. exec_cmd(
  132. f"bench get-app {TEST_XHIVEFRAMEWORK_APP} --branch master --overwrite --skip-assets",
  133. cwd=bench_path,
  134. )
  135. exec_cmd(f"bench remove-app {TEST_XHIVEFRAMEWORK_APP}", cwd=bench_path)
  136. with open(os.path.join(bench_path, "sites", "apps.txt")) as f:
  137. self.assertFalse(TEST_XHIVEFRAMEWORK_APP in f.read())
  138. self.assertFalse(
  139. TEST_XHIVEFRAMEWORK_APP
  140. in subprocess.check_output(["bench", "pip", "freeze"], cwd=bench_path).decode("utf8")
  141. )
  142. self.assertFalse(os.path.exists(os.path.join(bench_path, "apps", TEST_XHIVEFRAMEWORK_APP)))
  143. def test_switch_to_branch(self):
  144. self.init_bench("test-bench", skip_assets=True)
  145. bench_path = os.path.join(self.benches_path, "test-bench")
  146. app_path = os.path.join(bench_path, "apps", "xhiveframework")
  147. # * chore: change to 14 when avalible
  148. prevoius_branch = "version-13"
  149. if XHIVEFRAMEWORK_BRANCH != "develop":
  150. # assuming we follow `version-#`
  151. prevoius_branch = f"version-{int(XHIVEFRAMEWORK_BRANCH.split('-')[1]) - 1}"
  152. successful_switch = not exec_cmd(
  153. f"bench switch-to-branch {prevoius_branch} xhiveframework --upgrade",
  154. cwd=bench_path,
  155. _raise=False,
  156. )
  157. if successful_switch:
  158. app_branch_after_switch = str(git.Repo(path=app_path).active_branch)
  159. self.assertEqual(prevoius_branch, app_branch_after_switch)
  160. successful_switch = not exec_cmd(
  161. f"bench switch-to-branch {XHIVEFRAMEWORK_BRANCH} xhiveframework --upgrade",
  162. cwd=bench_path,
  163. _raise=False,
  164. )
  165. if successful_switch:
  166. app_branch_after_second_switch = str(git.Repo(path=app_path).active_branch)
  167. self.assertEqual(XHIVEFRAMEWORK_BRANCH, app_branch_after_second_switch)
  168. if __name__ == "__main__":
  169. unittest.main()