{
  "caseCount": 15,
  "cases": [
    {
      "id": "MOCK-REQUEST-001",
      "title": "Open the network mocking fixture",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Open the Advanced Network Mocking Lab route."
      ],
      "expectedResult": "Fixture FX-MOCK-001, its internal target, and explicit retry control are visible.",
      "priority": "Critical",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-REQUEST-002",
      "title": "Inspect the documented request",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Read the method and target contract."
      ],
      "expectedResult": "The fixture documents GET /practice/api/v1/store/catalog?featured=1&limit=3.",
      "priority": "High",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-FULFIL-001",
      "title": "Fulfil a replacement catalogue",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Route the catalogue request and fulfil a three-product JSON response."
      ],
      "expectedResult": "The rendered response shows the replacement product IDs, names, and prices.",
      "priority": "Critical",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-FULFIL-002",
      "title": "Fulfil an empty catalogue",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Route the catalogue request with HTTP 200 and data: []."
      ],
      "expectedResult": "The explicit EMPTY_ARRAY result is visible.",
      "priority": "High",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-ERROR-001",
      "title": "Return a controlled route error",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Fulfil the request with HTTP 503 and a safe JSON error message."
      ],
      "expectedResult": "The visible status begins HTTP_503 and enables Retry request.",
      "priority": "Critical",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-ERROR-002",
      "title": "Abort a route safely",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Abort the documented catalogue request."
      ],
      "expectedResult": "The visible status begins NETWORK_ERROR and no uncaught page error occurs.",
      "priority": "High",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-DELAY-001",
      "title": "Observe an intercepted delay",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Delay a Playwright route fulfilment before returning JSON."
      ],
      "expectedResult": "The fixture stays in the in-progress state until the route resolves.",
      "priority": "High",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-RETRY-001",
      "title": "Retry only on learner action",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Return 503 once, then fulfil a second request after clicking Retry request."
      ],
      "expectedResult": "Exactly two requests are issued and the second visible result succeeds.",
      "priority": "Critical",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-CONTRACT-001",
      "title": "Reject malformed JSON",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Fulfil the route with non-JSON content."
      ],
      "expectedResult": "MALFORMED_JSON is visible and the retry control is enabled.",
      "priority": "High",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-CONTRACT-002",
      "title": "Reject an invalid item shape",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Fulfil HTTP 200 with a data item missing a numeric price."
      ],
      "expectedResult": "CONTRACT_MISMATCH identifies the invalid controlled response.",
      "priority": "High",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-CONTRACT-003",
      "title": "Accept a valid contract variation",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Fulfil HTTP 200 with one valid replacement product."
      ],
      "expectedResult": "The single replacement product renders with its id, name, and price.",
      "priority": "High",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-COUNT-001",
      "title": "Assert request count",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Send and retry the documented request."
      ],
      "expectedResult": "Requests issued increases only for button-driven attempts.",
      "priority": "Medium",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-RESET-001",
      "title": "Reset the fixture",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Click Reset fixture after a fulfilled or failed response."
      ],
      "expectedResult": "Count returns to zero, response summary clears, and retry is disabled.",
      "priority": "Medium",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-BOUNDARY-001",
      "title": "Preserve the same-origin boundary",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Inspect the documented target before routing."
      ],
      "expectedResult": "The endpoint remains under /practice/api/v1/ with no user-supplied URL field.",
      "priority": "Critical",
      "goodAutomationCandidate": "yes"
    },
    {
      "id": "MOCK-ACCESS-001",
      "title": "Use accessible request controls",
      "route": "/practice/playwright/network-mocking/",
      "preconditions": [
        "Use the local or protected staging Practice Lab fixture.",
        "Intercept only the documented same-origin catalogue request."
      ],
      "steps": [
        "Locate Send, Retry, and Reset by role and name."
      ],
      "expectedResult": "All controls are semantic buttons and the status has a live region.",
      "priority": "Medium",
      "goodAutomationCandidate": "yes"
    }
  ]
}
