# imports - standard imports import json import os import subprocess import unittest # imports - third paty imports import git # imports - module imports from bench.utils import exec_cmd from bench.app import App from bench.tests.test_base import XHIVEFRAMEWORK_BRANCH, TestBenchBase from bench.bench import Bench # changed from xhiveframework_theme because it wasn't maintained and incompatible, # chat app & wiki was breaking too. hopefully xhiveframework_docs will be maintained # for longer since docs.xhiveerp.com is powered by it ;) TEST_XHIVEFRAMEWORK_APP = "xhiveframework_docs" class TestBenchInit(TestBenchBase): def test_utils(self): self.assertEqual(subprocess.call("bench"), 0) def test_init(self, bench_name="test-bench", **kwargs): self.init_bench(bench_name, **kwargs) app = App("file:///tmp/xhiveframework") self.assertTupleEqual( (app.mount_path, app.url, app.repo, app.app_name, app.org), ("/tmp/xhiveframework", "file:///tmp/xhiveframework", "xhiveframework", "xhiveframework", "xhiveframework"), ) self.assert_folders(bench_name) self.assert_virtual_env(bench_name) self.assert_config(bench_name) test_bench = Bench(bench_name) app = App("xhiveframework", bench=test_bench) self.assertEqual(app.from_apps, True) def basic(self): try: self.test_init() except Exception: print(self.get_traceback()) def test_multiple_benches(self): for bench_name in ("test-bench-1", "test-bench-2"): self.init_bench(bench_name, skip_assets=True) self.assert_common_site_config( "test-bench-1", { "webserver_port": 8000, "socketio_port": 9000, "file_watcher_port": 6787, "redis_queue": "redis://127.0.0.1:11000", "redis_socketio": "redis://127.0.0.1:13000", "redis_cache": "redis://127.0.0.1:13000", }, ) self.assert_common_site_config( "test-bench-2", { "webserver_port": 8001, "socketio_port": 9001, "file_watcher_port": 6788, "redis_queue": "redis://127.0.0.1:11001", "redis_socketio": "redis://127.0.0.1:13001", "redis_cache": "redis://127.0.0.1:13001", }, ) def test_new_site(self): bench_name = "test-bench" site_name = "test-site.local" bench_path = os.path.join(self.benches_path, bench_name) site_path = os.path.join(bench_path, "sites", site_name) site_config_path = os.path.join(site_path, "site_config.json") self.init_bench(bench_name) self.new_site(site_name, bench_name) self.assertTrue(os.path.exists(site_path)) self.assertTrue(os.path.exists(os.path.join(site_path, "private", "backups"))) self.assertTrue(os.path.exists(os.path.join(site_path, "private", "files"))) self.assertTrue(os.path.exists(os.path.join(site_path, "public", "files"))) self.assertTrue(os.path.exists(site_config_path)) with open(site_config_path) as f: site_config = json.loads(f.read()) for key in ("db_name", "db_password"): self.assertTrue(key in site_config) self.assertTrue(site_config[key]) def test_get_app(self): self.init_bench("test-bench", skip_assets=True) bench_path = os.path.join(self.benches_path, "test-bench") exec_cmd(f"bench get-app {TEST_XHIVEFRAMEWORK_APP} --skip-assets", cwd=bench_path) self.assertTrue(os.path.exists(os.path.join(bench_path, "apps", TEST_XHIVEFRAMEWORK_APP))) app_installed_in_env = TEST_XHIVEFRAMEWORK_APP in subprocess.check_output( ["bench", "pip", "freeze"], cwd=bench_path ).decode("utf8") self.assertTrue(app_installed_in_env) @unittest.skipIf(XHIVEFRAMEWORK_BRANCH != "develop", "only for develop branch") def test_get_app_resolve_deps(self): XHIVEFRAMEWORK_APP = "healthcare" self.init_bench("test-bench", skip_assets=True) bench_path = os.path.join(self.benches_path, "test-bench") exec_cmd(f"bench get-app {XHIVEFRAMEWORK_APP} --resolve-deps --skip-assets", cwd=bench_path) self.assertTrue(os.path.exists(os.path.join(bench_path, "apps", XHIVEFRAMEWORK_APP))) states_path = os.path.join(bench_path, "sites", "apps.json") self.assertTrue(os.path.exists(states_path)) with open(states_path) as f: states = json.load(f) self.assertTrue(XHIVEFRAMEWORK_APP in states) def test_install_app(self): bench_name = "test-bench" site_name = "install-app.test" bench_path = os.path.join(self.benches_path, "test-bench") self.init_bench(bench_name, skip_assets=True) exec_cmd( f"bench get-app {TEST_XHIVEFRAMEWORK_APP} --branch master --skip-assets", cwd=bench_path ) self.assertTrue(os.path.exists(os.path.join(bench_path, "apps", TEST_XHIVEFRAMEWORK_APP))) # check if app is installed app_installed_in_env = TEST_XHIVEFRAMEWORK_APP in subprocess.check_output( ["bench", "pip", "freeze"], cwd=bench_path ).decode("utf8") self.assertTrue(app_installed_in_env) # create and install app on site self.new_site(site_name, bench_name) installed_app = not exec_cmd( f"bench --site {site_name} install-app {TEST_XHIVEFRAMEWORK_APP}", cwd=bench_path, _raise=False, ) if installed_app: app_installed_on_site = subprocess.check_output( ["bench", "--site", site_name, "list-apps"], cwd=bench_path ).decode("utf8") self.assertTrue(TEST_XHIVEFRAMEWORK_APP in app_installed_on_site) def test_remove_app(self): self.init_bench("test-bench", skip_assets=True) bench_path = os.path.join(self.benches_path, "test-bench") exec_cmd( f"bench get-app {TEST_XHIVEFRAMEWORK_APP} --branch master --overwrite --skip-assets", cwd=bench_path, ) exec_cmd(f"bench remove-app {TEST_XHIVEFRAMEWORK_APP}", cwd=bench_path) with open(os.path.join(bench_path, "sites", "apps.txt")) as f: self.assertFalse(TEST_XHIVEFRAMEWORK_APP in f.read()) self.assertFalse( TEST_XHIVEFRAMEWORK_APP in subprocess.check_output(["bench", "pip", "freeze"], cwd=bench_path).decode("utf8") ) self.assertFalse(os.path.exists(os.path.join(bench_path, "apps", TEST_XHIVEFRAMEWORK_APP))) def test_switch_to_branch(self): self.init_bench("test-bench", skip_assets=True) bench_path = os.path.join(self.benches_path, "test-bench") app_path = os.path.join(bench_path, "apps", "xhiveframework") # * chore: change to 14 when avalible prevoius_branch = "version-13" if XHIVEFRAMEWORK_BRANCH != "develop": # assuming we follow `version-#` prevoius_branch = f"version-{int(XHIVEFRAMEWORK_BRANCH.split('-')[1]) - 1}" successful_switch = not exec_cmd( f"bench switch-to-branch {prevoius_branch} xhiveframework --upgrade", cwd=bench_path, _raise=False, ) if successful_switch: app_branch_after_switch = str(git.Repo(path=app_path).active_branch) self.assertEqual(prevoius_branch, app_branch_after_switch) successful_switch = not exec_cmd( f"bench switch-to-branch {XHIVEFRAMEWORK_BRANCH} xhiveframework --upgrade", cwd=bench_path, _raise=False, ) if successful_switch: app_branch_after_second_switch = str(git.Repo(path=app_path).active_branch) self.assertEqual(XHIVEFRAMEWORK_BRANCH, app_branch_after_second_switch) if __name__ == "__main__": unittest.main()