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

PICS:
    - TCCM.S.A0002

config:
    nodeId: 0x12344321
    cluster: "Refrigerator And Temperature Controlled Cabinet 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: TCCM.S.A0002
      command: "readAttribute"
      attribute: "StartUpMode"
      response:
          saveAs: startup_mode_dut
          constraints:
              type: int8u

    - label:
          "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: TCCM.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: TCCM.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"
      runIf: IsExpectedValue
      PICS: TCCM.S.A0002
      command: "writeAttribute"
      attribute: "StartUpMode"
      arguments:
          value: new_start_up_mode_th

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

    - label:
          "If startup_mode_dut is equal to old_current_mode_dut proceed to step
          6. Else proceed to step 8"
      PICS: TCCM.S.A0002 && TCCM.S.A0001
      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."
      runIf: Step5_IsExpectedValue
      PICS: TCCM.S.A0000
      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"
      runIf: Step5_IsExpectedValue
      PICS: DISHM.S.C00.Rsp
      command: "ChangeToMode"
      arguments:
          values:
              - name: "NewMode"
                value: new_mode_th

    - label: "Step 8: Physically power cycle the device."
      verification: |
          Physically power cycle the device.
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      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: TCCM.S.A0002 && PICS_SKIP_SAMPLE_APP
      command: "readAttribute"
      attribute: "StartUpMode"
      response:
          saveAs: new_start_up_mode_dut
          constraints:
              type: int8u
              anyOf: [new_start_up_mode_th, startup_mode_dut]

    - label: "Step 10: TH reads from the DUT the CurrentMode attribute."
      PICS: TCCM.S.A0001 && PICS_SKIP_SAMPLE_APP
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          value: new_start_up_mode_dut
          constraints:
              type: int8u
