# Copyright (c) 2021 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.

# !!!!!!!!!! DO NOT RUN IN CI - ONLY USED IN MANUAL GROUP MESSAGING DEMONSTRATION !!!!!!!!!!

# This test file is used in the group messaging demonstration to send on/off commands to light-apps that have been added to the group with TestGroupDemoConfig
# This file is used in tandem with TestGroupDemoConfig that configures the light-apps.
#
# To run this test file : chip-tool tests TestGroupDemoCommand <nodeid>
#   The nodeid isn't used in the actual tests, but it is necessary with the current test infrastructure.
#   Use the node id of one of the commisioned light-apps.
#
# Full test procedure :
#   chip-tool tests TestGroupDemoConfig <nodeid>  - Run this command for every light app nodeid that will be used for the demonstration
#   chip-tool tests TestGroupDemoCommand <nodeid>
name: Group Messaging Demo Commands

config:
    nodeId: 0x12344321
    cluster: "Basic"
    endpoint: 0

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

    # Toggle 1
    - label: "Turn On the light to see attribute change"
      cluster: "On/Off"
      command: "On"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

    - label: "Turn Off the light to see attribute change"
      cluster: "On/Off"
      command: "Off"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

    # Toggle 2
    - label: "Turn On the light to see attribute change"
      cluster: "On/Off"
      command: "On"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

    - label: "Turn Off the light to see attribute change"
      cluster: "On/Off"
      command: "Off"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

      # Toggle 3
    - label: "Turn On the light to see attribute change"
      cluster: "On/Off"
      command: "On"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

    - label: "Turn Off the light to see attribute change"
      cluster: "On/Off"
      command: "Off"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

    # Toggle 4
    - label: "Turn On the light to see attribute change"
      cluster: "On/Off"
      command: "On"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

    - label: "Turn Off the light to see attribute change"
      cluster: "On/Off"
      command: "Off"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

    # Toggle 5
    - label: "Turn On the light to see attribute change"
      cluster: "On/Off"
      command: "On"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

    - label: "Turn Off the light to see attribute change"
      cluster: "On/Off"
      command: "Off"
      groupId: 0x0101

    - label: "Wait 100ms"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000
