ether-docs/04-TESTING/api/asset/test-asset.sh

322 lines
13 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
BASE_URL="http://localhost:8080/api"
TOKEN=""
PROJECT_ID=""
PASS_COUNT=0
FAIL_COUNT=0
TOTAL_COUNT=0
assert_eq() {
local actual="$1"
local expected="$2"
local name="$3"
TOTAL_COUNT=$((TOTAL_COUNT + 1))
if [ "$actual" = "$expected" ]; then
echo " PASS: $name"
PASS_COUNT=$((PASS_COUNT + 1))
else
echo " FAIL: $name (expected=$expected, actual=$actual)"
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
}
assert_contains() {
local haystack="$1"
local needle="$2"
local name="$3"
TOTAL_COUNT=$((TOTAL_COUNT + 1))
if echo "$haystack" | grep -q "$needle"; then
echo " PASS: $name"
PASS_COUNT=$((PASS_COUNT + 1))
else
echo " FAIL: $name (expected to contain: $needle)"
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
}
login() {
echo "=== 登录获取Token ==="
local response=$(curl -s -X POST "$BASE_URL/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}')
TOKEN=$(echo "$response" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
if [ -z "$TOKEN" ]; then
echo "FATAL: 登录失败无法获取Token"
exit 1
fi
echo "Token获取成功"
}
setup_project() {
echo "=== 创建测试项目 ==="
local response=$(curl -s -X POST "$BASE_URL/mdm/projects" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: " \
-d "{\"code\":\"TEST-ASSET-$$\",\"name\":\"ASSET测试项目\",\"projectType\":\"RESIDENTIAL\"}")
PROJECT_ID=$(echo "$response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
if [ -z "$PROJECT_ID" ]; then
echo "FATAL: 创建测试项目失败"
exit 1
fi
echo "测试项目创建成功: $PROJECT_ID"
}
test_create_equipment() {
echo "--- TC-ASSET-001: 创建设备 ---"
local response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/asset/equipment" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d "{\"equipmentCode\":\"TEST-EQ-$$_$RANDOM\",\"equipmentName\":\"测试电梯设备\",\"equipmentType\":\"ELEVATOR\",\"systemType\":\"ELEVATOR\",\"ownershipType\":\"PROJECT\"}")
local status=$(echo "$response" | tail -n 1)
local body=$(echo "$response" | head -n -1)
assert_eq "$status" "201" "TC-ASSET-001: 创建设备返回201"
EQUIPMENT_ID=$(echo "$body" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
}
test_query_equipment_by_project() {
echo "--- TC-ASSET-002: 按项目查询设备 ---"
local response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/by-project/$PROJECT_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID")
local status=$(echo "$response" | tail -n 1)
assert_eq "$status" "200" "TC-ASSET-002: 按项目查询设备返回200"
}
test_query_equipment_by_space() {
echo "--- TC-ASSET-003: 按空间查询设备 ---"
local response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/by-space/00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID")
local status=$(echo "$response" | tail -n 1)
assert_eq "$status" "200" "TC-ASSET-003: 按空间查询设备返回200"
}
test_batch_delete_equipment() {
echo "--- TC-ASSET-004: 设备批量删除 ---"
local eq1_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d "{\"equipmentCode\":\"BATCH-DEL-1-$$_$RANDOM\",\"equipmentName\":\"批量删除测试1\",\"equipmentType\":\"HVAC\",\"systemType\":\"HVAC\",\"ownershipType\":\"PROJECT\"}")
local eq1_id=$(echo "$eq1_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
local eq2_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d "{\"equipmentCode\":\"BATCH-DEL-2-$$_$RANDOM\",\"equipmentName\":\"批量删除测试2\",\"equipmentType\":\"HVAC\",\"systemType\":\"HVAC\",\"ownershipType\":\"PROJECT\"}")
local eq2_id=$(echo "$eq2_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
if [ -n "$eq1_id" ] && [ -n "$eq2_id" ]; then
local response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/asset/equipment/batch-delete" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d "{\"ids\":[\"$eq1_id\",\"$eq2_id\"]}")
local status=$(echo "$response" | tail -n 1)
assert_eq "$status" "200" "TC-ASSET-004: 批量删除返回200"
else
echo " SKIP: TC-ASSET-004 (无法创建测试设备)"
fi
}
test_elevator_extension() {
echo "--- TC-ASSET-005: 电梯扩展表管理 ---"
if [ -z "$EQUIPMENT_ID" ]; then
echo " SKIP: TC-ASSET-005 (无设备ID)"
return
fi
local put_response=$(curl -s -w "\n%{http_code}" -X PUT "$BASE_URL/asset/equipment/$EQUIPMENT_ID/elevator" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d '{"elevatorType":"PASSENGER","model":"TEST-001","loadCapacity":1000,"speed":2.5,"floorCount":20}')
local put_status=$(echo "$put_response" | tail -n 1)
assert_eq "$put_status" "200" "TC-ASSET-005: 更新电梯扩展表返回200"
local get_response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/$EQUIPMENT_ID/elevator" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID")
local get_status=$(echo "$get_response" | tail -n 1)
assert_eq "$get_status" "200" "TC-ASSET-005: 查询电梯扩展表返回200"
}
test_hvac_extension() {
echo "--- TC-ASSET-006: 暖通扩展表管理 ---"
local hvac_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d "{\"equipmentCode\":\"HVAC-TEST-$$_$RANDOM\",\"equipmentName\":\"测试暖通设备\",\"equipmentType\":\"HVAC\",\"systemType\":\"HVAC\",\"ownershipType\":\"PROJECT\"}")
local hvac_id=$(echo "$hvac_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
if [ -z "$hvac_id" ]; then
echo " SKIP: TC-ASSET-006 (无法创建暖通设备)"
return
fi
local put_response=$(curl -s -w "\n%{http_code}" -X PUT "$BASE_URL/asset/equipment/$hvac_id/hvac" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d '{"hvacType":"CHILLER","coolingCapacity":500,"heatingCapacity":400}')
local put_status=$(echo "$put_response" | tail -n 1)
assert_eq "$put_status" "200" "TC-ASSET-006: 更新暖通扩展表返回200"
HVAC_EQ_ID="$hvac_id"
}
test_fire_extension() {
echo "--- TC-ASSET-007: 消防扩展表管理 ---"
local fire_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d "{\"equipmentCode\":\"FIRE-TEST-$$_$RANDOM\",\"equipmentName\":\"测试消防设备\",\"equipmentType\":\"FIRE_PROTECTION\",\"systemType\":\"FIRE\",\"ownershipType\":\"PROJECT\"}")
local fire_id=$(echo "$fire_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
if [ -z "$fire_id" ]; then
echo " SKIP: TC-ASSET-007 (无法创建消防设备)"
return
fi
local put_response=$(curl -s -w "\n%{http_code}" -X PUT "$BASE_URL/asset/equipment/$fire_id/fire" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d '{"fireEquipmentType":"SPRINKLER","installationArea":200}')
local put_status=$(echo "$put_response" | tail -n 1)
assert_eq "$put_status" "200" "TC-ASSET-007: 更新消防扩展表返回200"
FIRE_EQ_ID="$fire_id"
}
test_energy_extension() {
echo "--- TC-ASSET-008: 能源计量扩展表管理 ---"
local energy_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d "{\"equipmentCode\":\"ENERGY-TEST-$$_$RANDOM\",\"equipmentName\":\"测试能源计量设备\",\"equipmentType\":\"ENERGY_METER\",\"systemType\":\"ELECTRICAL\",\"ownershipType\":\"PROJECT\"}")
local energy_id=$(echo "$energy_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
if [ -z "$energy_id" ]; then
echo " SKIP: TC-ASSET-008 (无法创建能源计量设备)"
return
fi
local put_response=$(curl -s -w "\n%{http_code}" -X PUT "$BASE_URL/asset/equipment/$energy_id/energy" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d '{"meterType":"ELECTRICITY","energyType":"LIGHTING","accuracyClass":"1.0"}')
local put_status=$(echo "$put_response" | tail -n 1)
assert_eq "$put_status" "200" "TC-ASSET-008: 更新能源计量扩展表返回200"
ENERGY_EQ_ID="$energy_id"
}
test_equipment_statistics() {
echo "--- TC-ASSET-009: 设备统计 ---"
local response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/statistics/by-type?projectId=$PROJECT_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID")
local status=$(echo "$response" | tail -n 1)
assert_eq "$status" "200" "TC-ASSET-009: 设备统计返回200"
}
test_health_score() {
echo "--- TC-ASSET-010: 健康评分查询 ---"
if [ -z "$EQUIPMENT_ID" ]; then
echo " SKIP: TC-ASSET-010 (无设备ID)"
return
fi
local response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/$EQUIPMENT_ID/health" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID")
local status=$(echo "$response" | tail -n 1)
assert_eq "$status" "200" "TC-ASSET-010: 健康评分查询返回200"
}
test_failure_record() {
echo "--- TC-ASSET-011: 故障记录 ---"
if [ -z "$EQUIPMENT_ID" ]; then
echo " SKIP: TC-ASSET-011 (无设备ID)"
return
fi
local response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/asset/equipment/$EQUIPMENT_ID/failures" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d '{"failureType":"SUDDEN","failureLevel":"MEDIUM","description":"测试故障记录","failureTime":"2026-05-18T10:00:00"}')
local status=$(echo "$response" | tail -n 1)
assert_eq "$status" "201" "TC-ASSET-011: 故障记录返回201"
}
test_ownership_entity_crud() {
echo "--- TC-ASSET-012: 归属主体CRUD ---"
local create_response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/asset/ownership-entities" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID" \
-d "{\"entityName\":\"测试归属主体-$$_$RANDOM\",\"entityType\":\"COMPANY\",\"contactPerson\":\"张三\",\"contactPhone\":\"13800138000\"}")
local create_status=$(echo "$create_response" | tail -n 1)
local create_body=$(echo "$create_response" | head -n -1)
assert_eq "$create_status" "201" "TC-ASSET-012: 创建归属主体返回201"
OWNERSHIP_ID=$(echo "$create_body" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
if [ -n "$OWNERSHIP_ID" ]; then
local query_response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/ownership-entities/$OWNERSHIP_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Project-ID: $PROJECT_ID")
local query_status=$(echo "$query_response" | tail -n 1)
assert_eq "$query_status" "200" "TC-ASSET-012: 查询归属主体返回200"
fi
}
cleanup() {
echo "=== 清理测试数据 ==="
if [ -n "$PROJECT_ID" ]; then
curl -s -X DELETE "$BASE_URL/mdm/projects/$PROJECT_ID" \
-H "Authorization: Bearer $TOKEN" > /dev/null 2>&1
fi
}
print_summary() {
echo ""
echo "=========================================="
echo " Asset Domain API Test Summary"
echo "=========================================="
echo " Total: $TOTAL_COUNT"
echo " Passed: $PASS_COUNT"
echo " Failed: $FAIL_COUNT"
if [ "$TOTAL_COUNT" -gt 0 ]; then
local rate=$(echo "scale=1; $PASS_COUNT * 100 / $TOTAL_COUNT" | bc)
echo " Rate: ${rate}%"
fi
echo "=========================================="
if [ "$FAIL_COUNT" -gt 0 ]; then
return 1
fi
return 0
}
EQUIPMENT_ID=""
HVAC_EQ_ID=""
FIRE_EQ_ID=""
ENERGY_EQ_ID=""
OWNERSHIP_ID=""
echo "=========================================="
echo " Ether PMS - Asset Domain API Tests"
echo "=========================================="
echo ""
login
setup_project
test_create_equipment
test_query_equipment_by_project
test_query_equipment_by_space
test_batch_delete_equipment
test_elevator_extension
test_hvac_extension
test_fire_extension
test_energy_extension
test_equipment_statistics
test_health_score
test_failure_record
test_ownership_entity_crud
cleanup
print_summary