# 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: 269.2.1. [TC-EEVSEM-2.1] Change to Mode functionality with DUT as Server

PICS:
    - EEVSEM.S

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

    #PIXIT.EEVSEM.MODE_CHANGE_OK
    PIXIT.EEVSEM.MODE_CHANGE_OK:
        type: int8u
        defaultValue: 2
    #PIXIT.EEVSEM.MODE_CHANGE_FAIL
    PIXIT.EEVSEM.MODE_CHANGE_FAIL:
        type: int8u
        defaultValue: 10
    invalid_mode_th:
        type: int8u
        defaultValue: 15

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 SupportedModes attribute."
      PICS: EEVSEM.S.A0000
      command: "readAttribute"
      attribute: "SupportedModes"
      response:
          saveAs: supported_mode_dut
          constraints:
              type: list
              minLength: 2

    - label: "Step 3: TH reads from the DUT the CurrentMode attribute."
      PICS: EEVSEM.S.A0001
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          saveAs: old_current_mode_dut
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    - label:
          "Step 4: TH sends a ChangeToMode command to the DUT with NewMode set
          to old_current_mode_dut"
      PICS: EEVSEM.S.C00.Rsp
      command: "ChangeToMode"
      arguments:
          values:
              - name: "NewMode"
                value: old_current_mode_dut
      response:
          values:
              - name: "Status"
                value: 0x00

    - label:
          "Step 5: Manually put the device in a state from which it will FAIL to
          transition to PIXIT.EEVSEM.MODE_CHANGE_FAIL"
      PICS:
          " EEVSEM.S.M.CAN_TEST_MODE_FAILURE &&
          EEVSEM.S.M.CAN_MANUALLY_CONTROLLED && PICS_SKIP_SAMPLE_APP "
      verification: |
          Manual operation required
      cluster: "LogCommands"
      command: "UserPrompt"
      arguments:
          values:
              - name: "message"
                value: "Enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - label: "Step 6: TH reads from the DUT the CurrentMode attribute"
      PICS: EEVSEM.S.A0001 && EEVSEM.S.M.CAN_MANUALLY_CONTROLLED
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          saveAs: Step6_current_mode_dut
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    #Skipping test-7 because SDK is not enabled with this failure response
    - label:
          "Step 7: TH sends a ChangeToMode command to the DUT with NewMode set
          to PIXIT.EEVSEM.MODE_CHANGE_FAIL"
      PICS:
          EEVSEM.S.M.CAN_TEST_MODE_FAILURE && EEVSEM.S.C00.Rsp &&
          PICS_SKIP_SAMPLE_APP
      verification: |
          Note : Please skip this step as SDK is not enabled with this failure response

          ./chip-tool energyevsemode change-to-mode 2 1 1

          Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with Status field is set to GenericFailure(0x02), InvalidInMode(0x03) , or in the MfgCodes (0x80 to 0xBF) range and StatusText field has a length between 1 and 64,  below is the sample log provided for the raspi platform:

          [1705995550.805161][7567:7569] CHIP:DMG: },
          [1705995550.805185][7567:7569] CHIP:DMG: Received Command Response Data, Endpoint=1 Cluster=0x0000_009D Command=0x0000_0001
          [1705995550.805197][7567:7569] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_009D Command 0x0000_0001
          [1705995550.805221][7567:7569] CHIP:TOO:   ChangeToModeResponse: {
          [1705995550.805228][7567:7569] CHIP:TOO:     status: 0
          [1705995550.805232][7567:7569] CHIP:TOO:    }
      cluster: "LogCommands"
      command: "UserPrompt"
      arguments:
          values:
              - name: "message"
                value: "Enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - label: "Step 8: TH reads from the DUT the CurrentMode attribute."
      PICS: EEVSEM.S.A0001
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          value: old_current_mode_dut
          constraints:
              type: int8u

    - label:
          "Step 9: Manually put the device in a state from which it will
          SUCCESSFULLY transition to PIXIT.EEVSEM.MODE_CHANGE_OK"
      PICS: PICS_SKIP_SAMPLE_APP
      verification: |
          Manual operation required
      cluster: "LogCommands"
      command: "UserPrompt"
      arguments:
          values:
              - name: "message"
                value: "Enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - label: "Step 10: TH reads from the DUT the CurrentMode attribute."
      PICS: EEVSEM.S.A0001 && EEVSEM.S.M.CAN_MANUALLY_CONTROLLED
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          saveAs: Step10_current_mode_dut
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    - label:
          "Step 11: TH sends a ChangeToMode command to the DUT with NewMode set
          to PIXIT.EEVSEM.MODE_CHANGE_OK"
      PICS: EEVSEM.S.C00.Rsp
      command: "ChangeToMode"
      arguments:
          values:
              - name: "NewMode"
                value: PIXIT.EEVSEM.MODE_CHANGE_OK
      response:
          values:
              - name: "Status"
                value: 0x00

    - label:
          "Step 12: TH reads from the DUT the CurrentMode attribute. Verify that
          the DUT response contains an integer value equal to
          PIXIT.EEVSEM.MODE_CHANGE_OK"
      PICS: EEVSEM.S.A0001
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          value: PIXIT.EEVSEM.MODE_CHANGE_OK

    - label:
          "Step 13: TH sends a ChangeToMode command to the DUT with NewMode set
          to invalid_mode_th"
      PICS: EEVSEM.S.C00.Rsp
      command: "ChangeToMode"
      arguments:
          values:
              - name: "NewMode"
                value: invalid_mode_th
      response:
          values:
              - name: "Status"
                value: 0x01

    - label:
          "Step 14: TH reads from the DUT the CurrentMode attribute. Verify that
          the DUT response contains an integer value equal to
          PIXIT.EEVSEM.MODE_CHANGE_OK"
      PICS: EEVSEM.S.A0001
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          value: PIXIT.EEVSEM.MODE_CHANGE_OK
