Files
prop-ai-hr/scripts/tests/aihr-schema-migrations.test.sh
T

72 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
if ! command -v docker >/dev/null || ! docker ps --format '{{.Names}}' | grep -qx 'wygj-mysql'; then
echo "SKIP: AIHR schema migration test requires wygj-mysql"
exit 0
fi
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
MYSQL_CONTAINER="wygj-mysql"
DB="wygj_aihr_schema_test_$$"
mysql() {
docker exec -i "$MYSQL_CONTAINER" mysql -uroot -proot --default-character-set=utf8mb4 "$@"
}
cleanup() {
mysql -e "DROP DATABASE IF EXISTS \`$DB\`;" >/dev/null 2>&1 || true
}
trap cleanup EXIT
mysql -e "CREATE DATABASE \`$DB\` CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_case_media_mysql8.sql"
mysql "$DB" <<'SQL'
CREATE TABLE aihr_case_record (
id bigint NOT NULL AUTO_INCREMENT,
tenant_id varchar(20) DEFAULT '000000',
case_id varchar(80) NOT NULL,
summary varchar(1000) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_aihr_case_record_case (tenant_id, case_id)
) ENGINE=InnoDB;
SQL
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_case_media_mysql8.sql"
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_case_media_mysql8.sql"
case_media_columns="$(mysql "$DB" -N -B -e "SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position) FROM information_schema.columns WHERE table_schema='$DB' AND table_name='aihr_case_record' AND column_name IN ('media_oss_id','media_url');")"
test "$case_media_columns" = 'media_oss_id,media_url'
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql"
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql"
evidence_tables="$(mysql "$DB" -N -B -e "SELECT GROUP_CONCAT(table_name ORDER BY table_name) FROM information_schema.tables WHERE table_schema='$DB' AND table_name IN ('aihr_practice_audio','aihr_practice_audio_upload','aihr_practice_calibration');")"
test "$evidence_tables" = 'aihr_practice_audio,aihr_practice_audio_upload,aihr_practice_calibration'
mysql "$DB" <<'SQL'
CREATE TABLE aihr_sop_answer_review (
id bigint NOT NULL AUTO_INCREMENT,
snippet_count int DEFAULT 0,
PRIMARY KEY (id)
) ENGINE=InnoDB;
SQL
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_sop_requester_identity_mysql8.sql"
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_sop_requester_identity_mysql8.sql"
sop_columns="$(mysql "$DB" -N -B -e "SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position) FROM information_schema.columns WHERE table_schema='$DB' AND table_name='aihr_sop_answer_review' AND column_name IN ('source','prompt_version','requester_ext_party_id');")"
test "$sop_columns" = 'source,prompt_version,requester_ext_party_id'
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_org_hire_date_mysql8.sql"
mysql "$DB" <<'SQL'
CREATE TABLE aihr_org_snapshot (
id bigint NOT NULL AUTO_INCREMENT,
ext_party_id varchar(100),
PRIMARY KEY (id)
) ENGINE=InnoDB;
SQL
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_org_hire_date_mysql8.sql"
mysql "$DB" < "$ROOT_DIR/backend/script/sql/update/aihr_20260714_org_hire_date_mysql8.sql"
org_columns="$(mysql "$DB" -N -B -e "SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position) FROM information_schema.columns WHERE table_schema='$DB' AND table_name='aihr_org_snapshot' AND column_name='hire_date';")"
test "$org_columns" = 'hire_date'
echo "PASS: AIHR legacy schema migrations are idempotent, including case media fields"