A1-A7 收口OA统一审批中心与企微基础设施路线
这个提交包含在:
@@ -417,17 +417,23 @@ echo "[8/10] duplicate override audit"
|
||||
RID_OVERRIDE_A="$(create_reimbursement "$EMPLOYEE_TOKEN" "$TMP_DIR/override-reim-a.json")"
|
||||
RID_OVERRIDE_B="$(create_reimbursement "$EMPLOYEE_TOKEN" "$TMP_DIR/override-reim-b.json")"
|
||||
|
||||
OV_FILE="$TMP_DIR/override-$RUN_SUFFIX.pdf"
|
||||
printf '%%PDF-1.4\nMOCK_DUP:%s\n' "$RUN_SUFFIX" > "$OV_FILE"
|
||||
OV_CODE="AUDDUP$RUN_SUFFIX"
|
||||
OV_NUMBER="AUDNO$RUN_SUFFIX"
|
||||
OV_FILE_A="$TMP_DIR/override-a-$RUN_SUFFIX.pdf"
|
||||
OV_FILE_B="$TMP_DIR/override-b-$RUN_SUFFIX.pdf"
|
||||
printf '%%PDF-1.4\nMOCK_DUP_A:%s\n' "$RUN_SUFFIX" > "$OV_FILE_A"
|
||||
printf '%%PDF-1.4\nMOCK_DUP_B:%s\n' "$RUN_SUFFIX" > "$OV_FILE_B"
|
||||
|
||||
upload_status="$(upload_invoice "$EMPLOYEE_TOKEN" "$OV_FILE" "$TMP_DIR/override-upload-a.json")"
|
||||
upload_status="$(upload_invoice "$EMPLOYEE_TOKEN" "$OV_FILE_A" "$TMP_DIR/override-upload-a.json")"
|
||||
assert_status "$upload_status" "200" "upload override invoice A" "$TMP_DIR/override-upload-a.json"
|
||||
IID_OVERRIDE_A="$(jq -er '.data.invoicePoolId' "$TMP_DIR/override-upload-a.json")"
|
||||
patch_invoice "$EMPLOYEE_TOKEN" "$IID_OVERRIDE_A" "{\"totalAmount\":\"188.80\",\"invoiceCode\":\"$OV_CODE\",\"invoiceNumber\":\"$OV_NUMBER\"}" "$TMP_DIR/override-patch-a.json"
|
||||
bind_invoice "$EMPLOYEE_TOKEN" "$IID_OVERRIDE_A" "$RID_OVERRIDE_A" "$TMP_DIR/override-bind-a.json"
|
||||
|
||||
upload_status="$(upload_invoice "$EMPLOYEE_TOKEN" "$OV_FILE" "$TMP_DIR/override-upload-b.json")"
|
||||
upload_status="$(upload_invoice "$EMPLOYEE_TOKEN" "$OV_FILE_B" "$TMP_DIR/override-upload-b.json")"
|
||||
assert_status "$upload_status" "200" "upload override invoice B" "$TMP_DIR/override-upload-b.json"
|
||||
IID_OVERRIDE_B="$(jq -er '.data.invoicePoolId' "$TMP_DIR/override-upload-b.json")"
|
||||
patch_invoice "$EMPLOYEE_TOKEN" "$IID_OVERRIDE_B" "{\"totalAmount\":\"188.80\",\"invoiceCode\":\"$OV_CODE\",\"invoiceNumber\":\"$OV_NUMBER\"}" "$TMP_DIR/override-patch-b.json"
|
||||
|
||||
bind_status="$(api_json_auth POST "$BASE_URL/api/invoice-pool/$IID_OVERRIDE_B/bind" "$EMPLOYEE_TOKEN" "$TMP_DIR/override-bind-b.json" "{\"reimbursementId\":\"$RID_OVERRIDE_B\"}")"
|
||||
assert_status "$bind_status" "409" "bind duplicate before override" "$TMP_DIR/override-bind-b.json"
|
||||
@@ -446,17 +452,17 @@ echo "[9/10] OCR retry audit + VALID_006/VALID_007"
|
||||
NOW_ISO="$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")"
|
||||
OLD_ISO="$(date -u -d "-2 minutes" +"%Y-%m-%dT%H:%M:%S.000Z")"
|
||||
|
||||
INVOICE_FREQ="$(create_invoice_record "$EMPLOYEE_IDENTIFIER" "MOCK_OK:$RUN_SUFFIX" "ocr_failed" "0" "$NOW_ISO")"
|
||||
INVOICE_FREQ="$(create_invoice_record "$EMPLOYEE_IDENTIFIER" "MOCK_OK:FREQ:$RUN_SUFFIX" "ocr_failed" "0" "$NOW_ISO")"
|
||||
retry_freq_status="$(retry_ocr "$EMPLOYEE_TOKEN" "$INVOICE_FREQ" "$TMP_DIR/retry-freq.json")"
|
||||
assert_status "$retry_freq_status" "409" "retry too frequent" "$TMP_DIR/retry-freq.json"
|
||||
assert_error_code "$TMP_DIR/retry-freq.json" "VALID_007" "retry too frequent"
|
||||
|
||||
INVOICE_EXCEEDED="$(create_invoice_record "$EMPLOYEE_IDENTIFIER" "MOCK_OK:$RUN_SUFFIX" "ocr_failed" "3" "$OLD_ISO")"
|
||||
INVOICE_EXCEEDED="$(create_invoice_record "$EMPLOYEE_IDENTIFIER" "MOCK_OK:EXCEEDED:$RUN_SUFFIX" "ocr_failed" "3" "$OLD_ISO")"
|
||||
retry_exceeded_status="$(retry_ocr "$EMPLOYEE_TOKEN" "$INVOICE_EXCEEDED" "$TMP_DIR/retry-exceeded.json")"
|
||||
assert_status "$retry_exceeded_status" "409" "retry attempts exceeded" "$TMP_DIR/retry-exceeded.json"
|
||||
assert_error_code "$TMP_DIR/retry-exceeded.json" "VALID_006" "retry attempts exceeded"
|
||||
|
||||
INVOICE_RETRY_OK="$(create_invoice_record "$EMPLOYEE_IDENTIFIER" "MOCK_OK:$RUN_SUFFIX" "ocr_failed" "1" "$OLD_ISO")"
|
||||
INVOICE_RETRY_OK="$(create_invoice_record "$EMPLOYEE_IDENTIFIER" "MOCK_OK:RETRY:$RUN_SUFFIX" "ocr_failed" "1" "$OLD_ISO")"
|
||||
retry_ok_status="$(retry_ocr "$EMPLOYEE_TOKEN" "$INVOICE_RETRY_OK" "$TMP_DIR/retry-ok.json")"
|
||||
assert_status "$retry_ok_status" "200" "retry ok" "$TMP_DIR/retry-ok.json"
|
||||
assert_jq "$TMP_DIR/retry-ok.json" '.data.status == "pending_ocr"' "retry ok status"
|
||||
|
||||
@@ -242,6 +242,7 @@ create_and_bind_invoice() {
|
||||
|
||||
local file_path="$TMP_DIR/${label}-${RUN_SUFFIX}-${RANDOM}.pdf"
|
||||
local upload_body="$TMP_DIR/${label}-upload.json"
|
||||
local patch_body="$TMP_DIR/${label}-patch.json"
|
||||
local bind_body="$TMP_DIR/${label}-bind.json"
|
||||
|
||||
printf '%%PDF-1.4\n%s\n' "$label-$RUN_SUFFIX-$(date +%s%N)-$RANDOM" > "$file_path"
|
||||
@@ -253,6 +254,9 @@ create_and_bind_invoice() {
|
||||
local invoice_id
|
||||
invoice_id="$(jq -er '.data.invoicePoolId' "$upload_body")"
|
||||
|
||||
status="$(api_json_auth PATCH "$BASE_URL/api/invoice-pool/$invoice_id" "$token" "$patch_body" '{"totalAmount":"188.80"}')"
|
||||
assert_status "$status" "200" "patch invoice total amount $label" "$patch_body"
|
||||
|
||||
status="$(api_json_auth POST "$BASE_URL/api/invoice-pool/$invoice_id/bind" "$token" "$bind_body" "{\"reimbursementId\":\"$reimbursement_id\"}")"
|
||||
assert_status "$status" "200" "bind invoice $label" "$bind_body"
|
||||
|
||||
|
||||
+16
-5
@@ -21,17 +21,19 @@ if ! command -v jq >/dev/null 2>&1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$SAMPLE_FILE" ]]; then
|
||||
echo "[ERROR] Sample file not found: $SAMPLE_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
cleanup() {
|
||||
rm -rf "$TMP_DIR"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
if [[ ! -f "$SAMPLE_FILE" ]]; then
|
||||
REQUESTED_SAMPLE_FILE="$SAMPLE_FILE"
|
||||
SAMPLE_FILE="$TMP_DIR/hyb-oa-sample-invoice.pdf"
|
||||
printf '%%PDF-1.4\nhyb-oa generated smoke invoice\n' > "$SAMPLE_FILE"
|
||||
echo "[WARN] Sample file not found: $REQUESTED_SAMPLE_FILE; using generated smoke fixture" >&2
|
||||
fi
|
||||
|
||||
RUN_UPLOAD_FILE="$TMP_DIR/upload-$(basename "$SAMPLE_FILE")"
|
||||
cp "$SAMPLE_FILE" "$RUN_UPLOAD_FILE"
|
||||
printf '\n%%RUN-%s\n' "$(date +%s%N)" >> "$RUN_UPLOAD_FILE"
|
||||
@@ -104,6 +106,15 @@ upload_status="$(curl -sS -o "$upload_body" -w "%{http_code}" \
|
||||
assert_status "$upload_status" "200" "upload invoice"
|
||||
INVOICE_ID="$(extract_json_field "$upload_body" '.data.invoicePoolId')"
|
||||
|
||||
echo "[5.1/13] Patch invoice total amount"
|
||||
patch_invoice_body="$TMP_DIR/patch-invoice.json"
|
||||
patch_invoice_status="$(curl -sS -o "$patch_invoice_body" -w "%{http_code}" \
|
||||
-X PATCH "$BASE_URL/api/invoice-pool/$INVOICE_ID" \
|
||||
-H "authorization: Bearer $EMPLOYEE_TOKEN" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{"totalAmount":"188.80"}')"
|
||||
assert_status "$patch_invoice_status" "200" "patch invoice total amount"
|
||||
|
||||
echo "[6/13] Bind invoice"
|
||||
bind_body="$TMP_DIR/bind.json"
|
||||
bind_status="$(curl -sS -o "$bind_body" -w "%{http_code}" \
|
||||
|
||||
在新工单中引用
屏蔽一个用户