# 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 command & OperationalStatus
    attribute Verification [DUT_Server]

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

    - label: "1e: TH reads OperationalStatus attribute from DUT"
      command: "readAttribute"
      attribute: "OperationalStatus"
      PICS: WNCV.S.A000a
      response:
          constraints:
              notValue: 0

    - 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: TH reads OperationalStatus attribute from DUT after a StopMotion"
      command: "readAttribute"
      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 &&
          PICS_SKIP_SAMPLE_APP
      response:
          value: attrCurrentPositionTilt
