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

PICS:
    - OTCCM.S.A0002

config:
    nodeId: 0x12344321
    cluster: "Oven 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: OTCCM.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: OTCCM.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: OTCCM.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: OTCCM.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: OTCCM.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: OTCCM.S.A0001 && OTCCM.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: OTCCM.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: OTCCM.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: OTCCM.S.A0002 && PICS_USER_PROMPT
      command: "readAttribute"
      attribute: "StartUpMode"
      response:
          saveAs: new_start_up_mode_dut
          value: new_start_up_mode_th

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