# 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.3. [TC-TCCM-3.3] On Mode and Startup Mode functionality with DUT as
    Server

PICS:
    - TCCM.S.A0002
    - TCCM.S.A0003
    - MOD.S.F00
    - OO.S.A4003

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 SupportedModes 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  OnMode attribute."
      PICS: TCCM.S.A0003 && TCCM.S.A0002
      command: "readAttribute"
      attribute: "OnMode"
      response:
          saveAs: old_on_mode_dut
          constraints:
              type: int8u

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

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

    - label:
          "Step 7:TH writes to the DUT the OnMode attribute with the new_mode_th
          value"
      runIf: Step5_IsExpectedValue
      PICS: TCCM.S.A0003
      command: "writeAttribute"
      attribute: "OnMode"
      arguments:
          value: new_mode_th

    - label: "Step 8: TH reads from the DUT the OnMode attribute."
      PICS: TCCM.S.A0003 && MOD.S.F00
      command: "readAttribute"
      attribute: "OnMode"
      response:
          saveAs: new_on_mode_dut
          constraints:
              anyOf: [new_mode_th, old_on_mode_dut]

    - label:
          "Step 9:TH writes to the DUT the StartUpOnOff attribute with the value
          1"
      PICS: OO.S.A4003
      cluster: "On/Off"
      command: "writeAttribute"
      attribute: "StartUpOnOff"
      arguments:
          value: 1

    - label: "Step 10: 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 11: TH reads from the DUT the StartUpMode attribute."
      PICS: TCCM.S.A0002 && PICS_SKIP_SAMPLE_APP
      command: "readAttribute"
      attribute: "StartUpMode"
      response:
          constraints:
              anyOf: [new_start_up_mode_th, startup_mode_dut]

    - label: "Step 12: TH reads from the DUT the CurrentMode attribute."
      PICS: TCCM.S.A0001 && PICS_SKIP_SAMPLE_APP
      command: "readAttribute"
      attribute: "CurrentMode"
      response:
          value: new_on_mode_dut
