# 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
