# 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.
# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default

name:
    3.2.4. [TC-OCC-2.4] OccupancySensorTypeBitmap and OccupancySensorType
    interdependency with client    as DUT

PICS:
    - OCC.S

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

tests:
    - label: "Commission DUT to TH"
      verification: |
          verification step to be updated.
      disabled: true

    - label: "DUT reads OccupancySensorType attribute from TH"
      PICS: OCC.C.A0001
      verification: |
          ./chip-tool occupancysensing read occupancy-sensor-type 1 1

          verify the " occupancy-sensor-type response" on the TH (all-cluster-app) log:

          [1657906852.014556][2361:2361] CHIP:IM: Received Read request
          [1657906852.014724][2361:2361] CHIP:DMG: ReadRequestMessage =
          [1657906852.014775][2361:2361] CHIP:DMG: {
          [1657906852.014817][2361:2361] CHIP:DMG:        AttributePathIBs =
          [1657906852.014865][2361:2361] CHIP:DMG:        [
          [1657906852.014910][2361:2361] CHIP:DMG:                AttributePathIB =
          [1657906852.014965][2361:2361] CHIP:DMG:                {
          [1657906852.015017][2361:2361] CHIP:DMG:                        Endpoint = 0x1,
          [1657906852.015075][2361:2361] CHIP:DMG:                        Cluster = 0x406,
          [1657906852.015134][2361:2361] CHIP:DMG:                        Attribute = 0x0000_0001,
          [1657906852.015189][2361:2361] CHIP:DMG:                }
          [1657906852.015241][2361:2361] CHIP:DMG:
          [1657906852.015290][2361:2361] CHIP:DMG:        ],
          [1657906852.015336][2361:2361] CHIP:DMG:
          [1657906852.015385][2361:2361] CHIP:DMG:        isFabricFiltered = true,
          [1657906852.015431][2361:2361] CHIP:DMG:        InteractionModelRevision = 1
          [1657906852.015474][2361:2361] CHIP:DMG: },
      disabled: true

    - label: "DUT reads OccupancySensorTypeBitmap attribute from TH"
      PICS: OCC.C.A0002
      verification: |
          ./chip-tool occupancysensing read occupancy-sensor-type-bitmap 1 1

          verify the " occupancy-sensor-type-bitmap response" on the TH (all-cluster-app) log:

          [1657906867.937264][2361:2361] CHIP:IM: Received Read request
          [1657906867.937390][2361:2361] CHIP:DMG: ReadRequestMessage =
          [1657906867.937440][2361:2361] CHIP:DMG: {
          [1657906867.937498][2361:2361] CHIP:DMG:        AttributePathIBs =
          [1657906867.937546][2361:2361] CHIP:DMG:        [
          [1657906867.937591][2361:2361] CHIP:DMG:                AttributePathIB =
          [1657906867.937663][2361:2361] CHIP:DMG:                {
          [1657906867.937715][2361:2361] CHIP:DMG:                        Endpoint = 0x1,
          [1657906867.937771][2361:2361] CHIP:DMG:                        Cluster = 0x406,
          [1657906867.937853][2361:2361] CHIP:DMG:                        Attribute = 0x0000_0002,
          [1657906867.937915][2361:2361] CHIP:DMG:                }
          [1657906867.937986][2361:2361] CHIP:DMG:
          [1657906867.938034][2361:2361] CHIP:DMG:        ],
          [1657906867.938085][2361:2361] CHIP:DMG:
          [1657906867.938148][2361:2361] CHIP:DMG:        isFabricFiltered = true,
          [1657906867.938187][2361:2361] CHIP:DMG:        InteractionModelRevision = 1
          [1657906867.938213][2361:2361] CHIP:DMG: },
      disabled: true
