# 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: 123.2.3. [TC-S-2.3] Secondary functionality with server as DUT

PICS:
    - S.S

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

tests:
    - label:
          "preparation step for using commands from Groups cluster: TH generates
          fabric-unique GroupID, GroupName, random key, EpochKey0 and
          GroupKeySetID. TH sets GroupKeySecurityPolicy = TrustFirst (1)
          GroupKeyMulticastPolicy = PerGroupID (0) EpochStartTime0 = 0"
      verification: |

      disabled: true

    - label:
          "TH sends a AddGroup command to DUT with the GroupID field set to G1."
      PICS: G.S.C00.Rsp
      verification: |
          DUT sends a AddGroupResponse command to TH with the Status field set to 0x00 (SUCCESS) or 0x8a (DUPLICATE_EXISTS) and the GroupID field set to G1.
      disabled: true

    - label:
          "TH sends a RemoveAllScenes command to DUT with the GroupID field set
          to G1."
      PICS: S.S.C03.Rsp
      verification: |
          DUT sends a RemoveAllScenesResponse command to TH with the Status field set to 0x00 (SUCCESS) and GroupID field set to G1.
      disabled: true

    - label:
          "TH sends a GetSceneMembership command to DUT with the GroupID field
          set to G1."
      PICS: S.S.C06.Rsp
      verification: |
          DUT sends a GetSceneMembershipResponse command to TH with the Status field set to 0x00 (SUCCESS), the Capacity field set to the value SC0, the GroupID field set to G1 and the SceneCount field set to 0x00.
      disabled: true

    - label:
          "TH sends a EnhancedAddScene command to DUT with the GroupID field set
          to G1, the SceneID field set to 0x01, the TransitionTime field set to
          0x000a (1s) and a set of extension fields appropriate to AC1."
      PICS: S.S.C40.Rsp
      verification: |
          DUT sends a EnhancedAddSceneResponse command to TH with the Status field set to 0x00 (SUCCESS), the GroupID field set to G1 and the SceneID field set to 0x01.
      disabled: true

    - label:
          "TH sends a AddScene command to DUT with the GroupID field set to G1,
          the SceneID field set to 0x01, the TransitionTime field set to 0x0001
          (1s) and a set of extension fields appropriate to AC1."
      PICS: S.S.C40.Rsp
      verification: |
          DUT sends a AddSceneResponse command to TH with the Status field set to 0x00 (SUCCESS), the GroupID field set to G1 and the SceneID field set to 0x01.
      disabled: true

    - label:
          "TH sends a EnhancedViewScene command to DUT with the GroupID field
          set to G1 and the SceneID field set to 0x01."
      PICS: S.S.C41.Rsp
      verification: |
          DUT sends a EnhancedViewSceneResponse command to TH with the Status field set to 0x00 (SUCCESS), the GroupID field set to G1, the SceneID field set to 0x01, the TransitionTime field set to 0x000a (1s) and a set of extension fields appropriate to AC1.
      disabled: true

    - label:
          "TH sends a ViewScene command to DUT with the GroupID field set to G1
          and the SceneID field set to 0x01."
      PICS: "!S.S.C41.Rsp"
      verification: |
          DUT sends a ViewSceneResponse command to TH with the Status field set to 0x00 (SUCCESS), the GroupID field set to G1 and the SceneID field set to 0x01, the TransitionTime field set to 0x0001 (1s) and a set of extension fields appropriate to AC1.
      disabled: true

    - label:
          "TH sends a GetSceneMembership command to DUT with the GroupID field
          set to G1."
      PICS: S.S.C06.Rsp
      verification: |
          DUT sends a GetSceneMembershipResponse command to TH with the Status field set to 0x00 (SUCCESS), the Capacity field set to one of the values (SC0 - 1), 0xfe or null, the GroupID field set to G1, the SceneCount field set to 0x01 and the SceneList field containing only the scene ID 0x01.
      disabled: true

    - label:
          "TH configures AC2 on DUT for all implemented application clusters
          supporting scenes."
      PICS: S.S.C04.Rsp
      verification: |
          DUT is configured with AC2 which is different from AC1.
      disabled: true

    - label:
          "TH sends a RecallScene command to group G1 with the GroupID field set
          to G1 and the scene ID field set to 0x01."
      PICS: S.S.C05.Rsp
      verification: |
          (There is no Status response since this was a groupcast) DUT returns to AC1.
      disabled: true

    - label:
          "TH sends a CopyScene command to DUT with the mode field set to 0x00,
          the group identifier from field set to G1, the scene identifier from
          field set to 0x01, the group identifier to field set to G1 and the
          scene identifier to field set to 0x02."
      PICS: S.S.C42.Rsp
      verification: |
          DUT sends a CopySceneResponse command to TH with the Status field set to 0x00 (SUCCESS), the group identifier from field set to G1 and the scene identifier from field set to 0x01.
      disabled: true

    - label:
          "TH sends a GetSceneMembership command to DUT with the GroupID field
          set to G1."
      PICS: S.S.C06.Rsp
      verification: |
          DUT sends a GetSceneMembershipResponse command to TH with the Status field set to 0x00 (SUCCESS), the Capacity field set to one of the values (SC0 - 2), 0xfe or null, the GroupID field set to G1, the SceneCount field set to 0x02 and the SceneList field containing the scene IDs 0x01 and 0x02.
      disabled: true
