# 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.

name: 57.1.1. [TC-I-1.1] Global attributes with server as DUT

PICS:
    - I.S

config:
    nodeId: 0x12344321
    cluster: "Identify"
    endpoint: 1

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

    - label: "TH reads the ClusterRevision attribute from the DUT"
      command: "readAttribute"
      attribute: "ClusterRevision"
      response:
          value: 4
          constraints:
              type: int16u

    - label: "TH reads the FeatureMap attribute from the DUT"
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          value: 0
          constraints:
              type: bitmap32

    #Commenting out the step FeatureMap attribute feature PICS I.S.F00(QRY) which is out of scope for matter V1.0
    #- label: "TH reads the FeatureMap attribute from the DUT"
    #  PICS: I.S.F00
    #  command: "readAttribute"
    #  attribute: "FeatureMap"
    #  response:
    #      value: 1
    #      constraints:
    #          type: bitmap32

    - label: "Read the global attribute: AttributeList"
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [0, 1, 65528, 65529, 65531, 65532, 65533]

    - label: "Read the global attribute: AcceptedCommandList"
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [0]

    - label: "Read the optional command(TriggerEffect) in AcceptedCommandList"
      PICS: I.S.C40.Rsp
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [64]

    #Commenting out the step IdentifyQuery (0x01) is not supported by Matter 1.0.
    #- label: "Read the optional attribute(IdentifyQuery) in AcceptedCommandList"
    #  PICS: I.S.C01.Rsp
    #  command: "readAttribute"
    #  attribute: "AcceptedCommandList"
    #  response:
    #      constraints:
    #          type: list
    #          contains: [1]

    - label: "Read the global attribute: GeneratedCommandList"
      command: "readAttribute"
      attribute: "GeneratedCommandList"
      response:
          value: []
          constraints:
              type: list
    #Commenting out the step IdentifyQueryResponse (0x00) is not supported by Matter 1.0
    #- label:
    #      "Read the optional command(IdentifyQueryResponse) in
    #      GeneratedCommandList"
    #  PICS: I.S.C00.Tx
    #  command: "readAttribute"
    #  attribute: "GeneratedCommandList"
    #  response:
    #      value: [0]
    #      constraints:
    #          type: list
    #Commenting out the step EventList attribute which is out of scope for matter V1.0
    #- label:
    #      "Read EventList attribute from the DUT and Verify that the DUT
    #      response provides a list of supported events."
    #  verification: |
    #      Not implemented in chip-tool
    #  cluster: "LogCommands"
    #  command: "UserPrompt"
    #  PICS: PICS_USER_PROMPT
    #  arguments:
    #      values:
    #          - name: "message"
    #            value: "Please enter 'y' for success"
    #          - name: "expectedValue"
    #            value: "y"
