# 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: 58.2.2. [TC-I-2.2] Primary functionality with server as DUT

PICS:
    - I.S

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

tests:
    - label:
          "Step 1a: Commission DUT to TH (can be skipped if done in a preceding
          test)."
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    - label: "Step 1b: TH reads the IdentifyType attribute from the DUT."
      PICS: I.S.A0001
      command: "readAttribute"
      attribute: "IdentifyType"
      response:
          saveAs: IdentifyTypeValue
          constraints:
              type: enum8
              minValue: 0
              maxValue: 5

    - label:
          "Step 2a: TH sends Identify command to DUT, with the IdentifyTime
          field set to 0x003c (60s)."
      PICS: I.S.C00.Rsp
      command: "Identify"
      arguments:
          values:
              - name: "IdentifyTime"
                value: 60

    - label: "Step 2b: TH reads immediately IdentifyTime attribute from DUT"
      PICS: I.S.A0000
      command: "readAttribute"
      attribute: "IdentifyTime"
      response:
          constraints:
              minValue: 51
              maxValue: 69

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

    - label:
          "Step 2c: After 10 seconds, the TH reads IdentifyTime attribute from
          DUT"
      PICS: I.S.A0000
      command: "readAttribute"
      attribute: "IdentifyTime"
      response:
          constraints:
              minValue: 42
              maxValue: 58

    # - label:
    #       "Step 3: TH sends IdentifyQuery command to DUT and Verify
    #       IdentifyQueryResponse command to TH,with the Timeout field set to a
    #       value in the range 0x0000 to 0x0032"
    #   verification: |
    #       IdentifyQuery is not supported by Matter
    #   cluster: "LogCommands"
    #   command: "UserPrompt"
    #   PICS: PICS_USER_PROMPT && I.S.C01.Rsp && I.S.C00.Tx
    #   arguments:
    #       values:
    #           - name: "message"
    #             value: "Please enter 'y' for success"
    #           - name: "expectedValue"
    #             value: "y"

    - label:
          "Step 4a: Before 60 seconds expire, TH sends Identify command to DUT,
          with the identify time field set to 0x0000 (stop identifying)."
      PICS: I.S.C00.Rsp
      command: "Identify"
      arguments:
          values:
              - name: "IdentifyTime"
                value: 0

    - label: "Step 4b: TH reads immediately IdentifyTime attribute from DUT"
      PICS: I.S.A0000
      command: "readAttribute"
      attribute: "IdentifyTime"
      response:
          value: 0

    # disabled due to IdentifyQuery not supported for matter V1.0
    #- label: "Step 5: TH sends IdentifyQuery command to DUT "
    #  verification: |
    #      IdentifyQuery is not supported by Matter
    #  cluster: "LogCommands"
    #  command: "UserPrompt"
    #  PICS: PICS_USER_PROMPT && I.S.C01.Rsp && I.S.C00.Tx
    #  arguments:
    #      values:
    #          - name: "message"
    #            value: "Please enter 'y' for success"
    #          - name: "expectedValue"
    #            value: "y"

    - label:
          "Step 6a: Verify that the device enters its identification state using
          the IdentifyType from Step 1b, in order to indicate to an observer
          which of several nodes and/or endpoints it is."
      verification: |
          Verify that the device enters its identification state using the IdentifyType from step1b,
          Here the Identifytype is 2(VisibleIndicator) which can be a small led that indicates the device is in identification state.
          This IdentifyType can vary to device ref: 1.2.5.1 in spec for the IdentifyTypeEnum of the particular DUT
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && I.S.A0001
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label:
          "Step 6a: TH writes a value of 0x000f (15s) to IdentifyTime attribute
          of DUT"
      PICS: I.S.A0000
      command: "writeAttribute"
      attribute: "IdentifyTime"
      arguments:
          value: 15

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

    - label:
          "Step 6b: After 15 seconds, the TH reads IdentifyTime attribute from
          DUT"
      PICS: I.S.A0000
      command: "readAttribute"
      attribute: "IdentifyTime"
      response:
          constraints:
              minValue: 0
              maxValue: 5

    - label:
          "Step 6b: Verify that the device terminates its identification state"
      verification: |
          Verify that the identification state is terminated in the DUT.
          Here the Identifytype is 2(VisibleIndicator) which can be a small led that indicates the device is in identification state.
          This IdentifyType can vary to device ref: 1.2.5.1 in spec for the IdentifyTypeEnum of the particular DUT
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && I.S.A0001
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"
