[
  {
    "description": "  As a developer\n  I want to see build and deployment statuses on commits\n  So that I know the state of each commit at a glance",
    "elements": [
      {
        "description": "",
        "id": "commit-status-visibility;build-step-reports-pending-status-to-commit",
        "keyword": "Scenario",
        "line": 15,
        "name": "Build step reports pending status to commit",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1629437712
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1494391177
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 756929
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 362067
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 16,
            "name": "a build step starts executing",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:41"
            },
            "result": {
              "status": "passed",
              "duration": 59457184
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 17,
            "name": "the commit shows a pending status with a description of the step",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:46"
            },
            "result": {
              "status": "passed",
              "duration": 31575988
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 611616908
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 55946896
            }
          }
        ],
        "tags": [
          {
            "name": "@ticket-0001",
            "line": 14
          },
          {
            "name": "@mock",
            "line": 14
          },
          {
            "name": "@real",
            "line": 14
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "commit-status-visibility;build-step-reports-successful-completion-with-a-result-link",
        "keyword": "Scenario",
        "line": 20,
        "name": "Build step reports successful completion with a result link",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1356296244
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1426232551
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 1117387
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 764644
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 21,
            "name": "a build step completes successfully and reports its results",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:52"
            },
            "result": {
              "status": "passed",
              "duration": 65009417
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 22,
            "name": "the commit shows a success status with a clickable link to the results",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:57"
            },
            "result": {
              "status": "passed",
              "duration": 36986719
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 623414633
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 66802485
            }
          }
        ],
        "tags": [
          {
            "name": "@ticket-0001",
            "line": 19
          },
          {
            "name": "@mock",
            "line": 19
          },
          {
            "name": "@real",
            "line": 19
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "commit-status-visibility;build-step-reports-failure-when-tests-do-not-pass",
        "keyword": "Scenario",
        "line": 25,
        "name": "Build step reports failure when tests do not pass",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1400908096
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1515176417
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 821149
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 310417
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 26,
            "name": "a build step fails",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:63"
            },
            "result": {
              "status": "passed",
              "duration": 45142130
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 27,
            "name": "the commit shows a failure status with a description of what went wrong",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:68"
            },
            "result": {
              "status": "passed",
              "duration": 26802956
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 586057699
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 66891852
            }
          }
        ],
        "tags": [
          {
            "name": "@ticket-0001",
            "line": 24
          },
          {
            "name": "@mock",
            "line": 24
          },
          {
            "name": "@real",
            "line": 24
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "commit-status-visibility;multiple-build-steps-report-distinct-statuses-on-the-same-commit",
        "keyword": "Scenario",
        "line": 30,
        "name": "Multiple build steps report distinct statuses on the same commit",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1363233523
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1431978137
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 279183
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 219001
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 31,
            "name": "several build steps each report their own status to the same commit",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:74"
            },
            "result": {
              "status": "passed",
              "duration": 763643645
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 32,
            "name": "each status appears under a unique label on the commit",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:82"
            },
            "result": {
              "status": "passed",
              "duration": 727913762
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 591520298
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 55930602
            }
          }
        ],
        "tags": [
          {
            "name": "@ticket-0001",
            "line": 29
          },
          {
            "name": "@mock",
            "line": 29
          },
          {
            "name": "@real",
            "line": 29
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "commit-status-visibility;deployment-step-reports-status-back-to-the-source-commit",
        "keyword": "Scenario",
        "line": 35,
        "name": "Deployment step reports status back to the source commit",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1384359972
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1446676315
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 196536
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 116320
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 36,
            "name": "a deployment finishes for a commit that originated from another repository",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:95"
            },
            "result": {
              "status": "passed",
              "duration": 53586404
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 37,
            "name": "the source commit shows the deployment status alongside the build status",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:100"
            },
            "result": {
              "status": "passed",
              "duration": 92153986
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 576390756
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 48583506
            }
          }
        ],
        "tags": [
          {
            "name": "@ticket-0001",
            "line": 34
          },
          {
            "name": "@mock",
            "line": 34
          },
          {
            "name": "@real",
            "line": 34
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "commit-status-visibility;status-reporting-is-interrupted-when-the-build-system-cannot-be-reached",
        "keyword": "Scenario",
        "line": 40,
        "name": "Status reporting is interrupted when the build system cannot be reached",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1336503304
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1428871750
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 220648
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 115155
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 41,
            "name": "a build step tries to report status but the build system is unavailable",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:110"
            },
            "result": {
              "status": "passed",
              "duration": 1258741451
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 42,
            "name": "the pipeline fails with a clear error message",
            "match": {
              "location": "tests/features/step_definitions/commit-status.steps.js:118"
            },
            "result": {
              "status": "passed",
              "duration": 875014
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 597050933
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 62220948
            }
          }
        ],
        "tags": [
          {
            "name": "@ticket-0001",
            "line": 39
          },
          {
            "name": "@mock",
            "line": 39
          }
        ],
        "type": "scenario"
      }
    ],
    "id": "commit-status-visibility",
    "line": 1,
    "keyword": "Feature",
    "name": "Commit status visibility",
    "tags": [],
    "uri": "tests/features/commit-status.feature"
  },
  {
    "description": "  As a GitOps repository\n  I want to update version references and report results back to the caller\n  So that the deployment chain is traceable from source to GitOps commit",
    "elements": [
      {
        "description": "",
        "id": "gitops-update;not-enough-env-vars-—-caller-commit-gets-failure-status",
        "keyword": "Scenario",
        "line": 11,
        "name": "Not enough env vars — caller commit gets failure status",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1361082206
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1445630078
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 297118
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 212236
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 12,
            "name": "insufficient environment variables are provided for the GitOps update",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:90"
            },
            "result": {
              "status": "passed",
              "duration": 728683
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 13,
            "name": "the GitOps update script runs",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:107"
            },
            "result": {
              "status": "passed",
              "duration": 25363715
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 14,
            "name": "the caller commit shows a failure status with the missing variable name",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:111"
            },
            "result": {
              "status": "failed",
              "duration": 37208526,
              "error_message": "Error: Expected failure state, body: \n    at World.<anonymous> (/workspace/niko/gitea-ci-library/tests/features/step_definitions/gitops-update.steps.js:113:50)"
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 15,
            "name": "the script exits with error",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:130"
            },
            "result": {
              "status": "skipped",
              "duration": 0
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 595129014
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 44487229
            }
          }
        ],
        "tags": [
          {
            "name": "@mock",
            "line": 10
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "gitops-update;gitops-job-fails-—-caller-commit-gets-failure-status",
        "keyword": "Scenario",
        "line": 18,
        "name": "GitOps job fails — caller commit gets failure status",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1332584499
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1413968634
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 398707
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 244729
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 19,
            "name": "the GitOps repository clone will fail",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:95"
            },
            "result": {
              "status": "passed",
              "duration": 817264
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 20,
            "name": "the GitOps update script runs",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:107"
            },
            "result": {
              "status": "passed",
              "duration": 57266445
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 21,
            "name": "the caller commit shows a failure status",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:122"
            },
            "result": {
              "status": "failed",
              "duration": 46838138,
              "error_message": "Error: Expected failure state, body: \n    at World.<anonymous> (/workspace/niko/gitea-ci-library/tests/features/step_definitions/gitops-update.steps.js:124:50)"
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 22,
            "name": "the script exits with error",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:130"
            },
            "result": {
              "status": "skipped",
              "duration": 0
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 658493601
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 68301381
            }
          }
        ],
        "tags": [
          {
            "name": "@mock",
            "line": 17
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "gitops-update;everything-succeeds-—-caller-and-gitops-get-success",
        "keyword": "Scenario",
        "line": 25,
        "name": "Everything succeeds — caller and GitOps get success",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1397744968
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1416449918
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 322000
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 175423
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 26,
            "name": "a valid GitOps update dispatch",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:99"
            },
            "result": {
              "status": "passed",
              "duration": 368352
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 27,
            "name": "the GitOps update script runs",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:107"
            },
            "result": {
              "status": "passed",
              "duration": 84275775
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 28,
            "name": "the script exits successfully",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:134"
            },
            "result": {
              "status": "failed",
              "duration": 553137,
              "error_message": "Error: Expected exit 0, got 1: git: unknown command: -c user.name=gitea-ci-bot -c user.email=ci@keskikuja.site commit -m [skip ci] gitops: update version to 0.2.3\n[ERROR] Failed to commit\n\n    at World.<anonymous> (/workspace/niko/gitea-ci-library/tests/features/step_definitions/gitops-update.steps.js:135:39)"
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 29,
            "name": "the caller commit shows a success status with a link to the GitOps commit",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:138"
            },
            "result": {
              "status": "skipped",
              "duration": 0
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 30,
            "name": "the GitOps repo commit shows a success status with a link to the caller",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:147"
            },
            "result": {
              "status": "skipped",
              "duration": 0
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 585485354
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 53968458
            }
          }
        ],
        "tags": [
          {
            "name": "@mock",
            "line": 24
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "gitops-update;gitops-push-fails-—-both-repos-get-failure-status",
        "keyword": "Scenario",
        "line": 33,
        "name": "GitOps push fails — both repos get failure status",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1360675225
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1662579425
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 236404
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 171542
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 34,
            "name": "the GitOps repo push will fail after the version is committed",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:103"
            },
            "result": {
              "status": "passed",
              "duration": 438298
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 35,
            "name": "the GitOps update script runs",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:107"
            },
            "result": {
              "status": "passed",
              "duration": 295409892
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 36,
            "name": "the script exits with error",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:130"
            },
            "result": {
              "status": "passed",
              "duration": 607402
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 37,
            "name": "the caller commit shows a failure status",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:122"
            },
            "result": {
              "status": "failed",
              "duration": 17754626,
              "error_message": "Error: Expected failure state, body: \n    at World.<anonymous> (/workspace/niko/gitea-ci-library/tests/features/step_definitions/gitops-update.steps.js:124:50)"
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 38,
            "name": "the GitOps repo commit shows a failure status linking to the caller",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:157"
            },
            "result": {
              "status": "skipped",
              "duration": 0
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 588850059
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 63218202
            }
          }
        ],
        "tags": [
          {
            "name": "@mock",
            "line": 32
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "gitops-update;gitops-update-succeeds-—-this-repo-commit-status-links-to-caller",
        "keyword": "Scenario",
        "line": 41,
        "name": "GitOps update succeeds — this repo commit status links to caller",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1356444071
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1416577205
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a project repository exists in Gitea",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:29"
            },
            "result": {
              "status": "passed",
              "duration": 224013
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "a commit has been pushed to the repository",
            "match": {
              "location": "tests/features/step_definitions/common.steps.js:32"
            },
            "result": {
              "status": "passed",
              "duration": 104252
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 42,
            "name": "a valid GitOps update dispatch",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:99"
            },
            "result": {
              "status": "passed",
              "duration": 173364
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 43,
            "name": "the GitOps update script runs",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:107"
            },
            "result": {
              "status": "passed",
              "duration": 83165625
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 44,
            "name": "the GitOps repo commit shows a source context status linking to the caller commit",
            "match": {
              "location": "tests/features/step_definitions/gitops-update.steps.js:167"
            },
            "result": {
              "status": "failed",
              "duration": 26168373,
              "error_message": "Error: Expected at least 2 requests, got 0\n    at World.<anonymous> (/workspace/niko/gitea-ci-library/tests/features/step_definitions/gitops-update.steps.js:168:33)"
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 590175295
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 69322796
            }
          }
        ],
        "tags": [
          {
            "name": "@mock",
            "line": 40
          }
        ],
        "type": "scenario"
      }
    ],
    "id": "gitops-update",
    "line": 1,
    "keyword": "Feature",
    "name": "GitOps update",
    "tags": [],
    "uri": "tests/features/gitops-update.feature"
  },
  {
    "description": "  As a test engineer\n  I want integration and end-to-end tests to run automatically after deployment\n  So that I can verify the deployed version works correctly",
    "elements": [
      {
        "description": "",
        "id": "test-execution;dispatch-a-test-workflow-and-wait-for-its-completion",
        "keyword": "Scenario",
        "line": 15,
        "name": "Dispatch a test workflow and wait for its completion",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1330623343
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1417019651
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a deployment has completed in the target environment",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:60"
            },
            "result": {
              "status": "passed",
              "duration": 315785
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "the test project repository exists with test definitions",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:63"
            },
            "result": {
              "status": "passed",
              "duration": 245113
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 16,
            "name": "a test workflow is dispatched to a test project",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:66"
            },
            "result": {
              "status": "passed",
              "duration": 1045324220
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 17,
            "name": "the pipeline waits until the test workflow finishes",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:76"
            },
            "result": {
              "status": "failed",
              "duration": 605399,
              "error_message": "Error: Expected 0, got 5\n    at World.<anonymous> (/workspace/niko/gitea-ci-library/tests/features/step_definitions/test-execution.steps.js:77:40)"
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 18,
            "name": "the pipeline continues only after receiving a success result",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:80"
            },
            "result": {
              "status": "skipped",
              "duration": 0
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 583482286
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 73837687
            }
          }
        ],
        "tags": [
          {
            "name": "@ticket-0002",
            "line": 14
          },
          {
            "name": "@mock",
            "line": 14
          },
          {
            "name": "@real",
            "line": 14
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "test-execution;dispatch-fails-when-the-dispatched-test-workflow-fails",
        "keyword": "Scenario",
        "line": 21,
        "name": "Dispatch fails when the dispatched test workflow fails",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1382884655
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1429310573
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a deployment has completed in the target environment",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:60"
            },
            "result": {
              "status": "passed",
              "duration": 284848
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "the test project repository exists with test definitions",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:63"
            },
            "result": {
              "status": "passed",
              "duration": 206493
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 22,
            "name": "a test workflow is dispatched and the tests fail",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:84"
            },
            "result": {
              "status": "passed",
              "duration": 914642420
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 23,
            "name": "the calling pipeline reports failure",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:94"
            },
            "result": {
              "status": "failed",
              "duration": 675852,
              "error_message": "Error: Expected failure exit 1, got 5\n    at World.<anonymous> (/workspace/niko/gitea-ci-library/tests/features/step_definitions/test-execution.steps.js:95:40)"
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 597509460
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 87671997
            }
          }
        ],
        "tags": [
          {
            "name": "@ticket-0002",
            "line": 20
          },
          {
            "name": "@mock",
            "line": 20
          },
          {
            "name": "@real",
            "line": 20
          }
        ],
        "type": "scenario"
      },
      {
        "description": "",
        "id": "test-execution;dispatch-times-out-when-the-test-workflow-takes-too-long",
        "keyword": "Scenario",
        "line": 26,
        "name": "Dispatch times out when the test workflow takes too long",
        "steps": [
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1380380087
            }
          },
          {
            "keyword": "Before",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 1403747440
            }
          },
          {
            "arguments": [],
            "keyword": "Given ",
            "line": 7,
            "name": "a deployment has completed in the target environment",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:60"
            },
            "result": {
              "status": "passed",
              "duration": 217281
            }
          },
          {
            "arguments": [],
            "keyword": "And ",
            "line": 8,
            "name": "the test project repository exists with test definitions",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:63"
            },
            "result": {
              "status": "passed",
              "duration": 96296
            }
          },
          {
            "arguments": [],
            "keyword": "When ",
            "line": 27,
            "name": "a test workflow is dispatched but does not finish within the allowed time",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:98"
            },
            "result": {
              "status": "passed",
              "duration": 885085554
            }
          },
          {
            "arguments": [],
            "keyword": "Then ",
            "line": 28,
            "name": "the calling pipeline reports a timeout error",
            "match": {
              "location": "tests/features/step_definitions/test-execution.steps.js:110"
            },
            "result": {
              "status": "failed",
              "duration": 421283,
              "error_message": "Error: Expected timeout exit 124, got 5\n    at World.<anonymous> (/workspace/niko/gitea-ci-library/tests/features/step_definitions/test-execution.steps.js:111:42)"
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 583682686
            }
          },
          {
            "keyword": "After",
            "hidden": true,
            "result": {
              "status": "passed",
              "duration": 48843627
            }
          }
        ],
        "tags": [
          {
            "name": "@ticket-0002",
            "line": 25
          },
          {
            "name": "@mock",
            "line": 25
          }
        ],
        "type": "scenario"
      }
    ],
    "id": "test-execution",
    "line": 1,
    "keyword": "Feature",
    "name": "Test execution",
    "tags": [],
    "uri": "tests/features/test-execution.feature"
  }
]