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

name: Window Covering [TC-WNCV-3.3] StopMotion Verification with server as DUT

PICS:
    - WNCV.S

# TC-WNCV tests featuremap conditional dependencies -> use PICS

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

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

    ################ Position Init Phase #############
    ### Step 1x -> Initialize the Covering position before any testing
    ### MANDATORY Init Commands
    - label:
          "1a: TH sends DownOrClose command to preposition the DUT in the
          opposite direction"
      command: "DownOrClose"
      PICS: WNCV.S.C01.Rsp

    - label: "1b: TH Waits for 6-8 seconds movement(s) on the device"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 6000

    - label:
          "1c: TH sends UpOrOpen command to preposition the DUT in the opposite
          direction"
      command: "UpOrOpen"
      PICS: WNCV.S.C00.Rsp

    - label: "1d: TH Waits for 2 seconds movement(s) on the device"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 2000

    ######## StopMotion Command #######
    ### Step 2x -> Check StopMotion fast effects
    ### Before subscribe to reports
    - label: "2: Subscribe to DUT reports on OperationalStatus attribute"
      command: "subscribeAttribute"
      attribute: "OperationalStatus"
      minInterval: 4
      maxInterval: 5
      response:
          constraints:
              type: bitmap8

    ### MANDATORY Command
    - label: "2a: TH sends a StopMotion command to DUT"
      command: "StopMotion"
      PICS: WNCV.S.C02.Rsp

    ### DUT Slow down and stop
    - label:
          "2b: TH waits for 3 seconds the end of inertial movement(s) on the
          device"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 3000

    ### Must Be ZERO
    # The value of bit 0..1 must be 00b & if (LF) value of bit 2..3 must be 00b & if (TL) value of bit 4..5 must be 00b
    - label:
          "2c: Verify DUT reports OperationalStatus attribute to TH after a
          StopMotion"
      command: "waitForReport"
      attribute: "OperationalStatus"
      PICS: WNCV.S.A000a
      response:
          value: 0

    ### DUT updates its attributes
    - label: "2d: TH waits for 100ms - 3s attributes update on the device"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 2000

    ### MANDATORY reads
    - label: "2e: TH reads OperationalStatus attribute from DUT"
      command: "readAttribute"
      attribute: "OperationalStatus"
      PICS: WNCV.S.A000a
      response:
          value: 0

    ######## StopMotion w/ Lift #######
    ### Step 3x -> Verify StopMotion longer period effects on Lift
    ### Mandatory/Optionality Depends on (PA & LF) for all 4x Steps

    ### Read Current Position -> Store this value for step 4c
    - label:
          "3a: If (PA & LF) TH reads CurrentPositionLiftPercent100ths attribute
          from DUT"
      command: "readAttribute"
      attribute: "CurrentPositionLiftPercent100ths"
      PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A000e
      response:
          saveAs: attrCurrentPositionLift
          constraints:
              minValue: 0
              maxValue: 10000

    ### Read Target Position -> Compare this value w/ Current
    ### Shall be tested as equals CurrentPositionLiftPercent100ths
    - label:
          "3b: If (PA & LF) TH reads TargetPositionLiftPercent100ths attribute
          3c: it Must be equal with CurrentPositionLiftPercent100ths from DUT"
      command: "readAttribute"
      attribute: "TargetPositionLiftPercent100ths"
      PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A000b && WNCV.S.A000e
      response:
          value: attrCurrentPositionLift

    ######## StopMotion w/ Tilt #######
    ### Step 4x -> Verify StopMotion longer period effects on Tilt
    ### Mandatory/Optionality Depends on (PA & TL) for all 4x Steps

    ### Read Current Position -> Store this value for step 4c
    - label:
          "4a: If (PA & TL) TH reads CurrentPositionTiltPercent100ths attribute
          from DUT"
      command: "readAttribute"
      attribute: "CurrentPositionTiltPercent100ths"
      PICS: WNCV.S.F01 && WNCV.S.F04 && WNCV.S.A000f
      response:
          saveAs: attrCurrentPositionTilt
          constraints:
              minValue: 0
              maxValue: 10000

    ### Read Target Position -> Compare this value w/ Current
    ### Shall be tested as equals CurrentPositionTiltPercent100ths
    - label:
          "4b: If (PA & TL) TH reads TargetPositionTiltPercent100ths attribute
          4c: it Must be equal with CurrentPositionTiltPercent100ths from DUT"
      command: "readAttribute"
      attribute: "TargetPositionTiltPercent100ths"
      PICS: WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A000c && WNCV.S.A000f
      response:
          value: attrCurrentPositionTilt
