# 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: Basic Information Cluster Tests

config:
    nodeId: 0x12344321
    cluster: "Basic Information"
    endpoint: 0

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

    - label: "Read location"
      command: "readAttribute"
      attribute: "Location"
      response:
          value: "XX"

    - label: "Write location"
      command: "writeAttribute"
      attribute: "Location"
      arguments:
          value: "US"

    - label: "Read back location"
      command: "readAttribute"
      attribute: "Location"
      response:
          value: "US"

    - label: "Restore initial location value"
      command: "writeAttribute"
      attribute: "Location"
      arguments:
          value: "XX"

    - label: "Read AttributeList value"
      PICS: PICS_EVENT_LIST_ENABLED
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          value: [
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  18,
                  19,
                  20,
                  21,
                  22,
                  0xFFF8, # GeneratedCommandList
                  0xFFF9, # AcceptedCommandList
                  0xFFFA, # EventList
                  0xFFFB, # AttributeList
                  0xFFFC, # FeatureMap
                  0xFFFD, # ClusterRevision
              ]

    - label: "Read AttributeList value"
      PICS: "!PICS_EVENT_LIST_ENABLED"
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          value: [
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  18,
                  19,
                  20,
                  21,
                  22,
                  0xFFF8, # GeneratedCommandList
                  0xFFF9, # AcceptedCommandList
                  0xFFFB, # AttributeList
                  0xFFFC, # FeatureMap
                  0xFFFD, # ClusterRevision
              ]

    - label: "Read NodeLabel"
      command: "readAttribute"
      attribute: "NodeLabel"
      response:
          value: ""

    - label: "Write NodeLabel"
      command: "writeAttribute"
      attribute: "NodeLabel"
      arguments:
          value: "My node"

    - label: "Read back NodeLabel"
      command: "readAttribute"
      attribute: "NodeLabel"
      response:
          value: "My node"

    - label: "Read LocalConfigDisabled"
      command: "readAttribute"
      attribute: "LocalConfigDisabled"
      response:
          value: false

    - label: "Write LocalConfigDisabled"
      command: "writeAttribute"
      attribute: "LocalConfigDisabled"
      arguments:
          value: true

    - label: "Read back LocalConfigDisabled"
      command: "readAttribute"
      attribute: "LocalConfigDisabled"
      response:
          value: true

    - label: "Reboot the device"
      cluster: "SystemCommands"
      command: "Reboot"

    - label: "Connect to the device again"
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    - label: "Read back NodeLabel after reboot"
      command: "readAttribute"
      attribute: "NodeLabel"
      response:
          value: "My node"

    - label: "Restore initial NodeLabel value"
      command: "writeAttribute"
      attribute: "NodeLabel"
      arguments:
          value: ""

    - label: "Read back LocalConfigDisabled after reboot"
      command: "readAttribute"
      attribute: "LocalConfigDisabled"
      response:
          value: true

    - label: "Restore initial LocalConfigDisabled value"
      command: "writeAttribute"
      attribute: "LocalConfigDisabled"
      arguments:
          value: false

    - label: "Read the ProductAppearance value"
      command: "readAttribute"
      attribute: "ProductAppearance"
      response:
          # For now all-clusters-app is a satin purple.
          value: { Finish: 2, PrimaryColor: 5 }

    - label: "Read the Specification Version value"
      command: "readAttribute"
      attribute: "SpecificationVersion"
      response:
          # For now all-clusters-app has a version 1.4.
          value: 0x01040000

    - label: "Read the Max Paths Per Invoke value"
      command: "readAttribute"
      attribute: "MaxPathsPerInvoke"
      response:
          constraints:
              minValue: 1

    - label: "Write global ClusterRevision attribute"
      command: "writeAttribute"
      attribute: "ClusterRevision"
      arguments:
          value: 1
      response:
          error: UNSUPPORTED_WRITE

    - label: "Write global FeatureMap attribute"
      command: "writeAttribute"
      attribute: "FeatureMap"
      arguments:
          value: 1
      response:
          error: UNSUPPORTED_WRITE

    - label: "Write global AttributeList attribute"
      command: "writeAttribute"
      attribute: "AttributeList"
      arguments:
          value: []
      response:
          error: UNSUPPORTED_WRITE

    - label: "Write global GeneratedCommandList attribute"
      command: "writeAttribute"
      attribute: "GeneratedCommandList"
      arguments:
          value: []
      response:
          error: UNSUPPORTED_WRITE

    - label: "Write global AcceptedCommandList attribute"
      command: "writeAttribute"
      attribute: "AcceptedCommandList"
      arguments:
          value: []
      response:
          error: UNSUPPORTED_WRITE
