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