mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 20:13:46 +00:00 
			
		
		
		
	As puppeteer tests are similar to casper i.e both being frontend screen scraping tests, we need to use the same webpack setup as that of casper's instead of `build_for_most_tests` which is used mostly for backend related tests. This sets env variable `CASPER_TESTS` to `1` which does all the work to make it use the same setup of casper. We would want to rename that to `PUPPETEER_TESTS` and make changes to do the same as casper webpack setup when we completely replace casper with puppeteer.
		
			
				
	
	
		
			89 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| import argparse
 | |
| import subprocess
 | |
| import sys
 | |
| import os
 | |
| import shlex
 | |
| 
 | |
| ZULIP_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 | |
| 
 | |
| # Request the special webpack setup for frontend integration tests,
 | |
| # where webpack assets are compiled up front rather than running in
 | |
| # watch mode. We prefer the same for puppeteer, so the below line
 | |
| # makes the webpack similar to casper.
 | |
| #
 | |
| # TODO: Eventually, we'll want to rename this parameter.
 | |
| os.environ["CASPER_TESTS"] = "1"
 | |
| 
 | |
| os.environ["CHROMIUM_EXECUTABLE"] = os.path.join(ZULIP_PATH, "node_modules/.bin/chromium")
 | |
| os.environ.pop("http_proxy", "")
 | |
| os.environ.pop("https_proxy", "")
 | |
| 
 | |
| usage = """test-js-with-puppeteer [options]
 | |
|     test-js-with-puppeteer # Run all test files
 | |
|     test-js-with-puppeteer 09-navigation.js # Run a single test file
 | |
|     test-js-with-puppeteer 09 # Run a single test file 09-navigation.js
 | |
|     test-js-with-puppeteer 01-login.js 03-narrow.js # Run a few test files
 | |
|     test-js-with-puppeteer 01 03 # Run a few test files, 01-login.js and 03-narrow.js here"""
 | |
| parser = argparse.ArgumentParser(usage)
 | |
| 
 | |
| parser.add_argument('--interactive', dest='interactive',
 | |
|                     action="store_true",
 | |
|                     default=False, help='Run tests interactively')
 | |
| parser.add_argument('--force', dest='force',
 | |
|                     action="store_true",
 | |
|                     default=False, help='Run tests despite possible problems.')
 | |
| parser.add_argument('tests', nargs=argparse.REMAINDER,
 | |
|                     help='Specific tests to run; by default, runs all tests')
 | |
| 
 | |
| options = parser.parse_args()
 | |
| 
 | |
| sys.path.insert(0, ZULIP_PATH)
 | |
| 
 | |
| # check for the venv
 | |
| from tools.lib import sanity_check
 | |
| sanity_check.check_venv(__file__)
 | |
| 
 | |
| from tools.lib.test_script import assert_provisioning_status_ok, find_js_test_files, prepare_puppeteer_run
 | |
| from tools.lib.test_server import test_server_running
 | |
| 
 | |
| from typing import Iterable
 | |
| 
 | |
| def run_tests(files: Iterable[str], external_host: str) -> None:
 | |
|     test_dir = os.path.join(ZULIP_PATH, 'frontend_tests/puppeteer_tests')
 | |
|     test_files = find_js_test_files(test_dir, files)
 | |
| 
 | |
|     def run_tests() -> int:
 | |
|         ret = 1
 | |
|         for test_file in test_files:
 | |
|             test_name = os.path.basename(test_file)
 | |
|             cmd = ["node"] + [test_file]
 | |
|             print("\n\n===================== %s\nRunning %s\n\n" % (test_name, " ".join(map(shlex.quote, cmd))), flush=True)
 | |
|             ret = subprocess.call(cmd)
 | |
|             if ret != 0:
 | |
|                 return ret
 | |
|         return 0
 | |
| 
 | |
|     with test_server_running(False, external_host):
 | |
|         # Important: do this next call inside the `with` block, when Django
 | |
|         #            will be pointing at the test database.
 | |
|         subprocess.check_call('tools/setup/generate-test-credentials')
 | |
|         if options.interactive:
 | |
|             response = input('Press Enter to run tests, "q" to quit: ')
 | |
|             ret = 1
 | |
|             while response != 'q':
 | |
|                 ret = run_tests()
 | |
|                 if ret != 0:
 | |
|                     response = input('Tests failed. Press Enter to re-run tests, "q" to quit: ')
 | |
|         else:
 | |
|             ret = 1
 | |
|             ret = run_tests()
 | |
|     if ret != 0:
 | |
|         sys.exit(ret)
 | |
| 
 | |
| external_host = "zulipdev.com:9981"
 | |
| assert_provisioning_status_ok(options.force)
 | |
| prepare_puppeteer_run()
 | |
| run_tests(options.tests, external_host)
 | |
| sys.exit(0)
 |