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

name: 4.1.1. [TC-SMOKECO-1.1] Global Attributes with DUT as Server

PICS:
    - SMOKECO.S

config:
    nodeId: 0x12344321
    cluster: "Smoke CO Alarm"
    endpoint: 1

tests:
    - label: "Step 1: Commission DUT to TH"
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

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

    - label: "Step 3a: TH reads from the DUT the FeatureMap attribute"
      PICS: "!SMOKECO.S.F00 && !SMOKECO.S.F01"
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          value: 0
          constraints:
              type: bitmap32

    - label:
          "Step 3b: TH reads from the DUT the FeatureMap attribute(Smoke Alarm)"
      PICS: SMOKECO.S.F00 && !SMOKECO.S.F01
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          value: 1
          constraints:
              type: bitmap32

    - label: "Step 3c: TH reads from the DUT the FeatureMap attribute(CO Alarm)"
      PICS: SMOKECO.S.F01 && !SMOKECO.S.F00
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          value: 2
          constraints:
              type: bitmap32

    - label:
          "Step 3d: TH reads from the DUT the FeatureMap attribute(Smoke Alarm &
          CO Alarm)"
      PICS: SMOKECO.S.F00 && SMOKECO.S.F01
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          value: 3
          constraints:
              type: bitmap32

    - label: "Step 4a: TH reads from the DUT the AttributeList attribute"
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [0, 3, 5, 6, 7, 65528, 65529, 65531, 65532, 65533]

    - label:
          "Step 4b: TH reads from the DUT the AttributeList
          attribute(SmokeState)"
      PICS: SMOKECO.S.A0001 && SMOKECO.S.F00
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [1]

    - label:
          "Step 4c: TH reads from the DUT the AttributeList attribute(COState)"
      PICS: SMOKECO.S.A0002 && SMOKECO.S.F01
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [2]

    - label:
          "Step 4d: TH reads from the DUT the AttributeList
          attribute(DeviceMuted)"
      PICS: SMOKECO.S.A0004
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [4]

    - label:
          "Step 4e: TH reads from the DUT the AttributeList
          attribute(InterconnectSmokeAlarm)"
      PICS: SMOKECO.S.A0008
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [8]

    - label:
          "Step 4f: TH reads from the DUT the AttributeList
          attribute(InterconnectCOAlarm)"
      PICS: SMOKECO.S.A0009
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [9]

    - label:
          "Step 4g: TH reads from the DUT the AttributeList
          attribute(ContaminationState)"
      PICS: SMOKECO.S.A000a
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [10]

    - label:
          "Step 4h: TH reads from the DUT the AttributeList
          attribute(SmokeSensitivityLevel)"
      PICS: SMOKECO.S.A000b
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [11]

    - label:
          "Step 4i: TH reads from the DUT the AttributeList
          attribute(ExpiryDate)"
      PICS: SMOKECO.S.A000c
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [12]

    - label: "Step 5a: TH reads from the DUT the EventList attribute"
      PICS: PICS_EVENT_LIST_ENABLED
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [2, 3, 4, 5, 10]

    - label:
          "Step 5b: TH reads from the DUT the EventList attribute(SmokeAlarm)"
      PICS: PICS_EVENT_LIST_ENABLED && SMOKECO.S.E00
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [0]

    - label: "Step 5c: TH reads from the DUT the EventList attribute(COAlarm)"
      PICS: PICS_EVENT_LIST_ENABLED && SMOKECO.S.E01
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [1]

    - label:
          "Step 5d: TH reads from the DUT the EventList attribute(AlarmMuted)"
      PICS: PICS_EVENT_LIST_ENABLED && SMOKECO.S.E06
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [6]

    - label: "Step 5e: TH reads from the DUT the EventList attribute(MuteEnded)"
      PICS: PICS_EVENT_LIST_ENABLED && SMOKECO.S.E07
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [7]

    - label:
          "Step 5f: TH reads from the DUT the EventList
          attribute(InterconnectSmokeAlarm)"
      PICS: PICS_EVENT_LIST_ENABLED && SMOKECO.S.E08
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [8]

    - label:
          "Step 5g: TH reads from the DUT the EventList
          attribute(InterconnectCOAlarm)"
      PICS: PICS_EVENT_LIST_ENABLED && SMOKECO.S.E09
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [9]

    - label: "Step 6a: TH reads from the DUT the AcceptedCommandList attribute"
      PICS: "!SMOKECO.S.C00.Rsp"
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          value: []
          constraints:
              type: list

    - label: "Step 6b: TH reads from the DUT the AcceptedCommandList attribute"
      PICS: SMOKECO.S.C00.Rsp
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [0]

    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute"
      command: "readAttribute"
      attribute: "GeneratedCommandList"
      response:
          value: []
          constraints:
              type: list
