# 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: |
          DUT sends GoToLiftPercentage command with 50% to TH


          Product maker needs to provide instructions for how to trigger the command on the DUT. For comparison, the DUT behavior for this test step can be simulated using chip-tool (when DUT is a commissioner/Client)

          ./chip-tool windowcovering go-to-lift-percentage 5000 1 1

          Verify the "DUT responds with right request response"

          [1659945446.669477][2742:2742] CHIP:DMG: InvokeRequestMessage =
          [1659945446.669520][2742:2742] CHIP:DMG: {
          [1659945446.669555][2742:2742] CHIP:DMG:         suppressResponse = false,
          [1659945446.669599][2742:2742] CHIP:DMG:         timedRequest = false,
          [1659945446.669639][2742:2742] CHIP:DMG:         InvokeRequests =
          [1659945446.669688][2742:2742] CHIP:DMG:         [
          [1659945446.669729][2742:2742] CHIP:DMG:                 CommandDataIB =
          [1659945446.669773][2742:2742] CHIP:DMG:                 {
          [1659945446.669815][2742:2742] CHIP:DMG:                         CommandPathIB =
          [1659945446.669866][2742:2742] CHIP:DMG:                         {
          [1659945446.669919][2742:2742] CHIP:DMG:                                 EndpointId = 0x1,
          [1659945446.669975][2742:2742] CHIP:DMG:                                 ClusterId = 0x102,
          [1659945446.670033][2742:2742] CHIP:DMG:                                 CommandId = 0x5,
          [1659945446.670084][2742:2742] CHIP:DMG:                         },
          [1659945446.670137][2742:2742] CHIP:DMG:
          [1659945446.670191][2742:2742] CHIP:DMG:                         CommandFields =
          [1659945446.670247][2742:2742] CHIP:DMG:                         {
          [1659945446.670302][2742:2742] CHIP:DMG:                                 0x0 = 5000,
          [1659945446.670361][2742:2742] CHIP:DMG:                         },
          [1659945446.670409][2742:2742] CHIP:DMG:                 },
          [1659945446.670460][2742:2742] CHIP:DMG:
          [1659945446.670499][2742:2742] CHIP:DMG:         ],
          [1659945446.670548][2742:2742] CHIP:DMG:
          [1659945446.670587][2742:2742] CHIP:DMG:         InteractionModelRevision = 1
          [1659945446.670626][2742:2742] CHIP:DMG: },
      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: |
          DUT sends GoToTiltPercentage command with 50% to TH


          Product maker needs to provide instructions for how to trigger the command on the DUT. For comparison, the DUT behavior for this test step can be simulated using chip-tool (when DUT is a commissioner/Client)

          ./chip-tool windowcovering go-to-tilt-percentage 5000 1 1


          Verify the "DUT responds with right  request response"

          [1659945481.649337][2742:2742] CHIP:DMG: InvokeRequestMessage =
          [1659945481.649367][2742:2742] CHIP:DMG: {
          [1659945481.649393][2742:2742] CHIP:DMG:         suppressResponse = false,
          [1659945481.649424][2742:2742] CHIP:DMG:         timedRequest = false,
          [1659945481.649452][2742:2742] CHIP:DMG:         InvokeRequests =
          [1659945481.649487][2742:2742] CHIP:DMG:         [
          [1659945481.649515][2742:2742] CHIP:DMG:                 CommandDataIB =
          [1659945481.649551][2742:2742] CHIP:DMG:                 {
          [1659945481.649582][2742:2742] CHIP:DMG:                         CommandPathIB =
          [1659945481.649622][2742:2742] CHIP:DMG:                         {
          [1659945481.649660][2742:2742] CHIP:DMG:                                 EndpointId = 0x1,
          [1659945481.649702][2742:2742] CHIP:DMG:                                 ClusterId = 0x102,
          [1659945481.649743][2742:2742] CHIP:DMG:                                 CommandId = 0x8,
          [1659945481.649778][2742:2742] CHIP:DMG:                         },
          [1659945481.649819][2742:2742] CHIP:DMG:
          [1659945481.649856][2742:2742] CHIP:DMG:                         CommandFields =
          [1659945481.649892][2742:2742] CHIP:DMG:                         {
          [1659945481.649929][2742:2742] CHIP:DMG:                                 0x0 = 5000,
          [1659945481.649970][2742:2742] CHIP:DMG:                         },
          [1659945481.650002][2742:2742] CHIP:DMG:                 },
          [1659945481.650037][2742:2742] CHIP:DMG:
          [1659945481.650065][2742:2742] CHIP:DMG:         ],
          [1659945481.650099][2742:2742] CHIP:DMG:
          [1659945481.650126][2742:2742] CHIP:DMG:         InteractionModelRevision = 1
          [1659945481.650153][2742:2742] CHIP:DMG: },
      disabled: true
