# Copyright (c) 2023 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Events Tests

config:
    nodeId: 0x12344321
    endpoint: 1
    cluster: "Unit Testing"

    UnsupportedCluster: 0xFFF11FFF
    UnsupportedEvent: 0xFFF11FFF
    UnsupportedEndPoint: 254

    ReadRequestMessage.Cluster: 0xFFF1FC05
    ReadRequestMessage.Event: 0x0001
    ReadRequestMessage.EndPoint: 1

tests:
    - label: "Wait for the commissioned device to be retrieved"
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    - label:
          "Read Request Message with a path that indicates a specific endpoint
          that is unsupported"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: UnsupportedEndPoint
      arguments:
          values:
              - name: "ClusterId"
                value: ReadRequestMessage.Cluster
              - name: "EventId"
                value: ReadRequestMessage.Event
      response:
          error: UNSUPPORTED_ENDPOINT

    - label:
          "Read Request Message with a path that indicates a specific cluster
          that is unsupported"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "ClusterId"
                value: UnsupportedCluster
              - name: "EventId"
                value: ReadRequestMessage.Event
      response:
          error: UNSUPPORTED_CLUSTER

    - label:
          "Read Request Message with a path that indicates a specific event that
          is unsupported"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "ClusterId"
                value: ReadRequestMessage.Cluster
              - name: "EventId"
                value: UnsupportedEvent
      response: []

    - label:
          "Read Request Message with a path that indicates an event with no
          results"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "ClusterId"
                value: ReadRequestMessage.Cluster
              - name: "EventId"
                value: ReadRequestMessage.Event
      response: []

    - label: "Create an event on the accessory"
      command: "TestEmitTestEventRequest"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "arg1"
                value: 1
              - name: "arg2"
                value: 2
              - name: "arg3"
                value: true
      response:
          values:
              - name: "value"
                saveAs: eventNumber

    - label: "Read the event back"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "ClusterId"
                value: ReadRequestMessage.Cluster
              - name: "EventId"
                value: ReadRequestMessage.Event
      response:
          value: { arg1: 1, arg2: 2, arg3: true }

    - label: "Read the event with eventNumber set to the event value"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: ReadRequestMessage.EndPoint
      eventNumber: eventNumber
      arguments:
          values:
              - name: "ClusterId"
                value: ReadRequestMessage.Cluster
              - name: "EventId"
                value: ReadRequestMessage.Event
      response:
          value: { arg1: 1, arg2: 2, arg3: true }

    - label: "Read the event with eventNumber set to the event value + 1"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: ReadRequestMessage.EndPoint
      eventNumber: eventNumber + 1
      arguments:
          values:
              - name: "ClusterId"
                value: ReadRequestMessage.Cluster
              - name: "EventId"
                value: ReadRequestMessage.Event
      response: []

    - label: "Generate a second event on the accessory"
      command: "TestEmitTestEventRequest"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "arg1"
                value: 3
              - name: "arg2"
                value: 1
              - name: "arg3"
                value: false
      response:
          values:
              - name: "value"
                value: eventNumber + 1

    - label: "Read the event back"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "ClusterId"
                value: ReadRequestMessage.Cluster
              - name: "EventId"
                value: ReadRequestMessage.Event
      response:
          - values:
                - value: { arg1: 1, arg2: 2, arg3: true }
          - values:
                - value: { arg1: 3, arg2: 1, arg3: false }

    - label: "Subscribe to the event"
      cluster: "AnyCommands"
      command: "SubscribeEventById"
      endpoint: ReadRequestMessage.EndPoint
      minInterval: 3
      maxInterval: 5
      arguments:
          values:
              - name: "ClusterId"
                value: ReadRequestMessage.Cluster
              - name: "EventId"
                value: ReadRequestMessage.Event
      response:
          - values:
                - value: { arg1: 1, arg2: 2, arg3: true }
          - values:
                - value: { arg1: 3, arg2: 1, arg3: false }

    - label: "Generate a third event on the accessory"
      command: "TestEmitTestEventRequest"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "arg1"
                value: 4
              - name: "arg2"
                value: 3
              - name: "arg3"
                value: true
      response:
          values:
              - name: "value"
                value: eventNumber + 2

    - label: "Check for event report"
      command: "waitForReport"
      event: "TestEvent"
      endpoint: ReadRequestMessage.EndPoint
      response:
          values:
              - name: "TestEvent"
                value: { arg1: 4, arg2: 3, arg3: true }

    - label:
          "Read Request Message with a path that indicates a specific
          endpoint/cluster and a wildcard event"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "ClusterId"
                value: ReadRequestMessage.Cluster
              - name: "EventId"
                value: "*"
      response:
          - values:
                - value: { arg1: 1, arg2: 2, arg3: true }
          - values:
                - value: { arg1: 3, arg2: 1, arg3: false }
          - values:
                - value: { arg1: 4, arg2: 3, arg3: true }

    - label:
          "Read Request Message with a path that indicates a specific
          endpoint/event and a wildcard cluster"
      cluster: "AnyCommands"
      command: "ReadEventById"
      endpoint: ReadRequestMessage.EndPoint
      arguments:
          values:
              - name: "ClusterId"
                value: "*"
              - name: "EventId"
                value: ReadRequestMessage.EndPoint
      response:
          # Not a valid event request path.
          error: FAILURE
