# 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: 224.1.1. [TC-RVCOPSTATE-1.1] Global attributes [DUT as Server]

PICS:
    - RVCOPSTATE.S

config:
    nodeId: 0x12344321
    cluster: "RVC Operational State"
    endpoint: 1

tests:
    - label:
          "Step 1: 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 2: TH reads from the DUT the ClusterRevision attribute"
      command: "readAttribute"
      attribute: "ClusterRevision"
      response:
          value: 1
          constraints:
              type: int16u

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

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

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

    - label:
          "Step 4b: TH reads from the DUT the optional attribute(CountdownTime)
          in the AttributeList from the DUT"
      PICS: RVCOPSTATE.S.A0002
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [2]

    - 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: [0x00]

    - label:
          "Step 5b: TH reads from the DUT the optional
          event(OperationCompletion) in EventList."
      PICS: PICS_EVENT_LIST_ENABLED && RVCOPSTATE.S.E01
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [0x01]

    - label:
          "Step 6a: TH reads the optional command(Pause) in AcceptedCommandList"
      PICS: RVCOPSTATE.S.C00.Rsp || RVCOPSTATE.S.C03.Rsp
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [0, 3]

    - label:
          "Step 6b: TH reads the optional command(Stop) in AcceptedCommandList"
      PICS: RVCOPSTATE.S.C01.Rsp || RVCOPSTATE.S.C02.Rsp
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [1, 2]

    - label:
          "Step 6c: TH reads the optional command(Start) in AcceptedCommandList"
      PICS: RVCOPSTATE.S.C02.Rsp
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [2]

    - label:
          "Step 6d: TH reads the optional command(Resume) in AcceptedCommandList"
      PICS: RVCOPSTATE.S.C03.Rsp || RVCOPSTATE.S.C00.Rsp
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [0, 3]

    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute"
      PICS:
          " !RVCOPSTATE.S.C00.Rsp && !RVCOPSTATE.S.C01.Rsp &&
          !RVCOPSTATE.S.C02.Rsp && !RVCOPSTATE.S.C03.Rsp "
      command: "readAttribute"
      attribute: "GeneratedCommandList"
      response:
          value: []
          constraints:
              type: list

    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute"
      PICS:
          " RVCOPSTATE.S.C00.Rsp || RVCOPSTATE.S.C01.Rsp || RVCOPSTATE.S.C02.Rsp
          || RVCOPSTATE.S.C03.Rsp "
      command: "readAttribute"
      attribute: "GeneratedCommandList"
      response:
          constraints:
              type: list
              contains: [4]
