<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="firebaserules_v1.html">Firebase Rules API</a> . <a href="firebaserules_v1.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="firebaserules_v1.projects.releases.html">releases()</a></code>
</p>
<p class="firstline">Returns the releases Resource.</p>

<p class="toc_element">
  <code><a href="firebaserules_v1.projects.rulesets.html">rulesets()</a></code>
</p>
<p class="firstline">Returns the rulesets Resource.</p>

<p class="toc_element">
  <code><a href="#test">test(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Test `Source` for syntactic and semantic correctness. Issues present, if</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="test">test(name, body=None, x__xgafv=None)</code>
  <pre>Test `Source` for syntactic and semantic correctness. Issues present, if
any, will be returned to the caller with a description, severity, and
source location.

The test method may be executed with `Source` or a `Ruleset` name.
Passing `Source` is useful for unit testing new rules. Passing a `Ruleset`
name is useful for regression testing an existing rule.

The following is an example of `Source` that permits users to upload images
to a bucket bearing their user id and matching the correct metadata:

_*Example*_

    // Users are allowed to subscribe and unsubscribe to the blog.
    service firebase.storage {
      match /users/{userId}/images/{imageName} {
          allow write: if userId == request.auth.uid
              &amp;&amp; (imageName.matches(&#x27;*.png$&#x27;)
              || imageName.matches(&#x27;*.jpg$&#x27;))
              &amp;&amp; resource.mimeType.matches(&#x27;^image/&#x27;)
      }
    }

Args:
  name: string, Tests may either provide `source` or a `Ruleset` resource name.

For tests against `source`, the resource name must refer to the project:
Format: `projects/{project_id}`

For tests against a `Ruleset`, this must be the `Ruleset` resource name:
Format: `projects/{project_id}/rulesets/{ruleset_id}` (required)
  body: object, The request body.
    The object takes the form of:

{ # The request for FirebaseRulesService.TestRuleset.
    &quot;source&quot;: { # `Source` is one or more `File` messages comprising a logical set of rules. # Optional `Source` to be checked for correctness.
        # 
        # This field must not be set when the resource name refers to a `Ruleset`.
      &quot;files&quot;: [ # `File` set constituting the `Source` bundle.
        { # `File` containing source content.
          &quot;fingerprint&quot;: &quot;A String&quot;, # Fingerprint (e.g. github sha) associated with the `File`.
          &quot;name&quot;: &quot;A String&quot;, # File name.
          &quot;content&quot;: &quot;A String&quot;, # Textual Content.
        },
      ],
    },
    &quot;testSuite&quot;: { # `TestSuite` is a collection of `TestCase` instances that validate the logical # Inline `TestSuite` to run.
        # correctness of a `Ruleset`. The `TestSuite` may be referenced in-line within
        # a `TestRuleset` invocation or as part of a `Release` object as a pre-release
        # check.
      &quot;testCases&quot;: [ # Collection of test cases associated with the `TestSuite`.
        { # `TestCase` messages provide the request context and an expectation as to
            # whether the given context will be allowed or denied. Test cases may specify
            # the `request`, `resource`, and `function_mocks` to mock a function call to
            # a service-provided function.
            #
            # The `request` object represents context present at request-time.
            #
            # The `resource` is the value of the target resource as it appears in
            # persistent storage before the request is executed.
          &quot;resource&quot;: &quot;&quot;, # Optional resource value as it appears in persistent storage before the
              # request is fulfilled.
              #
              # The resource type depends on the `request.path` value.
          &quot;request&quot;: &quot;&quot;, # Request context.
              #
              # The exact format of the request context is service-dependent. See the
              # appropriate service documentation for information about the supported
              # fields and types on the request. Minimally, all services support the
              # following fields and types:
              #
              # Request field  | Type
              # ---------------|-----------------
              # auth.uid       | `string`
              # auth.token     | `map&lt;string, string&gt;`
              # headers        | `map&lt;string, string&gt;`
              # method         | `string`
              # params         | `map&lt;string, string&gt;`
              # path           | `string`
              # time           | `google.protobuf.Timestamp`
              #
              # If the request value is not well-formed for the service, the request will
              # be rejected as an invalid argument.
          &quot;expressionReportLevel&quot;: &quot;A String&quot;, # Specifies what should be included in the response.
          &quot;functionMocks&quot;: [ # Optional function mocks for service-defined functions. If not set, any
              # service defined function is expected to return an error, which may or may
              # not influence the test outcome.
            { # Mock function definition.
                #
                # Mocks must refer to a function declared by the target service. The type of
                # the function args and result will be inferred at test time. If either the
                # arg or result values are not compatible with function type declaration, the
                # request will be considered invalid.
                #
                # More than one `FunctionMock` may be provided for a given function name so
                # long as the `Arg` matchers are distinct. There may be only one function
                # for a given overload where all `Arg` values are `Arg.any_value`.
              &quot;result&quot;: { # Possible result values from the function mock invocation. # The mock result of the function call.
                &quot;undefined&quot;: { # A generic empty message that you can re-use to avoid defining duplicated # The result is undefined, meaning the result could not be computed.
                    # empty messages in your APIs. A typical example is to use it as the request
                    # or the response type of an API method. For instance:
                    #
                    #     service Foo {
                    #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
                    #     }
                    #
                    # The JSON representation for `Empty` is empty JSON object `{}`.
                },
                &quot;value&quot;: &quot;&quot;, # The result is an actual value. The type of the value must match that
                    # of the type declared by the service.
              },
              &quot;args&quot;: [ # The list of `Arg` values to match. The order in which the arguments are
                  # provided is the order in which they must appear in the function
                  # invocation.
                { # Arg matchers for the mock function.
                  &quot;anyValue&quot;: { # A generic empty message that you can re-use to avoid defining duplicated # Argument matches any value provided.
                      # empty messages in your APIs. A typical example is to use it as the request
                      # or the response type of an API method. For instance:
                      #
                      #     service Foo {
                      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
                      #     }
                      #
                      # The JSON representation for `Empty` is empty JSON object `{}`.
                  },
                  &quot;exactValue&quot;: &quot;&quot;, # Argument exactly matches value provided.
                },
              ],
              &quot;function&quot;: &quot;A String&quot;, # The name of the function.
                  #
                  # The function name must match one provided by a service declaration.
            },
          ],
          &quot;expectation&quot;: &quot;A String&quot;, # Test expectation.
          &quot;pathEncoding&quot;: &quot;A String&quot;, # Specifies whether paths (such as request.path) are encoded and how.
        },
      ],
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for FirebaseRulesService.TestRuleset.
    &quot;testResults&quot;: [ # The set of test results given the test cases in the `TestSuite`.
        # The results will appear in the same order as the test cases appear in the
        # `TestSuite`.
      { # Test result message containing the state of the test as well as a
          # description and source position for test failures.
        &quot;state&quot;: &quot;A String&quot;, # State of the test.
        &quot;functionCalls&quot;: [ # The set of function calls made to service-defined methods.
            #
            # Function calls are included in the order in which they are encountered
            # during evaluation, are provided for both mocked and unmocked functions,
            # and included on the response regardless of the test `state`.
          { # Represents a service-defined function call that was invoked during test
              # execution.
            &quot;function&quot;: &quot;A String&quot;, # Name of the function invoked.
            &quot;args&quot;: [ # The arguments that were provided to the function.
              &quot;&quot;,
            ],
          },
        ],
        &quot;visitedExpressions&quot;: [ # The set of visited permission expressions for a given test. This returns
            # the positions and evaluation results of all visited permission
            # expressions which were relevant to the test case, e.g.
            # ```
            # match /path {
            #   allow read if: &lt;expr&gt;
            # }
            # ```
            # For a detailed report of the intermediate evaluation states, see the
            # `expression_reports` field
          { # Store the position and access outcome for an expression visited in rules.
            &quot;sourcePosition&quot;: { # Position in the `Source` content including its line, column number, and an # Position in the `Source` or `Ruleset` where an expression was visited.
                # index of the `File` in the `Source` message. Used for debug purposes.
              &quot;currentOffset&quot;: 42, # Start position relative to the beginning of the file.
              &quot;column&quot;: 42, # First column on the source line associated with the source fragment.
              &quot;line&quot;: 42, # Line number of the source fragment. 1-based.
              &quot;fileName&quot;: &quot;A String&quot;, # Name of the `File`.
              &quot;endOffset&quot;: 42, # End position relative to the beginning of the file.
            },
            &quot;value&quot;: &quot;&quot;, # The evaluated value for the visited expression, e.g. true/false
          },
        ],
        &quot;expressionReports&quot;: [ # The mapping from expression in the ruleset AST to the values they were
            # evaluated to. Partially-nested to mirror AST structure. Note that this
            # field is actually tracking expressions and not permission statements in
            # contrast to the &quot;visited_expressions&quot; field above. Literal expressions
            # are omitted.
          { # Describes where in a file an expression is found and what it was
              # evaluated to over the course of its use.
            &quot;children&quot;: [ # Subexpressions
              # Object with schema name: ExpressionReport
            ],
            &quot;sourcePosition&quot;: { # Position in the `Source` content including its line, column number, and an # Position of expression in original rules source.
                # index of the `File` in the `Source` message. Used for debug purposes.
              &quot;currentOffset&quot;: 42, # Start position relative to the beginning of the file.
              &quot;column&quot;: 42, # First column on the source line associated with the source fragment.
              &quot;line&quot;: 42, # Line number of the source fragment. 1-based.
              &quot;fileName&quot;: &quot;A String&quot;, # Name of the `File`.
              &quot;endOffset&quot;: 42, # End position relative to the beginning of the file.
            },
            &quot;values&quot;: [ # Values that this expression evaluated to when encountered.
              { # Tuple for how many times an Expression was evaluated to a particular
                  # ExpressionValue.
                &quot;count&quot;: 42, # The amount of times that expression returned.
                &quot;value&quot;: &quot;&quot;, # The return value of the expression
              },
            ],
          },
        ],
        &quot;errorPosition&quot;: { # Position in the `Source` content including its line, column number, and an # Position in the `Source` or `Ruleset` where the principle runtime error
            # occurs.
            #
            # Evaluation of an expression may result in an error. Rules are deny by
            # default, so a `DENY` expectation when an error is generated is valid.
            # When there is a `DENY` with an error, the `SourcePosition` is returned.
            #
            # E.g. `error_position { line: 19 column: 37 }`
            # index of the `File` in the `Source` message. Used for debug purposes.
          &quot;currentOffset&quot;: 42, # Start position relative to the beginning of the file.
          &quot;column&quot;: 42, # First column on the source line associated with the source fragment.
          &quot;line&quot;: 42, # Line number of the source fragment. 1-based.
          &quot;fileName&quot;: &quot;A String&quot;, # Name of the `File`.
          &quot;endOffset&quot;: 42, # End position relative to the beginning of the file.
        },
        &quot;debugMessages&quot;: [ # Debug messages related to test execution issues encountered during
            # evaluation.
            #
            # Debug messages may be related to too many or too few invocations of
            # function mocks or to runtime errors that occur during evaluation.
            #
            # For example: ```Unable to read variable [name: &quot;resource&quot;]```
          &quot;A String&quot;,
        ],
      },
    ],
    &quot;issues&quot;: [ # Syntactic and semantic `Source` issues of varying severity. Issues of
        # `ERROR` severity will prevent tests from executing.
      { # Issues include warnings, errors, and deprecation notices.
        &quot;description&quot;: &quot;A String&quot;, # Short error description.
        &quot;sourcePosition&quot;: { # Position in the `Source` content including its line, column number, and an # Position of the issue in the `Source`.
            # index of the `File` in the `Source` message. Used for debug purposes.
          &quot;currentOffset&quot;: 42, # Start position relative to the beginning of the file.
          &quot;column&quot;: 42, # First column on the source line associated with the source fragment.
          &quot;line&quot;: 42, # Line number of the source fragment. 1-based.
          &quot;fileName&quot;: &quot;A String&quot;, # Name of the `File`.
          &quot;endOffset&quot;: 42, # End position relative to the beginning of the file.
        },
        &quot;severity&quot;: &quot;A String&quot;, # The severity of the issue.
      },
    ],
  }</pre>
</div>

</body></html>