# 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.
# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default

name: 3.1.3. [TC-BR-3] Changing name and state of a bridged device (DUT server)

PICS:
    - MCORE.BRIDGE

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

tests:
    - label: "Precondition"
      verification: |
          1. DUT has been commissioned to TH

          2.Two or more bridged devices of a supported type connected via non-Matter network/protocol to DUT (bridge)
      disabled: true

    - label:
          "Step 1a: Get the name of a bridged device: Read the NodeLabel
          attribute of the Bridged Device Basic Information cluster on the
          applicable endpoint"
      PICS: MCORE.BRIDGE && MCORE.BRIDGE.AllowDeviceRename
      verification: |
          Read the NodeLabel attribute of the Bridged Device Basic Information cluster with EP 3

          ./chip-tool bridgeddevicebasicinformation read node-label 1 3

          Via the TH (chip-tool), Verify the NodeLabel attribute value contains a string.

          [1657013337.140125][5753:5758] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0005 DataVersion: 3293551312
          [1657013337.140235][5753:5758] CHIP:TOO:   NodeLabel: Light 1
      disabled: true

    - label:
          "Step 1b: Using manufacturer provided means (i.e. NOT using Matter
          protocol), update the name of this bridged device"
      verification: |
          Press b on bridge app

          b
          [1657013342.067936][16436:16443] CHIP:DL: Device[Light 1]: New Name="Light 1b"
      disabled: true

    - label:
          "Step 1c: Read the NodeLabel attribute of the Bridged Device Basic
          Information cluster on the same endpoint as in 1a"
      verification: |
          Read the NodeLabel attribute of the Bridged Device Basic Information cluster with EP 3, verify the name is changed

          ./chip-tool bridgeddevicebasicinformation read node-label 1 3

          Via the TH (chip-tool), Verify the NodeLabel attribute value has changed.

          [1657013347.277584][5759:5764] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0005 DataVersion: 3293551313
          [1657013347.277631][5759:5764] CHIP:TOO:   NodeLabel: Light 1b
      disabled: true

    - label:
          "Step 2a: Choose a bridged device for which the state can be changed
          through a non-Matter interface (example: bridge manufacturer provides
          an app which can change the state of the bridged devices, e.g. change
          a lights brightness)"
      PICS: MCORE.BRIDGE && MCORE.BRIDGE.OtherControl
      verification: |
          Choose on-off cluster on EP 3
      disabled: true

    - label:
          "Step 2b: Read the state (e.g. on/off, brightness) of that bridged
          device"
      verification: |
          Read OnOff attribute of On/Off cluster

          ./chip-tool onoff read on-off 1 3

          Via the TH (chip-tool),  Verify the state of Onoff attribute that contains bool value.

          [1657004565.254591][4804:4809] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0006 Attribute 0x0000_0000 DataVersion: 3808303316
          [1657004565.254635][4804:4809] CHIP:TOO:   OnOff: FALSE
      disabled: true

    - label:
          "Step 2c: Change the state (e.g. on/off, brightness) of that bridged
          device with this 'other' interface."
      verification: |
          Press c on bridge-app to change the state
      disabled: true

    - label: "Step 2d: Read the state of that bridged device again (as in 2b)"
      verification: |
          Read OnOff attribute of On/Off cluster and verify the value is different compared to step 2b

          ./chip-tool onoff read on-off 1 3

          Via the TH (chip-tool),  Verify the Onoff attribute state has changed.

          [1657004454.213279][4792:4798] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0006 Attribute 0x0000_0000 DataVersion: 3808303315
          [1657004454.213319][4792:4798] CHIP:TOO:   OnOff: TRUE
      disabled: true
