{#- Ruby HTTP test assertions rendering

   Context variables:
   - status: expected HTTP status
   - headers: list of header assertion objects with 'name', 'assertion_type', and 'value'
   - has_json_body: boolean
   - json_val: JSON value (if has_json_body)
   - has_text_body: boolean
   - text_body: text value (if has_text_body)
   - has_partial_body: boolean
   - partial_body_checks: list of objects with 'key' and 'value'
   - has_validation_errors: boolean
   - validation_errors: list of error messages
#}
      expect(response.code.to_i).to eq({{ status }})
{%- for header in headers %}
{%- if header.assertion_type == "present" %}
      expect(response['{{ header.name }}']).not_to be_nil
{%- elif header.assertion_type == "absent" %}
      expect(response['{{ header.name }}']).to be_nil
{%- elif header.assertion_type == "uuid" %}
      expect(response['{{ header.name }}']).to match(/\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/i)
{%- else %}
      expect(response['{{ header.name }}']).to eq({{ header.value }})
{%- endif %}
{%- endfor %}
{%- if has_json_body %}
      _body = response.body && !response.body.empty? ? JSON.parse(response.body) : nil
      expect(_body).to eq({{ json_val }})
{%- elif has_text_body %}
      expect(response.body).to eq('{{ text_body }}')
{%- endif %}
{%- if has_partial_body %}
      _body = JSON.parse(response.body)
{%- for check in partial_body_checks %}
      expect(_body['{{ check.key }}']).to eq({{ check.value }})
{%- endfor %}
{%- endif %}
{%- if has_validation_errors %}
{%- for error in validation_errors %}
      _body = JSON.parse(response.body)
      _errors = _body['errors'] || []
      expect(_errors.map { |e| e['msg'] }).to include('{{ error.msg }}')
{%- endfor %}
{%- endif %}
