# 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: 3.4.8. [TC-WNCV-7.1] GoToPercentage Commands Verification [DUT as Client]

PICS:
    - WNCV.C

config:
    nodeId: 0x12344321
    cluster: "Basic Information"
    endpoint: 0

tests:
    - label: "Note"
      verification: |
          For DUT as client test cases, Chip-tool command used below are an example to verify the functionality. For certification test, we expect DUT should have a capability or way to run the equivalent command.
      disabled: true

    - label: "Precondition"
      verification: |
          TH must support at least one of these (0xFFFC) FeatureMap attribute’s flags WNCV.S.F00(LF) & WNCV.S.F02(PA_LF) and/or WNCV.S.F01(TL) & WNCV.S.F04(PA_TL)
      disabled: true

    - label: "Check GoToLiftPercentage command 50%"
      verification: |

      disabled: true

    - label: "DUT sends GoToLiftPercentage command with 50% to TH"
      PICS: WNCV.C.C05.Tx
      verification: |
          ./chip-tool windowcovering go-to-lift-percentage 5000 1 1

          Verify If (WNCV.S.F00(LF) & WNCV.S.F02(PA_LF)) supports,  DUT responds with a SUCCESS(0x00) status response or If only (WNCV.S.F00(LF)) supports DUT can responds either SUCCESS(0x00) or UNSUPPORTED_COMMAND(0x81) on the TH(Chip-tool) Log:

          [1666856863.034457][2347:2347] CHIP:DMG: InvokeResponseMessage =
          [1666856863.034550][2347:2347] CHIP:DMG: {
          [1666856863.034609][2347:2347] CHIP:DMG:         suppressResponse = false,
          [1666856863.034639][2347:2347] CHIP:DMG:         InvokeResponseIBs =
          [1666856863.034673][2347:2347] CHIP:DMG:         [
          [1666856863.034699][2347:2347] CHIP:DMG:                 InvokeResponseIB =
          [1666856863.034740][2347:2347] CHIP:DMG:                 {
          [1666856863.034870][2347:2347] CHIP:DMG:                         CommandStatusIB =
          [1666856863.034908][2347:2347] CHIP:DMG:                         {
          [1666856863.034937][2347:2347] CHIP:DMG:                                 CommandPathIB =
          [1666856863.034969][2347:2347] CHIP:DMG:                                 {
          [1666856863.035007][2347:2347] CHIP:DMG:                                         EndpointId = 0x1,
          [1666856863.035046][2347:2347] CHIP:DMG:                                         ClusterId = 0x102,
          [1666856863.035081][2347:2347] CHIP:DMG:                                         CommandId = 0x5,
          [1666856863.035112][2347:2347] CHIP:DMG:                                 },
          [1666856863.035148][2347:2347] CHIP:DMG:
          [1666856863.035185][2347:2347] CHIP:DMG:                                 StatusIB =
          [1666856863.035223][2347:2347] CHIP:DMG:                                 {
          [1666856863.035263][2347:2347] CHIP:DMG:                                         status = 0x00 (SUCCESS),
          [1666856863.035302][2347:2347] CHIP:DMG:                                 },
          [1666856863.035340][2347:2347] CHIP:DMG:
          [1666856863.035373][2347:2347] CHIP:DMG:                         },
          [1666856863.035412][2347:2347] CHIP:DMG:
          [1666856863.035444][2347:2347] CHIP:DMG:                 },
          [1666856863.035482][2347:2347] CHIP:DMG:
          [1666856863.035511][2347:2347] CHIP:DMG:         ],
          [1666856863.035548][2347:2347] CHIP:DMG:
          [1666856863.035574][2347:2347] CHIP:DMG:         InteractionModelRevision = 1
      disabled: true

    - label: "Check GoToTiltPercentage command 50%"
      verification: |

      disabled: true

    - label: "DUT sends GoToTiltPercentage command with 50% to TH"
      PICS: WNCV.C.C08.Tx
      verification: |
          ./chip-tool windowcovering go-to-tilt-percentage 5000 1 1


          Verify If (WNCV.S.F01(TL) & WNCV.S.F04(PA_TL)) supports  DUT responds with a SUCCESS(0x00) status response or If only (WNCV.S.F01(TL)) supports DUT can responds either SUCCESS(0x00) or UNSUPPORTED_COMMAND(0x81). on the TH(Chip-tool) Log:

          [1666856897.349164][2347:2347] CHIP:DMG: InvokeResponseMessage =
          [1666856897.349252][2347:2347] CHIP:DMG: {
          [1666856897.349316][2347:2347] CHIP:DMG:         suppressResponse = false,
          [1666856897.349378][2347:2347] CHIP:DMG:         InvokeResponseIBs =
          [1666856897.349450][2347:2347] CHIP:DMG:         [
          [1666856897.349512][2347:2347] CHIP:DMG:                 InvokeResponseIB =
          [1666856897.349606][2347:2347] CHIP:DMG:                 {
          [1666856897.349669][2347:2347] CHIP:DMG:                         CommandStatusIB =
          [1666856897.349801][2347:2347] CHIP:DMG:                         {
          [1666856897.349922][2347:2347] CHIP:DMG:                                 CommandPathIB =
          [1666856897.350004][2347:2347] CHIP:DMG:                                 {
          [1666856897.350139][2347:2347] CHIP:DMG:                                         EndpointId = 0x1,
          [1666856897.350280][2347:2347] CHIP:DMG:                                         ClusterId = 0x102,
          [1666856897.350357][2347:2347] CHIP:DMG:                                         CommandId = 0x8,
          [1666856897.350487][2347:2347] CHIP:DMG:                                 },
          [1666856897.350718][2347:2347] CHIP:DMG:
          [1666856897.350799][2347:2347] CHIP:DMG:                                 StatusIB =
          [1666856897.350937][2347:2347] CHIP:DMG:                                 {
          [1666856897.351076][2347:2347] CHIP:DMG:                                         status = 0x00 (SUCCESS),
          [1666856897.351147][2347:2347] CHIP:DMG:                                 },
          [1666856897.351181][2347:2347] CHIP:DMG:
          [1666856897.351208][2347:2347] CHIP:DMG:                         },
          [1666856897.351259][2347:2347] CHIP:DMG:
          [1666856897.351283][2347:2347] CHIP:DMG:                 },
          [1666856897.351335][2347:2347] CHIP:DMG:
          [1666856897.351377][2347:2347] CHIP:DMG:         ],
          [1666856897.351409][2347:2347] CHIP:DMG:
          [1666856897.351432][2347:2347] CHIP:DMG:         InteractionModelRevision = 1
          [1666856897.351473][2347:2347] CHIP:DMG: },
      disabled: true
