Skip to content

Commit 365632d

Browse files
committed
test: cover php resolver and setup composer detection
1 parent cc10ca5 commit 365632d

2 files changed

Lines changed: 85 additions & 4 deletions

File tree

tests/01-setup.bats

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,18 @@ setup() {
99
export GITHUB_RUN_ID="99"
1010
export GITHUB_RUN_ATTEMPT="3"
1111
export GITHUB_ACTION_PATH="$BATS_TEST_DIRNAME/.."
12+
export TEST_WORK_DIR="$TEST_TMP_DIR/workspace"
1213
export GITHUB_ENV="$TEST_TMP_DIR/github.env"
13-
mkdir -p "$RUNNER_TEMP"
14+
mkdir -p "$RUNNER_TEMP" "$TEST_WORK_DIR"
1415
: > "$GITHUB_ENV"
1516
}
1617

1718
teardown() {
1819
teardown_test_tmp_dir
1920
}
2021

21-
@test "setup exports variables and selects engine php version" {
22-
run bash "$BATS_TEST_DIRNAME/../bin/setup.sh" "clean/phpdoc-md"
22+
@test "setup exports variables and falls back to engine php version" {
23+
run bash -c "cd \"$TEST_WORK_DIR\" && bash \"$BATS_TEST_DIRNAME/../bin/setup.sh\" \"clean/phpdoc-md\""
2324
[ "$status" -eq 0 ]
2425

2526
run grep -F "NEEDED_PHP_VERSION=8.1" "$GITHUB_ENV"
@@ -29,8 +30,24 @@ teardown() {
2930
[ -d "$NEW_WIKI_PATH" ]
3031
}
3132

33+
@test "setup uses composer.json php constraint when present" {
34+
cat > "$TEST_WORK_DIR/composer.json" <<'EOF'
35+
{
36+
"require": {
37+
"php": "^8.2"
38+
}
39+
}
40+
EOF
41+
42+
run bash -c "cd \"$TEST_WORK_DIR\" && bash \"$BATS_TEST_DIRNAME/../bin/setup.sh\" \"clean/phpdoc-md\""
43+
[ "$status" -eq 0 ]
44+
45+
run grep -F "NEEDED_PHP_VERSION=8.2" "$GITHUB_ENV"
46+
[ "$status" -eq 0 ]
47+
}
48+
3249
@test "setup fails on unknown engine" {
33-
run bash "$BATS_TEST_DIRNAME/../bin/setup.sh" "unknown/engine"
50+
run bash -c "cd \"$TEST_WORK_DIR\" && bash \"$BATS_TEST_DIRNAME/../bin/setup.sh\" \"unknown/engine\""
3451
[ "$status" -eq 1 ]
3552
[[ "$output" == *"ERROR: unknown engine"* ]]
3653
}

tests/09-resolve-php-version.bats

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/usr/bin/env bats
2+
3+
load "$BATS_TEST_DIRNAME/helpers.bash"
4+
5+
setup() {
6+
setup_test_tmp_dir
7+
export RESOLVER_SCRIPT="$BATS_TEST_DIRNAME/../bin/resolve-php-version.sh"
8+
}
9+
10+
teardown() {
11+
teardown_test_tmp_dir
12+
}
13+
14+
@test "resolve-php-version uses engine defaults when composer files are missing" {
15+
run bash -c "cd \"$TEST_TMP_DIR\" && bash \"$RESOLVER_SCRIPT\" \"clean/phpdoc-md\""
16+
[ "$status" -eq 0 ]
17+
[ "$output" = "8.1" ]
18+
19+
run bash -c "cd \"$TEST_TMP_DIR\" && bash \"$RESOLVER_SCRIPT\" \"evert/phpdoc-md\""
20+
[ "$status" -eq 0 ]
21+
[ "$output" = "7.4" ]
22+
}
23+
24+
@test "resolve-php-version reads composer.json require.php first" {
25+
cat > "$TEST_TMP_DIR/composer.json" <<'EOF'
26+
{
27+
"require": {
28+
"php": "^8.3 || ^8.4"
29+
}
30+
}
31+
EOF
32+
33+
run bash -c "cd \"$TEST_TMP_DIR\" && bash \"$RESOLVER_SCRIPT\" \"clean/phpdoc-md\""
34+
[ "$status" -eq 0 ]
35+
[ "$output" = "8.3" ]
36+
}
37+
38+
@test "resolve-php-version reads composer.lock when composer.json has no php requirement" {
39+
cat > "$TEST_TMP_DIR/composer.json" <<'EOF'
40+
{
41+
"require": {
42+
"monolog/monolog": "^3.0"
43+
}
44+
}
45+
EOF
46+
47+
cat > "$TEST_TMP_DIR/composer.lock" <<'EOF'
48+
{
49+
"platform": {
50+
"php": ">=8.2"
51+
}
52+
}
53+
EOF
54+
55+
run bash -c "cd \"$TEST_TMP_DIR\" && bash \"$RESOLVER_SCRIPT\" \"clean/phpdoc-md\""
56+
[ "$status" -eq 0 ]
57+
[ "$output" = "8.2" ]
58+
}
59+
60+
@test "resolve-php-version fails for unknown engine" {
61+
run bash -c "cd \"$TEST_TMP_DIR\" && bash \"$RESOLVER_SCRIPT\" \"unknown/engine\""
62+
[ "$status" -eq 1 ]
63+
[[ "$output" == *"ERROR: unknown engine"* ]]
64+
}

0 commit comments

Comments
 (0)