# 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:
          "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

          Verify the NodeLabel attribute On TH(chip-tool) Log

          [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:
          "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:
          "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

          Verify the NodeLabel attribute On TH(chip-tool) Log

          [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:
          "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: "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

          Verify the Onoff attribute On TH(chip-tool) Log
          [1657004565.254591][4804:4809] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0006 Attribute 0x0000_0000 DataVersion: 3808303316
          [1657004565.254635][4804:4809] CHIP:TOO:   OnOff: TRUE
      disabled: true

    - label:
          "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: "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

          Verify the Onoff attribute On TH(chip-tool) Log

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