# Copyright (c) 2021 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.
# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default

name:
    Window Covering [TC-WNCV-4.5] Positions Storage Verification with server as
    DUT

config:
    nodeId: 0x12344321
    cluster: "Window Covering"
    endpoint: 1

tests:
    ################ Init Phase #############
    - label: "0a: Wait for the commissioned device to be retrieved"
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    ### Trying to randomize DUT's positions
    - label: "0b: TH sends UpOrOpen command to preposition the DUT"
      command: "UpOrOpen"

    ######## Command GoTo 1 #######
    ### Step 1x -> Check GoToLiftPercentage NVM effects
    - label:
          "1a: If (PA_LF & LF) TH sends GoToLiftPercentage command with 90%% to
          DUT"
      command: "GoToLiftPercentage"
      PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.C05.Rsp
      arguments:
          values:
              - name: "LiftPercent100thsValue"
                value: 9000
              - name: "LiftPercentageValue"
                value: 90

    #
    # TODO: For some reason, the window-covering server impl arms a 5s timer before it actually
    #       processes the GoToLiftPercentage command's effect on the current tile value.
    #
    - label: "1b: TH Waits for 100ms-1s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 5000

    - label: "1c: TH sends StopMotion command to DUT"
      command: "StopMotion"
      PICS: WNCV.S.C02.Rsp

    - label: "1d: TH Waits for 100ms-1s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 500

    ######## Command GoTo 2 ######
    ### Step 2x -> Check GoToTiltPercentage NVM effects
    - label:
          "2a: If (PA_TL & TL) TH sends GoToTiltPercentage command with 90%% to
          DUT"
      command: "GoToTiltPercentage"
      PICS: WNCV.S.F01 && WNCV.S.F04 && WNCV.S.C08.Rsp
      arguments:
          values:
              - name: "TiltPercent100thsValue"
                value: 9000
              - name: "TiltPercentageValue"
                value: 90

    #
    # TODO: For some reason, the window-covering server impl arms a 5s timer before it actually
    #       processes the GoToTiltPercentage command's effect on the current tile value.
    #
    - label: "2b: TH Waits for 100ms-1s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 5000

    - label: "2c: TH sends StopMotion command to DUT"
      command: "StopMotion"
      PICS: WNCV.S.C02.Rsp

    - label: "2d: TH Waits for 100ms-1s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 500

    ######## Check NVM ######
    ### Step 3x -> Store Positions and Reboot
    ### CONDITIONAL Lift Store CurrentPositionLiftPercent100ths this value for step 3e
    - label: "3a: TH reads CurrentPositionLiftPercent100ths from DUT"
      command: "readAttribute"
      attribute: "CurrentPositionLiftPercent100ths"
      PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A000e
      response:
          saveAs: attrCurrentPositionLiftPercent100ths
          constraints:
              notValue: 0

    ### CONDITIONAL Tilt Store CurrentPositionTiltPercent100ths this value for step 3f
    - label: "3b: TH reads CurrentPositionTiltPercent100ths from DUT"
      command: "readAttribute"
      attribute: "CurrentPositionTiltPercent100ths"
      PICS: WNCV.S.F01 && WNCV.S.F04 && WNCV.S.A000f
      response:
          saveAs: attrCurrentPositionTiltPercent100ths
          constraints:
              notValue: 0

    ### DUT TurnOff
    - label: "3c: reboot/restart the DUT"
      PICS: PICS_SDK_CI_ONLY
      cluster: "SystemCommands"
      endpoint: 0
      command: "Reboot"

    - label: "Reboot target device(DUT)"
      verification: |
          Not implemented in chip-tool
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value: "Please reboot the DUT and enter 'y' after DUT starts"
              - name: "expectedValue"
                value: "y"

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

    ### CONDITIONAL Lift Compare CurrentPositionLiftPercent100ths with value for step 3a
    - label: "3e: TH reads CurrentPositionLiftPercent100ths from DUT"
      command: "readAttribute"
      attribute: "CurrentPositionLiftPercent100ths"
      PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A000e
      response:
          value: attrCurrentPositionLiftPercent100ths

    ### CONDITIONAL Tilt Compare CurrentPositionTiltPercent100ths with value for step 3b
    - label: "3f: TH reads CurrentPositionTiltPercent100ths from DUT"
      command: "readAttribute"
      attribute: "CurrentPositionTiltPercent100ths"
      PICS: WNCV.S.F01 && WNCV.S.F04 && WNCV.S.A000f
      response:
          value: attrCurrentPositionTiltPercent100ths
