packages feed

keiro-dsl-0.15.0.0: test/mapped-queue-mutation-test.sh

#!/usr/bin/env bash
set -euo pipefail

repo_root="$(git rev-parse --show-toplevel)"
cd "$repo_root"

bindings="keiro-dsl/test/conformance-mapped-queue/Conformance/MappedQueue/Bindings.hs"
queue="keiro-dsl/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/Queue.hs"
backup_dir="$(mktemp -d "${TMPDIR:-/tmp}/keiro-mapped-queue-mutation.XXXXXX")"
cp "$bindings" "$backup_dir/Bindings.hs"
cp "$queue" "$backup_dir/Queue.hs"

restore_all() {
  cp "$backup_dir/Bindings.hs" "$bindings"
  cp "$backup_dir/Queue.hs" "$queue"
}

cleanup() {
  restore_all
  rm -f "$backup_dir/Bindings.hs" "$backup_dir/Queue.hs" "$backup_dir/mutation.log"
  rmdir "$backup_dir"
}
trap cleanup EXIT

expect_red() {
  local label="$1"
  set +e
  cabal test -v0 keiro-dsl:keiro-dsl-conformance-mapped-queue >"$backup_dir/mutation.log" 2>&1
  local status=$?
  set -e
  if [[ "$status" -eq 0 ]]; then
    sed -n '1,240p' "$backup_dir/mutation.log"
    echo "FAIL: mutation stayed green: $label"
    exit 1
  fi
  echo "PASS: mutation turned the mapped queue gate red: $label"
}

perl -0pi -e 's/value\.jobId\n          value\.label/value.label\n          value.jobId/' "$bindings"
expect_red "transpose the total structural binding"
restore_all

perl -0pi -e 's/\n      , "geometry" \.= toJSON \(ShapeJobPayload\.geometry shape\)//' "$queue"
expect_red "remove the nested queue field encoder"
restore_all

perl -0pi -e 's/\n    <\*> explicitParseField \(parseJSON\) objectValue "geometry"//' "$queue"
expect_red "remove the nested queue field decoder"
restore_all

cabal test -v0 keiro-dsl:keiro-dsl-conformance-mapped-queue
echo "PASS: mapped queue mutations were caught and exact files restored"