{
  "product": "Gravity Forms",
  "tested_version": "3.1.3.3",
  "started_at_utc": "2026-10-16T10:38:28+00:00",
  "completed_at_utc": "2026-10-16T10:38:28+00:00",
  "environment": {
    "wordpress": "7.1.3",
    "php": "8.4.26",
    "database_version": "8.4.11",
    "theme": "Twenty Twenty-Five",
    "theme_version": "1.5",
    "max_upload_bytes": 268435456,
    "memory_limit": "-1",
    "external_http_and_mail": "Blocked by private lab"
  },
  "tests": [
    {
      "name": "Conditional required company field follows Personal/Business selection",
      "passed": true,
      "observed": {
        "personal_company_blank": {
          "is_valid": true,
          "validation_messages": [],
          "page_number": 2,
          "source_page_number": 1
        },
        "business_company_blank": {
          "is_valid": false,
          "validation_messages": {
            "4": "This field is required."
          },
          "page_number": 1,
          "source_page_number": 1
        },
        "business_company_filled": {
          "is_valid": true,
          "validation_messages": [],
          "page_number": 2,
          "source_page_number": 1
        }
      }
    },
    {
      "name": "Two-step validation advances page 1 and requires details on page 2",
      "passed": true,
      "observed": {
        "page_1": {
          "is_valid": true,
          "validation_messages": [],
          "page_number": 2,
          "source_page_number": 1
        },
        "page_2_blank": {
          "is_valid": false,
          "validation_messages": {
            "6": "This field is required."
          },
          "page_number": 2,
          "source_page_number": 2
        },
        "page_2_filled": {
          "is_valid": true,
          "validation_messages": [],
          "page_number": 0,
          "source_page_number": 2,
          "is_spam": false
        }
      }
    },
    {
      "name": "Configured 1 MB limit and PDF/PNG extension rules reject invalid file metadata",
      "passed": true,
      "observed": {
        "scope": "Native field-validator calls with synthetic metadata; no HTTP upload was performed",
        "max_bytes": 1048576,
        "oversized": {
          "message": "brief.pdf - File exceeds size limit. Maximum file size: 1MB.",
          "id": ""
        },
        "disallowed_extension": {
          "message": "brief.txt - The uploaded file type is not allowed. Must be one of the following: pdf, png.",
          "id": ""
        },
        "allowed_pdf_metadata": false
      }
    },
    {
      "name": "Final submission stores an entry and native CSV export preserves commas/quotes",
      "passed": true,
      "observed": {
        "submission": {
          "is_valid": true,
          "page_number": 0,
          "source_page_number": 2,
          "confirmation_message": "<div id='gf_1' class='gform_anchor' tabindex='-1'></div><div id='gform_confirmation_wrapper_1' class='gform_confirmation_wrapper '><div id='gform_confirmation_message_1' class='gform_confirmation_message_1 gform_confirmation_message'>Synthetic request saved in the private test lab.</div></div>",
          "confirmation_type": "message",
          "entry_id": "1",
          "is_spam": false
        },
        "entry_id": "1",
        "saved_fields": {
          "id": "1",
          "form_id": "1",
          "1": "Synthetic Test Person",
          "2": "synthetic@example.invalid",
          "3": "business",
          "4": "Synthetic Studio",
          "6": "Planning, launch and a \"quoted\" brief."
        },
        "native_csv_line": "\"1\",\"Synthetic Test Person\",\"synthetic@example.invalid\",\"business\",\"Synthetic Studio\",\"Planning, launch and a \"\"quoted\"\" brief.\"",
        "csv_roundtrip": [
          "1",
          "Synthetic Test Person",
          "synthetic@example.invalid",
          "business",
          "Synthetic Studio",
          "Planning, launch and a \"quoted\" brief."
        ]
      }
    }
  ],
  "multipart_tests": [
    {
      "name": "small-allowed-png",
      "passed": true,
      "observed": {
        "http_status": 200,
        "filename": "catalog-small.png",
        "sent_bytes": 68,
        "sha256": "e988c7e0e9a20b62871ad37e801133447c7e7ef8b1129d039b38b2b2ab6ec9f4",
        "accepted_confirmation": true,
        "size_rejection_visible": false,
        "extension_rejection_visible": false,
        "hidden_field_names": [
          "MAX_FILE_SIZE",
          "gform_currency",
          "gform_field_values",
          "gform_source_page_number_2",
          "gform_style_settings",
          "gform_submission_method",
          "gform_submit",
          "gform_target_page_number_2",
          "gform_theme",
          "gform_unique_id",
          "input_1",
          "is_submit_2",
          "state_2"
        ],
        "result_html": "upload-small-allowed-png-response.html",
        "validation_message": ""
      }
    },
    {
      "name": "wrong-extension",
      "passed": true,
      "observed": {
        "http_status": 200,
        "filename": "catalog-brief.txt",
        "sent_bytes": 45,
        "sha256": "f46d9f1b0b6a6c22c66b0b3a0dd7e646a206296bcc4dfefb026936b0757ebd66",
        "accepted_confirmation": false,
        "size_rejection_visible": false,
        "extension_rejection_visible": true,
        "hidden_field_names": [
          "MAX_FILE_SIZE",
          "gform_currency",
          "gform_field_values",
          "gform_source_page_number_2",
          "gform_style_settings",
          "gform_submission_method",
          "gform_submit",
          "gform_target_page_number_2",
          "gform_theme",
          "gform_unique_id",
          "input_1",
          "is_submit_2",
          "state_2"
        ],
        "result_html": "upload-wrong-extension-response.html",
        "validation_message": "catalog-brief.txt \u2013 The uploaded file type is not allowed. Must be one of the following: pdf, png."
      }
    },
    {
      "name": "over-1mb",
      "passed": true,
      "observed": {
        "http_status": 200,
        "filename": "catalog-large.png",
        "sent_bytes": 2097152,
        "sha256": "d5d2c5721a02396cc092caa64029c24b71986f451acb9c479438ffc50c45e678",
        "accepted_confirmation": false,
        "size_rejection_visible": true,
        "extension_rejection_visible": false,
        "hidden_field_names": [
          "MAX_FILE_SIZE",
          "gform_currency",
          "gform_field_values",
          "gform_source_page_number_2",
          "gform_style_settings",
          "gform_submission_method",
          "gform_submit",
          "gform_target_page_number_2",
          "gform_theme",
          "gform_unique_id",
          "input_1",
          "is_submit_2",
          "state_2"
        ],
        "result_html": "upload-over-1mb-response.html",
        "validation_message": "catalog-large.png \u2013 File exceeds size limit. Maximum file size: 1MB."
      }
    }
  ],
  "multipart_completed_at_utc": "2026-10-16T10:38:54.531910+00:00",
  "all_passed": true,
  "all_multipart_tests_passed": true,
  "untested": [
    "Email delivery",
    "Payment gateways",
    "CRM integrations",
    "Account-backed add-ons and hosted services",
    "Browser file-picker interaction (multipart requests were scripted)"
  ],
  "persisted_upload_check": {
    "passed": true,
    "checked_at_utc": "2026-10-16T10:39:24+00:00",
    "entries": [
      {
        "entry_id": "2",
        "case_label": "HTTP small-allowed-png",
        "stored_bytes": 68,
        "stored_sha256": "e988c7e0e9a20b62871ad37e801133447c7e7ef8b1129d039b38b2b2ab6ec9f4"
      }
    ]
  },
  "method": "Synthetic inputs in an isolated WordPress test installation. Native GFAPI submission/export plus real authenticated multipart HTTP requests. No email or external service delivery tested."
}
