# 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.3.2. [TC-LWM-3.2] Startup Mode functionality with DUT as Server

PICS:
    - LWM.S.A0002

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

    new_start_up_mode_th:
        type: int8u
        defaultValue: 0
    new_mode_th:
        type: int8u
        defaultValue: 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 StartUpMode attribute."
      PICS: LWM.S.A0002
      command: "readAttribute"
      attribute: "StartUpMode"
      response:
          saveAs: startup_mode_dut

    - label:
          "Step 2: If startup_mode_dut is null proceed to step 3. Else save
          startup_mode_dut as new_start_up_mode_th and proceed to step 5."
      PICS: LWM.S.A0002
      cluster: "EqualityCommands"
      command: "UnsignedNumberEquals"
      arguments:
          values:
              - name: "Value1"
                value: startup_mode_dut
              - name: "Value2"
                value: null
      response:
          - values:
                - name: "Equals"
                  saveAs: IsExpectedValue

    - label: "Step 3: TH reads from the DUT the SupportedModes attribute."
      runIf: IsExpectedValue
      PICS: LWM.S.A0000
      command: "readAttribute"
      attribute: "SupportedModes"
      response:
          saveAs: supported_modes_dut
          constraints:
              type: list
              minLength: 2
    - label:
          "Step 4: TH writes to the DUT the StartUpMode attribute with the
          new_start_up_mode_th value"
      PICS: LWM.S.A0002
      runIf: IsExpectedValue
      command: "writeAttribute"
      attribute: "StartUpMode"
      arguments:
          value: new_start_up_mode_th

    - label: "Step 5: TH reads from the DUT the CurrentMode attribute."
      PICS: LWM.S.A0001
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          saveAs: old_current_mode_dut

    - label:
          "Step 5: If startup_mode_dut is equal to old_current_mode_dut proceed
          to step 6. Else proceed to step 8."
      PICS: LWM.S.A0001 && LWM.S.A0002
      cluster: "EqualityCommands"
      command: "UnsignedNumberEquals"
      arguments:
          values:
              - name: "Value1"
                value: startup_mode_dut
              - name: "Value2"
                value: old_current_mode_dut
      response:
          - values:
                - name: "Equals"
                  saveAs: Step5_IsExpectedValue

    - label: "Step 6: TH reads from the DUT the SupportedModes attribute."
      PICS: LWM.S.A0000
      runIf: Step5_IsExpectedValue
      command: "readAttribute"
      attribute: "SupportedModes"
      response:
          saveAs: Step6_supported_modes_dut
          constraints:
              type: list
              minLength: 2

    - label:
          "Step 7: TH sends a ChangeToMode command to the DUT with NewMode set
          to new_mode_th"
      PICS: LWM.S.C00.Rsp
      runIf: Step5_IsExpectedValue
      command: "ChangeToMode"
      arguments:
          values:
              - name: "NewMode"
                value: new_mode_th
      response:
          values:
              - name: "Status"
                value: 0x00

    - label: "Step 8: Physically power cycle the device"
      verification: |
          Physically power cycle the device.
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label: "Wait for the commissioned device to be retrieved"
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    - label: "Step 9: TH reads from the DUT the StartUpMode attribute."
      PICS: LWM.S.A0002 && PICS_USER_PROMPT
      command: "readAttribute"
      attribute: "StartUpMode"
      response:
          saveAs: new_start_up_mode_dut
          constraints:
              anyOf: [startup_mode_dut, new_start_up_mode_th]

    - label: "Step 10: TH reads from the DUT the CurrentMode attribute."
      PICS: LWM.S.A0001 && PICS_USER_PROMPT
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          value: new_start_up_mode_dut
