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

name: 139.2.4. [TC-BRBINFO-3.1] Appearance Attribute DUT as Server

PICS:
    - BRBINFO.S

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

tests:
    - label: "Note"
      verification: |
          This test plan is derived from the test plan for the Basic Information cluster.
      disabled: true

    - label: "Step 1: TH reads ProductAppearance from the DUT."
      PICS: BRBINFO.S.A0014
      verification: |
          ./chip-tool bridgeddevicebasicinformation read product-appearance 1 3

          Via the TH (chip-tool), verify that the ProductAppearance attribute value is in ProductAppearanceStruct Finish value is in range 0-5.

          Current sample apps do not have this implementation. However, if the vendor has implemented it, the below response will be displayed.


           [1685008885.082338][143325:143327] CHIP:DMG: }
           [1685008885.082831][143325:143327] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0014 DataVersion: 106877633
           [1685008885.083153][143325:143327] CHIP:TOO: ProductAppearance: {
           [1685008885.083160][143325:143327] CHIP:TOO: Finish: 2
           [1685008885.083162][143325:143327] CHIP:TOO: PrimaryColor: 5
           [1685008885.083164][143325:143327] CHIP:TOO: }
      disabled: true

    - label: "Step 2: TH reads ProductAppearance from the DUT."
      PICS: BRBINFO.S.A0014
      verification: |
          ./chip-tool bridgeddevicebasicinformation read product-appearance 1 3

          Via the TH (chip-tool), verify that the ProductAppearance attribute value is in ProductAppearanceStruct PrimaryColor is in range 0-20.

          Current sample apps do not have this implementation. However, if the vendor has implemented it, the below response will be displayed.

           [1685008885.082338][143325:143327] CHIP:DMG: }
           [1685008885.082831][143325:143327] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0014 DataVersion: 106877633
           [1685008885.083153][143325:143327] CHIP:TOO: ProductAppearance: {
           [1685008885.083160][143325:143327] CHIP:TOO: Finish: 2
           [1685008885.083162][143325:143327] CHIP:TOO: PrimaryColor: 5
           [1685008885.083164][143325:143327] CHIP:TOO: }
      disabled: true

    - label: "Step 3: TH reads ProductAppearance from the DUT."
      PICS: BRBINFO.S.A0014
      verification: |
          Vendor specific test-step

           Below is an example log (chip-tool) by assuming the PIXIT.BRBINFO.Finish is satin(2). So This should be verified by the vendor as per the PIXIT values provided.

           ./chip-tool bridgeddevicebasicinformation read product-appearance 1 3

           Via the TH (chip-tool), verify the TH reads ProductAppearance attribute from the DUT successfully.

           [1685008885.082338][143325:143327] CHIP:DMG: }
           [1685008885.082831][143325:143327] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0014 DataVersion: 106877633
           [1685008885.083153][143325:143327] CHIP:TOO: ProductAppearance: {
           [1685008885.083160][143325:143327] CHIP:TOO: Finish: 2
           [1685008885.083162][143325:143327] CHIP:TOO: PrimaryColor: 5
           [1685008885.083164][143325:143327] CHIP:TOO: }
      disabled: true

    - label: "Step 4: TH reads ProductAppearance from the DUT."
      PICS: BRBINFO.S.A0014
      verification: |
          Vendor specific test-step

           Below is an example log (chip-tool) by assuming the PIXIT.BRBINFO.PrimaryColor is purple(5). So This should be verified by the vendor as per the PIXIT values provided.

           ./chip-tool bridgeddevicebasicinformation read product-appearance 1 3

           Via the TH (chip-tool), verify the TH reads ProductAppearance attribute from the DUT successfully.

           [1685008885.082338][143325:143327] CHIP:DMG: }
           [1685008885.082831][143325:143327] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0014 DataVersion: 106877633
           [1685008885.083153][143325:143327] CHIP:TOO: ProductAppearance: {
           [1685008885.083160][143325:143327] CHIP:TOO: Finish: 2
           [1685008885.083162][143325:143327] CHIP:TOO: PrimaryColor: 5
           [1685008885.083164][143325:143327] CHIP:TOO: }
      disabled: true
