88 lines
2.8 KiB
Bash
88 lines
2.8 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
load 'libs/bats-support/load'
|
|
load 'libs/bats-assert/load'
|
|
load 'helpers/common'
|
|
|
|
SCRIPT="$REPO_ROOT/zip_images_resize_recursive.sh"
|
|
|
|
setup() {
|
|
setup_mock_env
|
|
}
|
|
|
|
teardown() {
|
|
teardown_mock_env
|
|
}
|
|
|
|
@test "errors when argument is not a directory" {
|
|
run "$SCRIPT" /nonexistent/path
|
|
assert_failure
|
|
assert_output --partial "Error:"
|
|
}
|
|
|
|
@test "defaults to current directory when no argument given" {
|
|
make_zip "$TEST_WORKDIR/archive.zip" "$FIXTURES/unprocessed.jpg"
|
|
run bash -c "cd '$TEST_WORKDIR' && '$SCRIPT'"
|
|
assert_success
|
|
assert_output --partial "Resized"
|
|
}
|
|
|
|
@test "processes all ZIPs in a flat directory" {
|
|
make_zip "$TEST_WORKDIR/a.zip" "$FIXTURES/unprocessed.jpg"
|
|
make_zip "$TEST_WORKDIR/b.zip" "$FIXTURES/unprocessed.jpg"
|
|
run "$SCRIPT" "$TEST_WORKDIR"
|
|
assert_success
|
|
assert_equal "$(grep -c 'Resized' <<<"$output")" "2"
|
|
}
|
|
|
|
@test "skips already-processed ZIPs in a flat directory" {
|
|
make_zip "$TEST_WORKDIR/done.zip" "$FIXTURES/processed.jpg"
|
|
make_zip "$TEST_WORKDIR/todo.zip" "$FIXTURES/unprocessed.jpg"
|
|
run "$SCRIPT" "$TEST_WORKDIR"
|
|
assert_success
|
|
assert_output --partial "Skipping"
|
|
assert_output --partial "Resized"
|
|
}
|
|
|
|
@test "finds ZIPs recursively in subdirectories" {
|
|
mkdir -p "$TEST_WORKDIR/sub/deep"
|
|
make_zip "$TEST_WORKDIR/sub/a.zip" "$FIXTURES/unprocessed.jpg"
|
|
make_zip "$TEST_WORKDIR/sub/deep/b.zip" "$FIXTURES/unprocessed.jpg"
|
|
run "$SCRIPT" "$TEST_WORKDIR"
|
|
assert_success
|
|
assert_equal "$(grep -c 'Resized' <<<"$output")" "2"
|
|
}
|
|
|
|
@test "processes ZIPs in descending size order" {
|
|
# Create ZIPs of different sizes by varying image dimensions
|
|
local small medium large
|
|
small="$TEST_WORKDIR/small.zip"
|
|
medium="$TEST_WORKDIR/medium.zip"
|
|
large="$TEST_WORKDIR/large.zip"
|
|
|
|
convert -size 50x50 xc:gray "$TEST_WORKDIR/s.jpg"
|
|
convert -size 100x100 xc:gray "$TEST_WORKDIR/m.jpg"
|
|
convert -size 200x200 xc:gray "$TEST_WORKDIR/l.jpg"
|
|
(cd "$TEST_WORKDIR" && zip -q small.zip s.jpg)
|
|
(cd "$TEST_WORKDIR" && zip -q medium.zip m.jpg)
|
|
(cd "$TEST_WORKDIR" && zip -q large.zip l.jpg)
|
|
|
|
run "$SCRIPT" "$TEST_WORKDIR"
|
|
assert_success
|
|
|
|
# Extract the order ZIPs were processed from the output
|
|
local order
|
|
order=$(grep 'Processing file' <<<"$output" | grep -o '[a-z]*.zip' | tr '\n' ' ')
|
|
assert_equal "$order" "large.zip medium.zip small.zip "
|
|
}
|
|
|
|
@test "no temp files left in /dev/shm after recursive run" {
|
|
make_zip "$TEST_WORKDIR/a.zip" "$FIXTURES/unprocessed.jpg"
|
|
make_zip "$TEST_WORKDIR/b.zip" "$FIXTURES/processed.jpg"
|
|
local before after
|
|
before=$(find /dev/shm -maxdepth 1 -name 'tmp.*' | sort)
|
|
run "$SCRIPT" "$TEST_WORKDIR"
|
|
after=$(find /dev/shm -maxdepth 1 -name 'tmp.*' | sort)
|
|
assert_equal "$before" "$after"
|
|
}
|