launchable 1.124.2__tar.gz → 1.124.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {launchable-1.124.2 → launchable-1.124.3}/PKG-INFO +1 -1
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/inspect/tests.py +15 -6
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/record/build.py +12 -8
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/record/tests.py +14 -8
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/subset.py +24 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/jar/exe_deploy.jar +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/launchable_client.py +23 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable.egg-info/PKG-INFO +1 -1
- {launchable-1.124.2 → launchable-1.124.3}/launchable.egg-info/SOURCES.txt +1 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/GitFile.java +6 -9
- {launchable-1.124.2 → launchable-1.124.3}/src/test/java/com/launchableinc/ingest/commits/AllTests.java +1 -0
- launchable-1.124.3/src/test/java/com/launchableinc/ingest/commits/GitFileTest.java +51 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/test_subset.py +230 -0
- {launchable-1.124.2 → launchable-1.124.3}/.bazelrc +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.bazelversion +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.editorconfig +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.github/release.yml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.github/workflows/bazel-test.yml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.github/workflows/e2e.yml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.github/workflows/pre-commit.yml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.github/workflows/python-package.yml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.github/workflows/python-publish.yml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.github/workflows/update_maven_install_json.yml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.gitignore +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.pre-commit-config.yaml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.python-version +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/.tagpr +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/CONTRIBUTING.md +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/Dockerfile +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/LICENSE.txt +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/Pipfile +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/README.md +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/WORKSPACE +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/build-java.sh +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/__main__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/app.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/compare/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/compare/subsets.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/detect_flakes.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/gate.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/helper.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/inspect/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/inspect/model.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/inspect/subset.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/record/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/record/attachment.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/record/case_event.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/record/commit.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/record/session.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/split_subset.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/stats/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/stats/test_sessions.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/test_path_writer.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/commands/verify.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/plugins/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/adb.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/ant.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/bazel.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/behave.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/codeceptjs.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/ctest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/cts.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/cucumber.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/cypress.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/dotnet.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/file.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/flutter.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/go_test.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/googletest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/gradle.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/jasmine.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/jest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/karma.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/launchable.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/maven.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/minitest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/nunit.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/playwright.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/prove.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/pytest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/raw.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/robot.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/rspec.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/vitest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/test_runners/xctest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/testpath.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/authentication.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/ci_provider.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/click.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/commands.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/commit_ingester.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/common_tz.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/env_keys.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/exceptions.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/fail_fast_mode.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/file_name_pattern.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/git_log_parser.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/glob.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/gzipgen.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/http_client.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/java.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/link.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/logger.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/no_build.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/sax.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/session.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/subprocess.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/utils/tracking.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable/version.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable.egg-info/dependency_links.txt +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable.egg-info/entry_points.txt +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable.egg-info/requires.txt +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/launchable.egg-info/top_level.txt +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/pyproject.toml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/renovate.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/setup.cfg +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/setup.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/BUILD +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/Authenticator.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/BUILD +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/ChunkStreamer.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/CommitChunkStreamer.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/CommitGraphCollector.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/CountingDiffFormatter.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/FileChunkStreamer.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/FlushableConsumer.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/GitHubActionsAuthenticator.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/GitHubIdTokenAuthenticator.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/IOConsumer.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/JSCommit.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/JSFileChange.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/Main.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/ObjectRevFilter.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/ProgressReportingConsumer.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/SSLBypass.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/TokenAuthenticator.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/TreeReceiver.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/main/java/com/launchableinc/ingest/commits/VirtualFile.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/maven_install.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/test/java/com/launchableinc/ingest/commits/BUILD +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/test/java/com/launchableinc/ingest/commits/CommitGraphCollectorTest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/test/java/com/launchableinc/ingest/commits/FileChunkStreamerTest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/test/java/com/launchableinc/ingest/commits/MainTest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/test/java/com/launchableinc/ingest/commits/PassThroughTreeReceiverImpl.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/test/java/com/launchableinc/ingest/commits/ProgressReportingConsumerTest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/test/java/com/launchableinc/ingest/commits/SSLBypassTest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/src/test/java/com/launchableinc/ingest/commits/java8-compat.sh +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/test-runner/__main__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/cli_test_case.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/compare/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/compare/test_subsets.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/inspect/test_model.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/inspect/test_subset.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/inspect/test_tests.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/record/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/record/test_attachment.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/record/test_build.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/record/test_case_event.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/record/test_commit.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/record/test_session.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/record/test_tests.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/test_api_error.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/test_detect_flakes.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/test_gate.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/test_helper.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/test_split_subset.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/commands/test_verify.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/adb/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ant/junitreport/TEST-com.launchable.HelloWorldTest.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ant/junitreport/TEST-com.launchable.library.CacheTest.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ant/junitreport/TESTS-TestSuites.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ant/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ant/src/com/launchable/HelloWorld.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ant/src/com/launchable/HelloWorldTest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ant/src/com/launchable/library/Cache.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ant/src/com/launchable/library/CacheTest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ant/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test1/test.cache_status +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test1/test.log +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test1/test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test2/test.cache_status +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test2/test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test3/test.cache_status +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test3/test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test4/test.cache_status +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test4/test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test5/test.cache_status +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test5/test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test6/test.cache_status +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test6/test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test7/test.cache_status +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test7/test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test8/test.cache_status +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test8/test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test9/test.cache_status +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test9/test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/build_event.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/build_event_rest.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/record_test_with_build_event_json_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/record_test_with_multiple_build_event_json_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/bazel/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/behave/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/behave/reports/report.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/behave/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/broken_xml/broken.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/broken_xml/normal.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/codeceptjs/codeceptjs-result.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/codeceptjs/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ctest/Testing/latest/Test.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ctest/ctest_list.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ctest/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/ctest/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cts/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cts/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cts/test_result.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/features/foo/bar.feature +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/features/foo/is_it_friday_yet.feature +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/features/foo-bar.feature +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/features/is_it_friday_yet.feature +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/record_test_json_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/report/TEST-features-foo-bar.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/report/TEST-features-foo-is_it_friday_yet.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/report/TEST-features-is_it_friday_yet.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/report/dummy.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cucumber/report/result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cypress/empty.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cypress/empty.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cypress/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cypress/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/cypress/test-result.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/dotnet/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/dotnet/test-result.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/flutter/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/flutter/report.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/git_log_ingest/sample.out +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/go_test/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/go_test/reportv1/reportv1.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/go_test/reportv2/reportv2.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/go_test/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/googletest/fail/output.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/googletest/fail/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/googletest/output_a.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/googletest/output_b.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/googletest/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/googletest/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/gradle/java/app/src/test/java/com/launchableinc/rocket_car_gradle/App2Test.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/gradle/java/app/src/test/java/com/launchableinc/rocket_car_gradle/AppTest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/gradle/java/app/src/test/java/com/launchableinc/rocket_car_gradle/sub/App3Test.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/gradle/recursion/expected.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/gradle/recursion/foo/bar/reports/1.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/jasmine/README.md +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/jasmine/jasmine-test-results-v3.99.0.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/jasmine/jasmine-test-results.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/jasmine/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/jasmine/subset_payload.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/jest/junit.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/jest/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/jest/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/karma/README.md +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/karma/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/karma/sample-report.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/karma/subset_payload.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/karma/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/createdFile_1.lst +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/createdFile_2.lst +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/java/test/src/java/com/launchableinc/rocket_car_maven/App2Test.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/java/test/src/java/com/launchableinc/rocket_car_maven/AppTest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/java/test/src/java/com/launchableinc/rocket_car_maven/e2e/E2ETest.java +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/list.lst +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/reports/TEST-1.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/reports/TEST-2.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/reports/TEST-nested.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/reports/dummy.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/subset_by_absolute_time_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/subset_by_confidence_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/subset_from_file_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/subset_scan_test_compile_lst_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/maven/subset_with_exclude_rules_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/TEST-Admin_UserTest.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/TEST-Admin_UserTest_ChildlenTest.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/TEST-UserControllerTest.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/TEST-UserCopyTest.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/TEST-UserTest.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/record_test_result_chunk1.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/record_test_result_chunk2.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/minitest/test/example_test.rb +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/list.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/nunit-reporter-bug-with-nested-type.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/nunit-reporter-bug-with-nested-type.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/output-linux.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/output-windows.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/record_test_result-linux.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/record_test_result-windows.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/src/.gitignore +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/src/Program.cs +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/src/README.md +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/src/Test.cs +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/src/calc.csproj +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/nunit/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/packages/e2e/.gitkeep +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/playwright.config.ts +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/record_test_result_with_json.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/record_test_result_with_json_base.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/record_test_result_with_prefix.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/report.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/report.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/report_with_json_base.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/playwright/report_with_prefix.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/prove/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/prove/report.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/pytest.ini +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/record_test_result_json.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/report.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/report.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/tests/conftest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/tests/fooo/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/tests/fooo/filenameonly_test.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/tests/fooo/func4_test.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/tests/funcs3_test.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/tests/test_funcs1.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/pytest/tests/test_funcs2.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/robot/dryrun.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/robot/output.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/robot/output_legacy.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/robot/record_test_executed_only_one_file_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/robot/record_test_legacy_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/robot/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/robot/single-output.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/robot/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/rspec/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/rspec/rspec.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/vitest/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/vitest/report.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/xctest/junit.xml +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/xctest/record_test_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/data/xctest/subset_result.json +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/helper.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/plugins/foo.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_cli_test_case.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_plugin.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_adb.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_ant.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_bazel.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_behave.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_codeceptjs.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_ctest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_cts.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_cucumber.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_cypress.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_dotnet.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_go_test.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_googletest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_gradle.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_jasmine.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_jest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_karma.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_maven.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_minitest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_nunit.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_playwright.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_prove.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_pytest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_raw.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_robot.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_rspec.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_vitest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_runners/test_xctest.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_session.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_testpath.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/test_version.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/__init__.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_authentication.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_click.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_fail_fast_mode.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_file_name_pattern.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_git_log_parser.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_glob.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_gzipgen.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_http_client.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_link.py +0 -0
- {launchable-1.124.2 → launchable-1.124.3}/tests/utils/test_logger.py +0 -0
|
@@ -56,8 +56,9 @@ class TestResultAbstractDisplay(metaclass=ABCMeta):
|
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
class TestResultJSONDisplay(TestResultAbstractDisplay):
|
|
59
|
-
def __init__(self, results: TestResults):
|
|
59
|
+
def __init__(self, results: TestResults, client: LaunchableClient):
|
|
60
60
|
super().__init__(results)
|
|
61
|
+
self._client = client
|
|
61
62
|
|
|
62
63
|
def display(self):
|
|
63
64
|
result_json = {}
|
|
@@ -88,12 +89,20 @@ class TestResultJSONDisplay(TestResultAbstractDisplay):
|
|
|
88
89
|
"created_at": result._created_at
|
|
89
90
|
})
|
|
90
91
|
|
|
91
|
-
|
|
92
|
-
result_json["test_session_app_url"] = "https://app.launchableinc.com/organizations/{}/workspaces/{}/test-sessions/{}".format( # noqa: E501
|
|
93
|
-
org, workspace, self._results._test_session_id)
|
|
94
|
-
|
|
92
|
+
result_json["test_session_app_url"] = self._get_test_session_url()
|
|
95
93
|
click.echo(json.dumps(result_json, indent=2))
|
|
96
94
|
|
|
95
|
+
def _get_test_session_url(self) -> str:
|
|
96
|
+
cbp_workspace = self._client.get_cbp_workspace()
|
|
97
|
+
if cbp_workspace:
|
|
98
|
+
org_cbp_id, ws_cbp_id = cbp_workspace
|
|
99
|
+
return "https://cloudbees.io/{}/{}/smart-tests/test-sessions/{}".format(
|
|
100
|
+
org_cbp_id, ws_cbp_id, self._results._test_session_id)
|
|
101
|
+
else:
|
|
102
|
+
org, workspace = ensure_org_workspace()
|
|
103
|
+
return "https://app.launchableinc.com/organizations/{}/workspaces/{}/test-sessions/{}".format(
|
|
104
|
+
org, workspace, self._results._test_session_id)
|
|
105
|
+
|
|
97
106
|
|
|
98
107
|
class TestResultTableDisplay(TestResultAbstractDisplay):
|
|
99
108
|
def __init__(self, results: TestResults):
|
|
@@ -179,7 +188,7 @@ def tests(context: click.core.Context, test_session_id: int, is_json_format: boo
|
|
|
179
188
|
|
|
180
189
|
displayer: TestResultAbstractDisplay
|
|
181
190
|
if is_json_format:
|
|
182
|
-
displayer = TestResultJSONDisplay(test_results)
|
|
191
|
+
displayer = TestResultJSONDisplay(test_results, client=client)
|
|
183
192
|
else:
|
|
184
193
|
displayer = TestResultTableDisplay(test_results)
|
|
185
194
|
|
|
@@ -362,14 +362,18 @@ def build(
|
|
|
362
362
|
header = ["Name", "Path", "HEAD Commit"]
|
|
363
363
|
rows = [[w.name, w.dir, w.commit_hash] for w in ws]
|
|
364
364
|
click.echo(tabulate(rows, header, tablefmt="github"))
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
)
|
|
365
|
+
url = _get_build_url(build_id, org, workspace)
|
|
366
|
+
click.echo("\nVisit {} to view this build and its test sessions".format(url))
|
|
367
|
+
|
|
368
|
+
def _get_build_url(build_id, org, workspace) -> str:
|
|
369
|
+
cbp_workspace = client.get_cbp_workspace()
|
|
370
|
+
if cbp_workspace:
|
|
371
|
+
org_cbp_id, ws_cbp_id = cbp_workspace
|
|
372
|
+
url = "https://cloudbees.io/{}/{}/smart-tests/data/builds/{}".format(org_cbp_id, ws_cbp_id, build_id)
|
|
373
|
+
else:
|
|
374
|
+
url = "https://app.launchableinc.com/organizations/{}/workspaces/{}/data/builds/{}".format(
|
|
375
|
+
org, workspace, build_id)
|
|
376
|
+
return url
|
|
373
377
|
|
|
374
378
|
# all the logics at the high level
|
|
375
379
|
if len(commits) == 0:
|
|
@@ -657,15 +657,21 @@ def tests(
|
|
|
657
657
|
click.echo(click.style("\nTotal test duration is 0."
|
|
658
658
|
"\nPlease check whether the test duration times in report files are correct.", "yellow"))
|
|
659
659
|
|
|
660
|
+
url = self._get_test_session_url()
|
|
660
661
|
click.echo(
|
|
661
|
-
"\nVisit
|
|
662
|
-
"
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
662
|
+
"\nVisit {} to view uploaded test results "
|
|
663
|
+
"(or run `launchable inspect tests --test-session-id {}`)".format(url, self.test_session_id))
|
|
664
|
+
|
|
665
|
+
def _get_test_session_url(self) -> str:
|
|
666
|
+
cbp_workspace = client.get_cbp_workspace()
|
|
667
|
+
if cbp_workspace:
|
|
668
|
+
org_cbp_id, ws_cbp_id = cbp_workspace
|
|
669
|
+
url = "https://cloudbees.io/{}/{}/smart-tests/test-sessions/{}".format(
|
|
670
|
+
org_cbp_id, ws_cbp_id, self.test_session_id)
|
|
671
|
+
else:
|
|
672
|
+
url = "https://app.launchableinc.com/organizations/{}/workspaces/{}/test-sessions/{}".format(
|
|
673
|
+
org, workspace, self.test_session_id)
|
|
674
|
+
return url
|
|
669
675
|
|
|
670
676
|
context.obj = RecordTests(dry_run=context.obj.dry_run)
|
|
671
677
|
|
|
@@ -223,6 +223,14 @@ LARGE_PAYLOAD_CONNECT_TIMEOUT = 60
|
|
|
223
223
|
type=click.Choice(["one-commit", "feature-branch", "recurring"]),
|
|
224
224
|
hidden=True, # control PTS v2 test selection behavior. Non-committed, so hidden for now.
|
|
225
225
|
)
|
|
226
|
+
@click.option(
|
|
227
|
+
"--subset-id-file",
|
|
228
|
+
"subset_id_file",
|
|
229
|
+
help="Write the subset ID to a file",
|
|
230
|
+
metavar="FILE",
|
|
231
|
+
type=str,
|
|
232
|
+
hidden=True,
|
|
233
|
+
)
|
|
226
234
|
@click.pass_context
|
|
227
235
|
def subset(
|
|
228
236
|
context: click.core.Context,
|
|
@@ -253,6 +261,7 @@ def subset(
|
|
|
253
261
|
is_get_tests_from_guess: bool = False,
|
|
254
262
|
use_case: Optional[str] = None,
|
|
255
263
|
similarity: Optional[float] = None,
|
|
264
|
+
subset_id_file: Optional[str] = None,
|
|
256
265
|
):
|
|
257
266
|
app = context.obj
|
|
258
267
|
tracking_client = TrackingClient(Command.SUBSET, app=app)
|
|
@@ -392,6 +401,7 @@ def subset(
|
|
|
392
401
|
self.is_get_tests_from_guess = is_get_tests_from_guess
|
|
393
402
|
self.is_output_exclusion_rules = is_output_exclusion_rules
|
|
394
403
|
self.is_get_tests_from_guess = is_get_tests_from_guess
|
|
404
|
+
self.subset_id_file = subset_id_file
|
|
395
405
|
super(Optimize, self).__init__(app=app)
|
|
396
406
|
|
|
397
407
|
def _default_output_handler(self, output: List[TestPath], rests: List[TestPath]):
|
|
@@ -566,6 +576,17 @@ def subset(
|
|
|
566
576
|
if not found:
|
|
567
577
|
warn_and_exit_if_fail_fast_mode("Nothing that looks like a test file in the current git repository.")
|
|
568
578
|
|
|
579
|
+
def _write_subset_id_to_file(self, subset_result: SubsetResult):
|
|
580
|
+
if not subset_result.subset_id:
|
|
581
|
+
print_error_and_die(
|
|
582
|
+
"Subset request did not return a subset ID. Please re-run the command.",
|
|
583
|
+
Tracking.ErrorEvent.INTERNAL_CLI_ERROR,
|
|
584
|
+
)
|
|
585
|
+
|
|
586
|
+
assert self.subset_id_file is not None # Early type guard
|
|
587
|
+
with open(self.subset_id_file, 'w', encoding='utf-8') as f:
|
|
588
|
+
f.write(str(subset_result.subset_id) + '\n')
|
|
589
|
+
|
|
569
590
|
def request_subset(self) -> SubsetResult:
|
|
570
591
|
test_runner = context.invoked_subcommand
|
|
571
592
|
# temporarily extend the timeout because subset API response has become slow
|
|
@@ -648,6 +669,9 @@ def subset(
|
|
|
648
669
|
else:
|
|
649
670
|
self.output_handler(output_subset, output_rests)
|
|
650
671
|
|
|
672
|
+
if self.subset_id_file:
|
|
673
|
+
self._write_subset_id_to_file(subset_result)
|
|
674
|
+
|
|
651
675
|
# When Launchable returns an error, the cli skips showing summary
|
|
652
676
|
# report
|
|
653
677
|
original_subset = subset_result.subset
|
|
Binary file
|
|
@@ -25,6 +25,7 @@ class LaunchableClient:
|
|
|
25
25
|
self.tracking_client = tracking_client
|
|
26
26
|
self.organization, self.workspace = ensure_org_workspace()
|
|
27
27
|
self._workspace_state_cache: Optional[Dict[str, Union[str, bool]]] = None
|
|
28
|
+
self._cbp_workspace_cache: Optional[Tuple[str, str]] = None
|
|
28
29
|
|
|
29
30
|
def request(
|
|
30
31
|
self,
|
|
@@ -106,6 +107,27 @@ class LaunchableClient:
|
|
|
106
107
|
state = self._get_workspace_state()
|
|
107
108
|
return state.get('pts_v2', False)
|
|
108
109
|
|
|
110
|
+
def get_cbp_workspace(self) -> Optional[Tuple[str, str]]:
|
|
111
|
+
"""
|
|
112
|
+
Returns (org_cbp_id, workspace_cbp_id) if this is a CBP workspace, else None.
|
|
113
|
+
"""
|
|
114
|
+
state = self._get_workspace_state()
|
|
115
|
+
if not state.get('is_cbp_workspace', False):
|
|
116
|
+
return None
|
|
117
|
+
|
|
118
|
+
if self._cbp_workspace_cache is not None:
|
|
119
|
+
return self._cbp_workspace_cache
|
|
120
|
+
|
|
121
|
+
try:
|
|
122
|
+
res = self.request("get", "cbp-workspace")
|
|
123
|
+
res.raise_for_status()
|
|
124
|
+
data = res.json()
|
|
125
|
+
self._cbp_workspace_cache = (data['organizationCbpId'], data['workspaceCbpId'])
|
|
126
|
+
return self._cbp_workspace_cache
|
|
127
|
+
except Exception as e:
|
|
128
|
+
self.print_exception_and_recover(e, "Failed to get CBP workspace info")
|
|
129
|
+
return None
|
|
130
|
+
|
|
109
131
|
def _get_workspace_state(self) -> dict:
|
|
110
132
|
"""
|
|
111
133
|
Get the current state of the workspace.
|
|
@@ -120,6 +142,7 @@ class LaunchableClient:
|
|
|
120
142
|
self._workspace_state_cache = {
|
|
121
143
|
'fail_fast_mode': state.get('isFailFastMode', False),
|
|
122
144
|
'pts_v2': state.get('isPtsV2Enabled', False),
|
|
145
|
+
'is_cbp_workspace': state.get('isCbpWorkspace', False),
|
|
123
146
|
}
|
|
124
147
|
return self._workspace_state_cache
|
|
125
148
|
except Exception as e:
|
|
@@ -141,6 +141,7 @@ src/test/java/com/launchableinc/ingest/commits/AllTests.java
|
|
|
141
141
|
src/test/java/com/launchableinc/ingest/commits/BUILD
|
|
142
142
|
src/test/java/com/launchableinc/ingest/commits/CommitGraphCollectorTest.java
|
|
143
143
|
src/test/java/com/launchableinc/ingest/commits/FileChunkStreamerTest.java
|
|
144
|
+
src/test/java/com/launchableinc/ingest/commits/GitFileTest.java
|
|
144
145
|
src/test/java/com/launchableinc/ingest/commits/MainTest.java
|
|
145
146
|
src/test/java/com/launchableinc/ingest/commits/PassThroughTreeReceiverImpl.java
|
|
146
147
|
src/test/java/com/launchableinc/ingest/commits/ProgressReportingConsumerTest.java
|
|
@@ -5,11 +5,10 @@ import org.eclipse.jgit.lib.ObjectLoader;
|
|
|
5
5
|
import org.eclipse.jgit.lib.ObjectReader;
|
|
6
6
|
|
|
7
7
|
import java.io.IOException;
|
|
8
|
-
import java.io.InputStreamReader;
|
|
9
8
|
import java.io.OutputStream;
|
|
10
|
-
import java.
|
|
9
|
+
import java.nio.ByteBuffer;
|
|
11
10
|
import java.nio.charset.CharacterCodingException;
|
|
12
|
-
import java.nio.charset.
|
|
11
|
+
import java.nio.charset.CodingErrorAction;
|
|
13
12
|
|
|
14
13
|
import static java.nio.charset.StandardCharsets.UTF_8;
|
|
15
14
|
import static org.eclipse.jgit.lib.Constants.*;
|
|
@@ -67,12 +66,10 @@ final class GitFile implements VirtualFile {
|
|
|
67
66
|
*/
|
|
68
67
|
public boolean isText() throws IOException {
|
|
69
68
|
try {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
}
|
|
69
|
+
UTF_8.newDecoder()
|
|
70
|
+
.onMalformedInput(CodingErrorAction.REPORT)
|
|
71
|
+
.onUnmappableCharacter(CodingErrorAction.REPORT)
|
|
72
|
+
.decode(ByteBuffer.wrap(open().getCachedBytes(Integer.MAX_VALUE)));
|
|
76
73
|
return true;
|
|
77
74
|
} catch (CharacterCodingException e) {
|
|
78
75
|
return false;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
package com.launchableinc.ingest.commits;
|
|
2
|
+
|
|
3
|
+
import static com.google.common.truth.Truth.assertThat;
|
|
4
|
+
|
|
5
|
+
import java.io.File;
|
|
6
|
+
import org.eclipse.jgit.api.Git;
|
|
7
|
+
import org.eclipse.jgit.lib.ObjectId;
|
|
8
|
+
import org.eclipse.jgit.lib.ObjectInserter;
|
|
9
|
+
import org.eclipse.jgit.lib.Repository;
|
|
10
|
+
import org.junit.Rule;
|
|
11
|
+
import org.junit.Test;
|
|
12
|
+
import org.junit.rules.TemporaryFolder;
|
|
13
|
+
import org.junit.runner.RunWith;
|
|
14
|
+
import org.junit.runners.JUnit4;
|
|
15
|
+
|
|
16
|
+
import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
|
|
17
|
+
|
|
18
|
+
@RunWith(JUnit4.class)
|
|
19
|
+
public class GitFileTest {
|
|
20
|
+
|
|
21
|
+
@Rule public TemporaryFolder tmp = new TemporaryFolder();
|
|
22
|
+
|
|
23
|
+
@Test
|
|
24
|
+
public void isText_textFile_returnsTrue() throws Exception {
|
|
25
|
+
assertThat(gitFileWithContent("public class Hello {}".getBytes()).isText()).isTrue();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@Test
|
|
29
|
+
public void isText_binaryFile_returnsFalse() throws Exception {
|
|
30
|
+
// 0xFF 0xFE is invalid UTF-8
|
|
31
|
+
assertThat(gitFileWithContent(new byte[]{(byte) 0xFF, (byte) 0xFE, 0x00, 0x01}).isText()).isFalse();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@Test
|
|
35
|
+
public void isText_utf8MultiByte_returnsTrue() throws Exception {
|
|
36
|
+
assertThat(gitFileWithContent("日本語テスト".getBytes(java.nio.charset.StandardCharsets.UTF_8)).isText()).isTrue();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
private GitFile gitFileWithContent(byte[] content) throws Exception {
|
|
40
|
+
File repoDir = tmp.newFolder();
|
|
41
|
+
try (Git git = Git.init().setDirectory(repoDir).call()) {
|
|
42
|
+
Repository repo = git.getRepository();
|
|
43
|
+
ObjectId blobId;
|
|
44
|
+
try (ObjectInserter inserter = repo.newObjectInserter()) {
|
|
45
|
+
blobId = inserter.insert(OBJ_BLOB, content);
|
|
46
|
+
inserter.flush();
|
|
47
|
+
}
|
|
48
|
+
return new GitFile("test", "file", blobId, repo.newObjectReader());
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -687,3 +687,233 @@ class SubsetTest(CliTestCase):
|
|
|
687
687
|
"""
|
|
688
688
|
payload = json.loads(gzip.decompress(responses.calls[1].request.body).decode())
|
|
689
689
|
self.assertIn([{"type": "file", "name": "tests/commands/test_subset.py"}], payload.get("testPaths", []))
|
|
690
|
+
|
|
691
|
+
@responses.activate
|
|
692
|
+
@mock.patch.dict(os.environ, {"LAUNCHABLE_TOKEN": CliTestCase.launchable_token})
|
|
693
|
+
def test_subset_id_file_not_set(self):
|
|
694
|
+
pipe = "test_1.py\ntest_2.py\n"
|
|
695
|
+
mock_json_response = {
|
|
696
|
+
"testPaths": [
|
|
697
|
+
[{"type": "file", "name": "test_1.py"}],
|
|
698
|
+
[{"type": "file", "name": "test_2.py"}],
|
|
699
|
+
],
|
|
700
|
+
"testRunner": "file",
|
|
701
|
+
"rest": [],
|
|
702
|
+
"subsettingId": self.subsetting_id,
|
|
703
|
+
"summary": {
|
|
704
|
+
"subset": {"duration": 10, "candidates": 2, "rate": 100},
|
|
705
|
+
"rest": {"duration": 0, "candidates": 0, "rate": 0},
|
|
706
|
+
},
|
|
707
|
+
"isObservation": False,
|
|
708
|
+
}
|
|
709
|
+
responses.replace(
|
|
710
|
+
responses.POST,
|
|
711
|
+
"{}/intake/organizations/{}/workspaces/{}/subset".format(
|
|
712
|
+
get_base_url(), self.organization, self.workspace),
|
|
713
|
+
json=mock_json_response,
|
|
714
|
+
status=200,
|
|
715
|
+
)
|
|
716
|
+
|
|
717
|
+
sentinel = tempfile.NamedTemporaryFile(delete=False)
|
|
718
|
+
sentinel_path = sentinel.name
|
|
719
|
+
sentinel.close()
|
|
720
|
+
os.unlink(sentinel_path)
|
|
721
|
+
|
|
722
|
+
result = self.cli(
|
|
723
|
+
"subset",
|
|
724
|
+
"--session", self.session,
|
|
725
|
+
"file",
|
|
726
|
+
mix_stderr=False,
|
|
727
|
+
input=pipe,
|
|
728
|
+
)
|
|
729
|
+
self.assert_success(result)
|
|
730
|
+
self.assertEqual(result.stdout, "test_1.py\ntest_2.py\n")
|
|
731
|
+
self.assertFalse(os.path.exists(sentinel_path))
|
|
732
|
+
|
|
733
|
+
@responses.activate
|
|
734
|
+
@mock.patch.dict(os.environ, {"LAUNCHABLE_TOKEN": CliTestCase.launchable_token})
|
|
735
|
+
def test_subset_id_file_written(self):
|
|
736
|
+
pipe = "test_1.py\ntest_2.py\n"
|
|
737
|
+
mock_json_response = {
|
|
738
|
+
"testPaths": [
|
|
739
|
+
[{"type": "file", "name": "test_1.py"}],
|
|
740
|
+
[{"type": "file", "name": "test_2.py"}],
|
|
741
|
+
],
|
|
742
|
+
"testRunner": "file",
|
|
743
|
+
"rest": [],
|
|
744
|
+
"subsettingId": self.subsetting_id,
|
|
745
|
+
"summary": {
|
|
746
|
+
"subset": {"duration": 10, "candidates": 2, "rate": 100},
|
|
747
|
+
"rest": {"duration": 0, "candidates": 0, "rate": 0},
|
|
748
|
+
},
|
|
749
|
+
"isObservation": False,
|
|
750
|
+
}
|
|
751
|
+
responses.replace(
|
|
752
|
+
responses.POST,
|
|
753
|
+
"{}/intake/organizations/{}/workspaces/{}/subset".format(
|
|
754
|
+
get_base_url(), self.organization, self.workspace),
|
|
755
|
+
json=mock_json_response,
|
|
756
|
+
status=200,
|
|
757
|
+
)
|
|
758
|
+
|
|
759
|
+
with tempfile.NamedTemporaryFile(delete=False) as id_file:
|
|
760
|
+
id_file_path = id_file.name
|
|
761
|
+
|
|
762
|
+
try:
|
|
763
|
+
result = self.cli(
|
|
764
|
+
"subset",
|
|
765
|
+
"--session", self.session,
|
|
766
|
+
"--subset-id-file", id_file_path,
|
|
767
|
+
"file",
|
|
768
|
+
mix_stderr=False,
|
|
769
|
+
input=pipe,
|
|
770
|
+
)
|
|
771
|
+
self.assert_success(result)
|
|
772
|
+
self.assertEqual(result.stdout, "test_1.py\ntest_2.py\n")
|
|
773
|
+
with open(id_file_path) as f:
|
|
774
|
+
self.assertEqual(f.read(), "{}\n".format(self.subsetting_id))
|
|
775
|
+
finally:
|
|
776
|
+
os.unlink(id_file_path)
|
|
777
|
+
|
|
778
|
+
@responses.activate
|
|
779
|
+
@mock.patch.dict(os.environ, {"LAUNCHABLE_TOKEN": CliTestCase.launchable_token})
|
|
780
|
+
def test_subset_id_file_with_target(self):
|
|
781
|
+
pipe = "test_1.py\ntest_2.py\ntest_3.py\n"
|
|
782
|
+
mock_json_response = {
|
|
783
|
+
"testPaths": [
|
|
784
|
+
[{"type": "file", "name": "test_1.py"}],
|
|
785
|
+
],
|
|
786
|
+
"testRunner": "file",
|
|
787
|
+
"rest": [
|
|
788
|
+
[{"type": "file", "name": "test_2.py"}],
|
|
789
|
+
[{"type": "file", "name": "test_3.py"}],
|
|
790
|
+
],
|
|
791
|
+
"subsettingId": self.subsetting_id,
|
|
792
|
+
"summary": {
|
|
793
|
+
"subset": {"duration": 5, "candidates": 1, "rate": 33},
|
|
794
|
+
"rest": {"duration": 10, "candidates": 2, "rate": 67},
|
|
795
|
+
},
|
|
796
|
+
"isObservation": False,
|
|
797
|
+
}
|
|
798
|
+
responses.replace(
|
|
799
|
+
responses.POST,
|
|
800
|
+
"{}/intake/organizations/{}/workspaces/{}/subset".format(
|
|
801
|
+
get_base_url(), self.organization, self.workspace),
|
|
802
|
+
json=mock_json_response,
|
|
803
|
+
status=200,
|
|
804
|
+
)
|
|
805
|
+
|
|
806
|
+
with tempfile.NamedTemporaryFile(delete=False) as id_file:
|
|
807
|
+
id_file_path = id_file.name
|
|
808
|
+
|
|
809
|
+
try:
|
|
810
|
+
result = self.cli(
|
|
811
|
+
"subset",
|
|
812
|
+
"--session", self.session,
|
|
813
|
+
"--target", "30%",
|
|
814
|
+
"--subset-id-file", id_file_path,
|
|
815
|
+
"file",
|
|
816
|
+
mix_stderr=False,
|
|
817
|
+
input=pipe,
|
|
818
|
+
)
|
|
819
|
+
self.assert_success(result)
|
|
820
|
+
self.assertEqual(result.stdout, "test_1.py\n")
|
|
821
|
+
with open(id_file_path) as f:
|
|
822
|
+
self.assertEqual(f.read(), "{}\n".format(self.subsetting_id))
|
|
823
|
+
finally:
|
|
824
|
+
os.unlink(id_file_path)
|
|
825
|
+
|
|
826
|
+
@responses.activate
|
|
827
|
+
@mock.patch.dict(os.environ, {"LAUNCHABLE_TOKEN": CliTestCase.launchable_token})
|
|
828
|
+
def test_subset_id_file_with_rest(self):
|
|
829
|
+
pipe = "test_1.py\ntest_2.py\n"
|
|
830
|
+
mock_json_response = {
|
|
831
|
+
"testPaths": [
|
|
832
|
+
[{"type": "file", "name": "test_1.py"}],
|
|
833
|
+
],
|
|
834
|
+
"testRunner": "file",
|
|
835
|
+
"rest": [
|
|
836
|
+
[{"type": "file", "name": "test_2.py"}],
|
|
837
|
+
],
|
|
838
|
+
"subsettingId": self.subsetting_id,
|
|
839
|
+
"summary": {
|
|
840
|
+
"subset": {"duration": 5, "candidates": 1, "rate": 50},
|
|
841
|
+
"rest": {"duration": 5, "candidates": 1, "rate": 50},
|
|
842
|
+
},
|
|
843
|
+
"isObservation": False,
|
|
844
|
+
}
|
|
845
|
+
responses.replace(
|
|
846
|
+
responses.POST,
|
|
847
|
+
"{}/intake/organizations/{}/workspaces/{}/subset".format(
|
|
848
|
+
get_base_url(), self.organization, self.workspace),
|
|
849
|
+
json=mock_json_response,
|
|
850
|
+
status=200,
|
|
851
|
+
)
|
|
852
|
+
|
|
853
|
+
with tempfile.NamedTemporaryFile(delete=False) as id_file, \
|
|
854
|
+
tempfile.NamedTemporaryFile(delete=False) as rest_file:
|
|
855
|
+
id_file_path = id_file.name
|
|
856
|
+
rest_file_path = rest_file.name
|
|
857
|
+
|
|
858
|
+
try:
|
|
859
|
+
result = self.cli(
|
|
860
|
+
"subset",
|
|
861
|
+
"--session", self.session,
|
|
862
|
+
"--rest", rest_file_path,
|
|
863
|
+
"--subset-id-file", id_file_path,
|
|
864
|
+
"file",
|
|
865
|
+
mix_stderr=False,
|
|
866
|
+
input=pipe,
|
|
867
|
+
)
|
|
868
|
+
self.assert_success(result)
|
|
869
|
+
self.assertEqual(result.stdout, "test_1.py\n")
|
|
870
|
+
with open(id_file_path) as f:
|
|
871
|
+
self.assertEqual(f.read(), "{}\n".format(self.subsetting_id))
|
|
872
|
+
with open(rest_file_path) as f:
|
|
873
|
+
self.assertIn("test_2.py", f.read())
|
|
874
|
+
finally:
|
|
875
|
+
os.unlink(id_file_path)
|
|
876
|
+
os.unlink(rest_file_path)
|
|
877
|
+
|
|
878
|
+
@responses.activate
|
|
879
|
+
@mock.patch.dict(os.environ, {"LAUNCHABLE_TOKEN": CliTestCase.launchable_token})
|
|
880
|
+
def test_subset_id_file_no_id_returned(self):
|
|
881
|
+
pipe = "test_1.py\n"
|
|
882
|
+
mock_json_response = {
|
|
883
|
+
"testPaths": [
|
|
884
|
+
[{"type": "file", "name": "test_1.py"}],
|
|
885
|
+
],
|
|
886
|
+
"testRunner": "file",
|
|
887
|
+
"rest": [],
|
|
888
|
+
"subsettingId": "",
|
|
889
|
+
"summary": {
|
|
890
|
+
"subset": {"duration": 5, "candidates": 1, "rate": 100},
|
|
891
|
+
"rest": {"duration": 0, "candidates": 0, "rate": 0},
|
|
892
|
+
},
|
|
893
|
+
"isObservation": False,
|
|
894
|
+
}
|
|
895
|
+
responses.replace(
|
|
896
|
+
responses.POST,
|
|
897
|
+
"{}/intake/organizations/{}/workspaces/{}/subset".format(
|
|
898
|
+
get_base_url(), self.organization, self.workspace),
|
|
899
|
+
json=mock_json_response,
|
|
900
|
+
status=200,
|
|
901
|
+
)
|
|
902
|
+
|
|
903
|
+
with tempfile.NamedTemporaryFile(delete=False) as id_file:
|
|
904
|
+
id_file_path = id_file.name
|
|
905
|
+
|
|
906
|
+
try:
|
|
907
|
+
result = self.cli(
|
|
908
|
+
"subset",
|
|
909
|
+
"--session", self.session,
|
|
910
|
+
"--subset-id-file", id_file_path,
|
|
911
|
+
"file",
|
|
912
|
+
mix_stderr=False,
|
|
913
|
+
input=pipe,
|
|
914
|
+
)
|
|
915
|
+
self.assert_exit_code(result, 1)
|
|
916
|
+
self.assertIn("Subset request did not return a subset ID", result.stderr)
|
|
917
|
+
finally:
|
|
918
|
+
if os.path.exists(id_file_path):
|
|
919
|
+
os.unlink(id_file_path)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|