@@ -8,31 +8,53 @@ if [[ "${BASH_VERSINFO[0]}" -eq 3 ]] && [[ "${BASH_VERSINFO[1]}" -lt 1 ]]; then
88fi
99
1010RELEASE_SCRIPT_DIR=" "
11+ FIXTURE_DIR=" "
1112
1213function set_up_before_script() {
1314 RELEASE_SCRIPT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) /../.." && pwd) "
1415
1516 # Source release.sh to get access to functions
1617 # shellcheck source=/dev/null
1718 source " $RELEASE_SCRIPT_DIR /release.sh"
19+
20+ # Tiny fake project dir: release::sandbox::create tars $(pwd), so running it
21+ # from the repo root copies ~21MB per call. The fixture keeps it to a few KB
22+ # and makes the exclusion tests self-contained (#825). bashunit::temp_dir is
23+ # cleaned by the framework after all workers finish — a manual rm -rf in
24+ # tear_down_after_script would race the parallel workers, which start before
25+ # the file-level teardown runs.
26+ FIXTURE_DIR=$( bashunit::temp_dir " release-fixture" )
27+ echo ' #!/usr/bin/env bash' > " $FIXTURE_DIR /bashunit"
28+ echo ' #!/usr/bin/env bash' > " $FIXTURE_DIR /build.sh"
29+ echo ' # Changelog' > " $FIXTURE_DIR /CHANGELOG.md"
30+ mkdir " $FIXTURE_DIR /.git" " $FIXTURE_DIR /.release-state"
31+ echo ' ref: refs/heads/main' > " $FIXTURE_DIR /.git/HEAD"
32+ echo ' state' > " $FIXTURE_DIR /.release-state/state.txt"
1833}
1934
2035# #########################
2136# Sandbox mode tests
2237# #########################
2338
2439function test_sandbox_create_creates_temp_directory() {
40+ local original_dir
41+ original_dir=$( pwd)
42+
43+ cd " $FIXTURE_DIR " || return
2544 release::sandbox::create 2> /dev/null
45+
2646 assert_not_empty " $SANDBOX_DIR "
2747 assert_directory_exists " $SANDBOX_DIR "
48+
2849 rm -rf " $SANDBOX_DIR "
50+ cd " $original_dir " || return
2951}
3052
3153function test_sandbox_create_copies_project_files() {
3254 local original_dir
3355 original_dir=$( pwd)
3456
35- cd " $RELEASE_SCRIPT_DIR " || return
57+ cd " $FIXTURE_DIR " || return
3658 release::sandbox::create 2> /dev/null
3759
3860 # Check that key files were copied
@@ -48,10 +70,10 @@ function test_sandbox_create_excludes_git_directory() {
4870 local original_dir
4971 original_dir=$( pwd)
5072
51- cd " $RELEASE_SCRIPT_DIR " || return
73+ cd " $FIXTURE_DIR " || return
5274 release::sandbox::create 2> /dev/null
5375
54- # .git should NOT be copied
76+ # .git exists in the fixture but should NOT be copied
5577 assert_directory_not_exists " $SANDBOX_DIR /.git"
5678
5779 rm -rf " $SANDBOX_DIR "
@@ -62,16 +84,13 @@ function test_sandbox_create_excludes_release_state() {
6284 local original_dir
6385 original_dir=$( pwd)
6486
65- cd " $RELEASE_SCRIPT_DIR " || return
66-
67- # Create a .release-state directory to test exclusion
68- mkdir -p .release-state/test
87+ cd " $FIXTURE_DIR " || return
6988 release::sandbox::create 2> /dev/null
7089
71- # .release-state should NOT be copied
90+ # .release-state exists in the fixture but should NOT be copied
7291 assert_directory_not_exists " $SANDBOX_DIR /.release-state"
7392
74- rm -rf " $SANDBOX_DIR " .release-state
93+ rm -rf " $SANDBOX_DIR "
7594 cd " $original_dir " || return
7695}
7796
@@ -83,7 +102,7 @@ function test_sandbox_setup_git_initializes_repo() {
83102 local original_dir
84103 original_dir=$( pwd)
85104
86- cd " $RELEASE_SCRIPT_DIR " || return
105+ cd " $FIXTURE_DIR " || return
87106 release::sandbox::create 2> /dev/null
88107 release::sandbox::setup_git 2> /dev/null
89108
@@ -102,7 +121,7 @@ function test_sandbox_setup_git_creates_initial_commit() {
102121 local original_dir
103122 original_dir=$( pwd)
104123
105- cd " $RELEASE_SCRIPT_DIR " || return
124+ cd " $FIXTURE_DIR " || return
106125 release::sandbox::create 2> /dev/null
107126 release::sandbox::setup_git 2> /dev/null
108127
0 commit comments