# 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: Window Covering [TC-WNCV-1.1] Global attributes with server as DUT

PICS:
    - WNCV.S

config:
    nodeId: 0x12344321
    cluster: "Window Covering"
    endpoint: 1

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

    ### MANDATORY GLOBAL Attributes
    ### Attribute[0xFFFD]: ClusterRevision =======================================
    - label: "TH reads from the DUT the (0xFFFD) ClusterRevision attribute"
      PICS: WNCV.S.Afffd
      command: "readAttribute"
      attribute: "ClusterRevision"
      response:
          value: 5
          constraints:
              type: int16u
              minValue: 5
              maxValue: 200

    - label: "TH reads from the DUT the (0xFFFC) FeatureMap attribute"
      PICS:
          " WNCV.S.Afffc && !WNCV.S.F00 && !WNCV.S.F01 && !WNCV.S.F02 &&
          !WNCV.S.F03 && !WNCV.S.F04 "
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          value: 0
          constraints:
              type: bitmap32

    - label: "Given WNCV.S.F00(LF) ensure featuremap has the correct bit set"
      PICS: WNCV.S.F00
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x1]

    - label: "Given  WNCV.S.F01(TL) ensure featuremap has the correct bit set"
      PICS: WNCV.S.F01
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x2]

    - label: "Given WNCV.S.F02(PA_LF) ensure featuremap has the correct bit set"
      PICS: WNCV.S.F02
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x4]

    - label: "Given WNCV.S.F03(ABS) ensure featuremap has the correct bit set"
      PICS: WNCV.S.F03
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x8]

    - label: "Given WNCV.S.F04(PA_TL) ensure featuremap has the correct bit set"
      PICS: WNCV.S.F04
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x10]

    - label: "TH reads from the DUT the (0xFFFB) AttributeList attribute"
      PICS: WNCV.S.Afffb
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [0, 7, 10, 13, 23, 65528, 65529, 65531, 65532, 65533]

    - label: "TH reads optional attribute(SafetyStatus) in AttributeList"
      PICS: WNCV.S.Afffb && WNCV.S.A001a
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [26]

    - label:
          "Read the Feature dependent(WNCV.S.F00 & WNCV.S.F02 & WNCV.S.F03)
          attribute in AttributeList"
      PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.F03 && WNCV.S.Afffb
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [16, 17]

    - label:
          "Read the Feature dependent(WNCV.S.F00 & WNCV.S.F02 ) attribute in
          AttributeList"
      PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.Afffb
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [11, 14]

    - label:
          "Read the Feature dependent(WNCV.S.F01 & WNCV.S.F04 & WNCV.S.F03)
          attribute in AttributeList"
      PICS: WNCV.S.F01 && WNCV.S.F04 && WNCV.S.F03 && WNCV.S.Afffb
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [18, 19]

    - label:
          "Read the Feature dependent(WNCV.S.F01 & WNCV.S.F04 ) attribute in
          AttributeList"
      PICS: WNCV.S.F01 && WNCV.S.F04 && WNCV.S.Afffb
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [12, 15]

    - label: "TH reads from the DUT the (0xFFF9) AcceptedCommandList attribute"
      PICS: WNCV.S.Afff9
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [0, 1, 2]

    - label:
          "TH reads Feature dependent(WNCV.S.F00 & WNCV.S.F02) command in
          AcceptedCommandList"
      PICS: WNCV.S.Afff9 && WNCV.S.F00 && WNCV.S.F02
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [5]

    - label:
          "TH reads Feature dependent(WNCV.S.F01 & WNCV.S.F03) command in
          AcceptedCommandList"
      PICS: WNCV.S.Afff9 && WNCV.S.F01 && WNCV.S.F03
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [7]

    - label:
          "TH reads Feature dependent(WNCV.S.F01 & WNCV.S.F04) command in
          AcceptedCommandList"
      PICS: WNCV.S.Afff9 && WNCV.S.F01 && WNCV.S.F04
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [8]

    - label: "TH reads from the DUT the (0xFFF8) GeneratedCommandList attribute"
      PICS: WNCV.S.Afff8
      command: "readAttribute"
      attribute: "GeneratedCommandList"
      response:
          value: []
          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"
