# 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: 19.8.4. [TC-MEDIAPLAYBACK-6.4] Variable Speed Media Playback Verification

PICS:
    - MEDIAPLAYBACK.S

config:
    nodeId: 0x12344321
    cluster: "Media Playback"
    endpoint: 1

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

    - label:
          "Precondition: Media content in a paused state at the beginning of the
          content"
      command: "Pause"
      PICS: MEDIAPLAYBACK.S.C01.Rsp
      response:
          values:
              - name: "status"
                value: 0

    - label: "Reads the CurrentState attribute from the DUT"
      PICS: MEDIAPLAYBACK.S.A0000 && MEDIAPLAYBACK.S.C01.Rsp
      command: "readAttribute"
      attribute: "CurrentState"
      response:
          value: 1

    - label: "Reads the PlaybackSpeed attribute from the DUT"
      PICS: MEDIAPLAYBACK.S.A0004 && MEDIAPLAYBACK.S.C01.Rsp
      command: "readAttribute"
      attribute: "PlaybackSpeed"
      response:
          value: 0

    - label: "Sends a FastForward command"
      PICS: MEDIAPLAYBACK.S.C07.Rsp
      command: "FastForward"
      response:
          values:
              - name: "status"
                value: 0

    - label: "Reads the CurrentState attribute"
      PICS: MEDIAPLAYBACK.S.A0000 && MEDIAPLAYBACK.S.C07.Rsp
      command: "readAttribute"
      attribute: "CurrentState"
      response:
          value: 0

    - label: "Reads the PlaybackSpeed attribute from the DUT"
      PICS: MEDIAPLAYBACK.S.A0004 && MEDIAPLAYBACK.S.C07.Rsp
      command: "readAttribute"
      attribute: "PlaybackSpeed"
      response:
          value: 1

    - label: "Sends a FastForward command"
      PICS: MEDIAPLAYBACK.S.C07.Rsp
      command: "FastForward"
      response:
          values:
              - name: "status"
                value: 0

    - label: "Reads the PlaybackSpeed attribute from the DUT"
      PICS: MEDIAPLAYBACK.S.A0004 && MEDIAPLAYBACK.S.C07.Rsp
      command: "readAttribute"
      attribute: "PlaybackSpeed"
      response:
          value: 2

    - label: "Sends a Rewind command to the DUT"
      PICS: MEDIAPLAYBACK.S.C06.Rsp
      command: "Rewind"
      response:
          values:
              - name: "status"
                value: 0

    - label: "Reads the CurrentState attribute"
      PICS: MEDIAPLAYBACK.S.A0000 && MEDIAPLAYBACK.S.C06.Rsp
      command: "readAttribute"
      attribute: "CurrentState"
      response:
          value: 0

    #Issue 19800
    - label: "Reads the PlaybackSpeed attribute from the DUT"
      verification: |
          ./chip-tool mediaplayback read playback-speed 1 3
          [1655114487.018204][41855:41860] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0506 Attribute 0x0000_0004 DataVersion: 4174921750
          [1655114487.018302][41855:41860] CHIP:TOO:   PlaybackSpeed: -1.000000
          [1655114487.018421][41855:41860] CHIP:EM: Sending Standalone Ack for MessageCounter:163883813 on exchange 24959
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && MEDIAPLAYBACK.S.A0004 && MEDIAPLAYBACK.S.C06.Rsp
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' if PlaybackSpeed value is -1"
              - name: "expectedValue"
                value: "y"

    - label: "Sends a Rewind command to the DUT"
      PICS: MEDIAPLAYBACK.S.C06.Rsp
      command: "Rewind"
      response:
          values:
              - name: "status"
                value: 0

    #Issue 19800
    - label: "Reads the PlaybackSpeed attribute from the DUT"
      verification: |
          ./chip-tool mediaplayback read playback-speed 1 3
          [1655114711.400529][41871:41876] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0506 Attribute 0x0000_0004 DataVersion: 4174921750
          [1655114711.400683][41871:41876] CHIP:TOO:   PlaybackSpeed: -2.000000
          [1655114711.400853][41871:41876] CHIP:EM: Sending Standalone Ack for MessageCounter:17386470 on exchange 38376
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && MEDIAPLAYBACK.S.A0004 && MEDIAPLAYBACK.S.C06.Rsp
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' if PlaybackSpeed value is -2"
              - name: "expectedValue"
                value: "y"

    - label: "Sends a Play command"
      PICS: MEDIAPLAYBACK.S.C00.Rsp
      command: "Play"
      response:
          values:
              - name: "status"
                value: 0

    - label: "Reads the PlaybackSpeed attribute from the DUT"
      command: "readAttribute"
      attribute: "PlaybackSpeed"
      PICS: MEDIAPLAYBACK.S.A0004 && MEDIAPLAYBACK.S.C00.Rsp
      response:
          value: 1

    #Issue 10988
    - label: "Sends consecutive FastForward commands"
      verification: |
          Send below command consecutively multiple times to get error code as 4
          ./chip-tool mediaplayback fast-forward 1 3
          [1655460522.133486][12273:12278] CHIP:DMG: },
          [1655460522.133550][12273:12278] CHIP:DMG: Received Command Response Data, Endpoint=3 Cluster=0x0000_0506 Command=0x0000_000A
          [1655460522.133603][12273:12278] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0506 Command 0x0000_000A
          [1655460522.133667][12273:12278] CHIP:TOO:   PlaybackResponse: {
          [1655460522.133704][12273:12278] CHIP:TOO:     status: 4
          [1655460522.133729][12273:12278] CHIP:TOO:     data: data response
          [1655460522.133751][12273:12278] CHIP:TOO:    }
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && MEDIAPLAYBACK.S.C07.Rsp
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label: "Sends consecutive Rewind commands"
      verification: |
          Send below command consecutively multiple times to get error code as 4
          ./chip-tool mediaplayback rewind 1 3
          [1655460483.177033][12225:12230] CHIP:DMG: Received Command Response Data, Endpoint=3 Cluster=0x0000_0506 Command=0x0000_000A
          [1655460483.177083][12225:12230] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0506 Command 0x0000_000A
          [1655460483.177146][12225:12230] CHIP:TOO:   PlaybackResponse: {
          [1655460483.177182][12225:12230] CHIP:TOO:     status: 4
          [1655460483.177206][12225:12230] CHIP:TOO:     data: data response
          [1655460483.177228][12225:12230] CHIP:TOO:    }
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && MEDIAPLAYBACK.S.C06.Rsp
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"
