# 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: Content Launcher Cluster Tests

config:
    nodeId: 0x12344321
    cluster: "Content Launcher"
    endpoint: 1

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

    - label: "Read attribute accept header list"
      command: "readAttribute"
      attribute: "AcceptHeader"
      response:
          value: ["example", "example"]

    - label: "Read attribute supported streaming protocols"
      command: "readAttribute"
      attribute: "SupportedStreamingProtocols"
      response:
          value: 0

    - label: "Launch Content Command"
      command: "launchContent"
      arguments:
          values:
              - name: "autoPlay"
                value: true
              - name: "data"
                value: "exampleData"
              - name: "search"
                value:
                    {
                        parameterList:
                            [
                                {
                                    type: 1,
                                    value: "exampleValue",
                                    externalIDList:
                                        [{ name: "name", value: "value" }],
                                },
                            ],
                    }
      response:
          values:
              - name: "data"
                value: "exampleData"
              - name: "status"
                value: 0

    - label: "Launch URL Command"
      command: "launchURL"
      arguments:
          values:
              - name: "contentURL"
                value: "exampleUrl"
              - name: "displayString"
                value: "exampleDisplayString"
              - name: "brandingInformation"
                value:
                    {
                        providerName: "exampleName",
                        background:
                            {
                                imageUrl: "exampleUrl",
                                color: "exampleColor",
                                size: { width: 0, height: 0, metric: 0 },
                            },
                        logo:
                            {
                                imageUrl: "exampleUrl",
                                color: "exampleColor",
                                size: { width: 0, height: 0, metric: 0 },
                            },
                        progressBar:
                            {
                                imageUrl: "exampleUrl",
                                color: "exampleColor",
                                size: { width: 0, height: 0, metric: 0 },
                            },
                        splash:
                            {
                                imageUrl: "exampleUrl",
                                color: "exampleColor",
                                size: { width: 0, height: 0, metric: 0 },
                            },
                        waterMark:
                            {
                                imageUrl: "exampleUrl",
                                color: "exampleColor",
                                size: { width: 0, height: 0, metric: 0 },
                            },
                    }
      response:
          values:
              - name: "data"
                value: "exampleData"
              - name: "status"
                value: 0
