# 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.3. [TC-MEDIAPLAYBACK-6.3] Advanced Seek Media Playback Verification

PICS:
    - MEDIAPLAYBACK.S

config:
    nodeId: 0x12344321
    cluster: "Media Playback"
    endpoint: 1
    SeekPosition:
        type: int64u
        defaultValue: 100000000

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: "Sends a Seek command"
      PICS: MEDIAPLAYBACK.S.C0b.Rsp
      command: "Seek"
      arguments:
          values:
              - name: "position"
                value: 10000
      response:
          values:
              - name: "Status"
                value: 0

    - label:
          "Verify that the media has moved to 10 seconds from the starting point"
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && MEDIAPLAYBACK.S.C0b.Rsp
      arguments:
          values:
              - name: "message"
                value:
                    "Please enter 'y' if media has moved to 10 seconds from the
                    starting point"
              - name: "expectedValue"
                value: "y"

    - label: "Reads the SampledPosition attribute"
      PICS: MEDIAPLAYBACK.S.A0003 && MEDIAPLAYBACK.S.C0b.Rsp
      command: "readAttribute"
      attribute: "SampledPosition"
      response:
          value: { "Position": 10000 }

    #Issue 10988
    - label: "TH reads the StartTime attribute from the DUT"
      PICS: MEDIAPLAYBACK.S.A0001 && PICS_USER_PROMPT
      verification: |
          The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
          ./chip-tool mediaplayback read start-time 1 3
          ./chip-tv-casting-app mediaplayback read start-time 1 3

          On TH Verify that the response is a valid start time or null.
          [1654001778189] [97015:7707437] CHIP: [TOO] Endpoint: 1 Cluster: 0x0000_0506 Attribute 0x0000_0001 DataVersion: 775839144
          [1654001778190] [97015:7707437] CHIP: [TOO]   StartTime: 0
      cluster: "LogCommands"
      command: "UserPrompt"
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    #Issue 10988
    - label: "TH reads the SeekRangeEnd attribute from the DUT"
      verification: |
          The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
          ./chip-tool mediaplayback read seek-range-end 1 3
          ./chip-tv-casting-app mediaplayback read seek-range-end 1 3

          On TH Verify that the response is a valid position or Nas.
          [1654002119527] [97409:7712444] CHIP: [TOO] Endpoint: 1 Cluster: 0x0000_0506 Attribute 0x0000_0005 DataVersion: 775839144
          [1654002119527] [97409:7712444] CHIP: [TOO]   SeekRangeEnd: 80000
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && MEDIAPLAYBACK.S.A0005
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    #Issue 10988
    - label: "TH reads the SeekRangeStart attribute from the DUT"
      verification: |
          The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
          ./chip-tool mediaplayback read seek-range-start 1 3
          ./chip-tv-casting-app mediaplayback read seek-range-start 1 3

          On TH Verify that the response is a valid position or Nas.
          [1661240180.806771][2930:2935] CHIP:DMG:         SuppressResponse = true,
          [1661240180.806809][2930:2935] CHIP:DMG:         InteractionModelRevision = 1
          [1661240180.806844][2930:2935] CHIP:DMG: }
          [1661240180.807024][2930:2935] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0506 Attribute 0x0000_0006 DataVersion: 1520269522
          [1661240180.807103][2930:2935] CHIP:TOO:   SeekRangeStart: 0
          [1661240180.807211][2930:2935] CHIP:EM: Sending Standalone Ack for MessageCounter:164562596 on exchange 31684i
          [1661240180.807299][2930:2935] CHIP:IN: Prepared secure message 0xffff95f5d978 to 0x0000000000000001 (1)  of type 0x10 and protocolId (0, 0) on exchange 31684i with MessageCounter:104721987.
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && MEDIAPLAYBACK.S.A0006
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    #Issue 10988
    - label: "TH reads the Duration attribute from the DUT"
      verification: |
          The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
          ./chip-tool mediaplayback read duration 1 3
          ./chip-tv-casting-app mediaplayback read duration 1 3

          On TH Verify that the response is null or not 0.
          [1654001869267] [97168:7708957] CHIP: [TOO] Endpoint: 1 Cluster: 0x0000_0506 Attribute 0x0000_0002 DataVersion: 775839144
          [1654001869267] [97168:7708957] CHIP: [TOO]   Duration: 80000
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && MEDIAPLAYBACK.S.A0002
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label:
          "Sends a Seek command Position value beyond the furthest valid
          position"
      PICS: MEDIAPLAYBACK.S.C0b.Rsp
      command: "Seek"
      arguments:
          values:
              - name: "position"
                value: SeekPosition
      response:
          values:
              - name: "Status"
                value: 5

    - label: "verify that the media has not moved."
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && MEDIAPLAYBACK.S.C0b.Rsp
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' if media has not moved"
              - name: "expectedValue"
                value: "y"
