# Copyright (c) 2022 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
    cluster: "Unit Testing"
    endpoint: 1

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

    - label: "Check there is no event on the target endpoint"
      command: "readEvent"
      event: "TestEvent"
      response: []

    - label: "Check reading events from an invalid endpoint"
      command: "readEvent"
      event: "TestEvent"
      endpoint: 0
      response: []

    - label: "Generate an event on the accessory"
      command: "TestEmitTestEventRequest"
      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"
      command: "readEvent"
      event: "TestEvent"
      response:
          value: { arg1: 1, arg2: 2, arg3: true }

    - label: "Read the event with eventNumber set to the event value"
      command: "readEvent"
      event: "TestEvent"
      eventNumber: eventNumber
      response:
          value: { arg1: 1, arg2: 2, arg3: true }

    - label: "Read the event with eventNumber set to the event value + 1"
      command: "readEvent"
      event: "TestEvent"
      eventNumber: eventNumber + 1
      response: []

    - label: "Generate a second event on the accessory"
      command: "TestEmitTestEventRequest"
      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"
      command: "readEvent"
      event: "TestEvent"
      response:
          - values:
                - value: { arg1: 1, arg2: 2, arg3: true }
          - values:
                - value: { arg1: 3, arg2: 1, arg3: false }

    - label: "Subscribe to the event"
      command: "subscribeEvent"
      event: "TestEvent"
      minInterval: 3
      maxInterval: 5
      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"
      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"
      response:
          values:
              - name: "TestEvent"
                value: { arg1: 4, arg2: 3, arg3: true }
