{
  "id": "APR-003",
  "name": "Submit-for-approval on Quote with cross-object entry criteria on parent Opportunity",
  "description": "A Quote whose linked Opportunity satisfies the ProcessDefinition.EntryFilter (e.g. Opportunity.Region__c = 'Japan') must be accepted by POST /process/approvals. Regression guard for #1616 (PR #1742 only handled same-object prefixes; cross-object FK resolution was missing, blocking every JP/APAC/EMEA Quote approval on production-shaped metadata).",
  "object": "Quote",
  "method": "POST",
  "endpoint": "/services/data/v63.0/process/approvals",
  "setup": [
    {
      "method": "POST",
      "endpoint": "/services/data/v63.0/sobjects/Opportunity",
      "object": "Opportunity",
      "payload": {
        "Name": "APR-003 Test Opportunity",
        "AccountId": "{seed_Account_0}",
        "StageName": "Prospecting",
        "CloseDate": "{today}",
        "Region__c": "Japan"
      },
      "extract": {
        "opp_id": "id"
      }
    },
    {
      "method": "POST",
      "endpoint": "/services/data/v63.0/sobjects/Quote",
      "object": "Quote",
      "payload": {
        "Name": "APR-003 Test Quote",
        "OpportunityId": "{opp_id}",
        "Status": "Draft",
        "Product_Family__c": "TiDB Cloud",
        "Referral_Fee_Rate__c": "0"
      },
      "extract": {
        "quote_id": "id"
      }
    },
    {
      "method": "POST",
      "endpoint": "/services/data/v63.0/sobjects/ProcessDefinition",
      "object": "ProcessDefinition",
      "payload": {
        "DeveloperName": "APR003_Cross_Object_Quote",
        "Name": "APR-003 Cross Object Quote",
        "TableEnumOrId": "Quote",
        "State": "Active",
        "EntryFilter": "{\"criteriaItems\":[{\"field\":\"Opportunity.Region__c\",\"operation\":\"equals\",\"value\":\"Japan\"},{\"field\":\"Quote.Product_Family__c\",\"operation\":\"contains\",\"value\":\"Cloud\"}],\"booleanFilter\":\"1 AND 2\"}"
      },
      "extract": {
        "process_def_id": "id"
      }
    }
  ],
  "payload": {
    "requests": [
      {
        "ObjectApiName": "Quote",
        "RecordId": "{quote_id}",
        "SkipEntryCriteria": false
      }
    ]
  },
  "expects": {
    "status_code": 200
  },
  "response_assertions": [
    {"field": "[0].success", "operator": "eq", "value": true},
    {"field": "[0].instanceStatus", "operator": "eq", "value": "Pending"},
    {"field": "[0].errors", "operator": "is_null", "value": true}
  ],
  "teardown": [
    {"method": "DELETE", "endpoint": "/services/data/v63.0/sobjects/ProcessDefinition/{process_def_id}"},
    {"method": "DELETE", "endpoint": "/services/data/v63.0/sobjects/Quote/{quote_id}"},
    {"method": "DELETE", "endpoint": "/services/data/v63.0/sobjects/Opportunity/{opp_id}"}
  ],
  "priority": "P0",
  "bug_ref": "#1616",
  "scene": "approval",
  "skip": true,
  "skip_reason": "Approval setup requires ProcessNode + ProcessAction rows, which the runner's REST-only setup cannot create yet; PR #1791 added read endpoints but metadata-deploy of approval processes is still out-of-band. Unit tests TestMatchEntryCriteria_CrossObjectRef_ResolvesViaForeignKey and TestMatchEntryCriteria_StagingJPDBaaSFilter_MatchesJPCloudQuote in backend/internal/features/automation/approval_service_unit_test.go cover the evaluator change against the verbatim staging JP_DBaaS_250110 EntryFilter; live agent-browser repro against nexuscrm-staging.pingcap.com verified in the PR body."
}
