# 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:
    178.2.4. [TC-TCTL-3.2] Optional temperature number functionality with DUT as
    Server

PICS:
    - TCTL.S
    - TCTL.S.F00

config:
    nodeId: 0x12344321
    cluster: "Temperature Control"
    endpoint: 1
    Step_5_setTemp:
        type: temperature
        defaultValue: 5
    InvalidTemp:
        type: temperature
        defaultValue: 100
    Step_10_setTemp:
        type: temperature
        defaultValue: 50

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: Operate device such that a temperature number can be accepted"
      verification: |
          Operate device such that a temperature number can be accepted
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - label: "Step 3: TH reads from the DUT the MinTemperature attribute"
      PICS: TCTL.S.A0001
      command: "readAttribute"
      attribute: "MinTemperature"
      response:
          saveAs: minTemp
          constraints:
              type: temperature

    - label: "Step 4: TH reads from the DUT the MaxTemperature attribute"
      PICS: TCTL.S.A0002
      command: "readAttribute"
      attribute: "MaxTemperature"
      response:
          saveAs: maxTemp
          constraints:
              type: temperature

    - label:
          "Step 5: TH sends command SetTemperatureCommand with a temperature
          number between minTemp and maxTemp inclusive, saved as setTemp"
      command: "SetTemperature"
      PICS: TCTL.S.C00.Rsp
      arguments:
          values:
              - name: "TargetTemperature"
                value: Step_5_setTemp

    - label: "Wait for 5s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 5000

    - label: "Step 6: TH reads from the DUT the TemperatureSetpoint attribute"
      PICS: TCTL.S.A0000
      command: "readAttribute"
      attribute: "TemperatureSetpoint"
      response:
          value: Step_5_setTemp

    - label:
          "Step 7: TH sends command SetTemperatureCommand with an invalid value"
      PICS: TCTL.S.C00.Rsp
      command: "SetTemperature"
      arguments:
          values:
              - name: "TargetTemperature"
                value: InvalidTemp
      response:
          error: CONSTRAINT_ERROR

    - label: "Wait for 5s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 5000

    - label: "Step 8: TH reads from the DUT the TemperatureSetpoint attribute"
      PICS: TCTL.S.A0000
      command: "readAttribute"
      attribute: "TemperatureSetpoint"
      response:
          value: Step_5_setTemp

    - label:
          "Step 9: Operate device such that a temperature number cannot be
          accepted"
      verification: |
          Operate device such that a temperature number cannot be accepted
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && TCTL.S.M.SupportsInvalidInState
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - label:
          "Step 10: TH sends command SetTemperatureCommand with a temperature
          number between minTemp and maxTemp inclusive, saved as setTemp"
      command: "SetTemperature"
      PICS:
          TCTL.S.C00.Rsp && PICS_USER_PROMPT && TCTL.S.M.SupportsInvalidInState
      arguments:
          values:
              - name: "TargetTemperature"
                value: Step_10_setTemp
      response:
          error: INVALID_IN_STATE

    - label: "Wait for 5s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 5000

    - label: "Step 11: TH reads from the DUT the TemperatureSetpoint attribute"
      PICS: TCTL.S.A0000 && TCTL.S.M.SupportsInvalidInState
      command: "readAttribute"
      attribute: "TemperatureSetpoint"
      response:
          value: Step_5_setTemp
