# 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

PICS:
    - WNCV.S

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

    #
    # 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

    #
    # 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
