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

PICS:
    - LWM.S

config:
    nodeId: 0x12344321
    cluster: "Laundry Washer Mode"
    endpoint: 1

    #PIXIT.LWM.MODE_CHANGE_OK
    NewMode_CHANGE_OK:
        type: int8u
        defaultValue: 2
    #PIXIT.LWM.MODE_CHANGE_FAIL
    NewMode_CHANGE_FAIL:
        type: int8u
        defaultValue: 10
    invalid_mode_th:
        type: int8u
        defaultValue: 5

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

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

    - label:
          "Step 4: TH sends a ChangeToMode command to the DUT with NewMode set
          to new_mode_th"
      PICS: LWM.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.LWM.MODE_CHANGE_FAIL"
      PICS:
          LWM.S.M.CAN_TEST_MODE_FAILURE && LWM.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: LWM.S.A0001 && LWM.S.M.CAN_MANUALLY_CONTROLLED
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          constraints:
              type: int8u
              minValue: 0
              maxValue: 254

    #SDK not enabled this failure response
    # - label:
    #       "Step 7: TH sends a ChangeToMode command to the DUT with NewMode set
    #       to PIXIT.LWM.MODE_CHANGE_FAIL"
    #   PICS: LWM.S.M.CAN_TEST_MODE_FAILURE && LWM.S.C00.Rsp
    #   command: "ChangeToMode"
    #   arguments:
    #       values:
    #           - name: "NewMode"
    #             value: NewMode_CHANGE_FAIL
    #   response:
    #       values:
    #           - name: "Status"
    #             constraints:
    #                 anyOf:
    #                     [
    #                         0x02,
    #                         0x80,
    #                         0x81,
    #                         0x82,
    #                         0x83,
    #                         0x84,
    #                         0x85,
    #                         0x86,
    #                         0x87,
    #                         0x88,
    #                         0x89,
    #                         0x8A,
    #                         0x8B,
    #                         0x8C,
    #                         0x8D,
    #                         0x8E,
    #                         0xBF,
    #                     ]
    #           - name: "StatusText"
    #             constraints:
    #                 minLength: 1
    #                 maxLength: 64

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

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

          Verify on TH(chip-tool) log, DUT responds contains a ChangeToModeResponse command with a GenericFailure(0x02)  status response and below is the sample log provided for the raspi platform:

          [1690270057.274893][31185:31187] CHIP:DMG: Received Command Response Data, Endpoint=1 Cluster=0x0000_0051 Command=0x0000_0001
          [1690270057.274901][31185:31187] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0051 Command 0x0000_0001
          [1690270057.274915][31185:31187] CHIP:TOO:   ChangeToModeResponse: {
          [1690270057.274921][31185:31187] CHIP:TOO:     status: 0
          [1690270057.274924][31185:31187] 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: LWM.S.A0001
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          value: old_current_mode_dut
          constraints:
              type: int8u
              minValue: 0
              maxValue: 254

    - label:
          "Step 9: Manually put the device in a state from which it will
          SUCCESSFULLY transition to PIXIT.LWM.MODE_CHANGE_OK"
      PICS: LWM.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 10: TH reads from the DUT the CurrentMode attribute."
      PICS: LWM.S.M.CAN_MANUALLY_CONTROLLED && LWM.S.A0001
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          saveAs: Step10_current_mode_dut
          constraints:
              type: int8u
              minValue: 0
              maxValue: 254

    - label:
          "Step 11: TH sends a ChangeToMode command to the DUT with NewMode set
          to PIXIT.LWM.MODE_CHANGE_OK"
      PICS: LWM.S.C00.Rsp
      command: "ChangeToMode"
      arguments:
          values:
              - name: "NewMode"
                value: NewMode_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.LWM.MODE_CHANGE_OK"
      PICS: LWM.S.A0001
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          value: NewMode_CHANGE_OK

    - label:
          "Step 13: TH sends a ChangeToMode command to the DUT with NewMode set
          to invalid_mode_th"
      PICS: LWM.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.LWM.MODE_CHANGE_OK"
      PICS: LWM.S.A0001
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          value: NewMode_CHANGE_OK
