# Copyright (c) 2024 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: 265.1.1. [TC-EEVSE-1.1] Global Attributes with DUT as Server

PICS:
    - EEVSE.S

config:
    nodeId: 0x12344321
    cluster: "Energy EVSE"
    endpoint: 1

tests:
    - label: "Step 1: Wait for the commissioned device to be retrieved"
      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: 2
          constraints:
              type: int16u

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

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

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

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

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

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

    - 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,
                      2,
                      3,
                      5,
                      6,
                      7,
                      64,
                      65,
                      66,
                      65528,
                      65529,
                      65530,
                      65531,
                      65532,
                      65533,
                  ]

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

    - label:
          "Step 4b: TH reads optional attribute (UserMaximumChargeCurrent) in
          AttributeList from DUT"
      PICS: EEVSE.S.A0009
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [9]

    - label:
          "Step 4c: TH reads optional attribute (RandomizationDelayWindow) in
          AttributeList from DUT"
      PICS: EEVSE.S.A000A
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [10]

    - label:
          "Step 4d: TH reads optional attribute (V2X) in AttributeList from DUT"
      PICS: EEVSE.S.F04
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [4, 8, 67]

    - label:
          "Step 4e: TH reads optional attribute (ChargingPreferences) in
          AttributeList from DUT"
      PICS: EEVSE.S.F00
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [35, 36, 37, 38, 39]

    - label:
          "Step 4e: TH reads optional attribute (SoCReporting) in AttributeList
          from DUT"
      PICS: EEVSE.S.F01
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [48, 49]

    - label:
          "Step 4f: TH reads optional attribute (PlugAndCharge) in AttributeList
          from DUT"
      PICS: EEVSE.S.F02
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [50]

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

    - label: "Step 5b: TH reads optional attribute (RFID) in EventList from DUT"
      PICS: EEVSE.S.F03 && PICS_EVENT_LIST_ENABLED
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [5]

    - label: "Step 6a: TH reads AcceptedCommandList from DUT"
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [1, 2]

    - label:
          "Step 6b: TH reads the optional (StartDiagnostics) command in
          AcceptedCommandList"
      PICS: EEVSE.S.C04.Rsp
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [4]

    - label:
          "Step 6c: TH reads Feature dependent commands(EEVSE.S.F04) in
          AcceptedCommandList"
      PICS: EEVSE.S.F04
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [3]

    - label:
          "Step 6d: TH reads Feature dependent commands(ChargingPreferences) in
          AcceptedCommandList"
      PICS: EEVSE.S.F00
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          constraints:
              type: list
              contains: [5, 6, 7]

    - label: "Step 7a: TH reads GeneratedCommandList from DUT"
      PICS: " !EEVSE.S.F00 "
      command: "readAttribute"
      attribute: "GeneratedCommandList"
      response:
          value: []
          constraints:
              type: list

    - label: "Step 7b: TH reads GeneratedCommandList from DUT"
      PICS: EEVSE.S.F00
      command: "readAttribute"
      attribute: "GeneratedCommandList"
      response:
          constraints:
              type: list
              contains: [0]
