# 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.1.11. [TC-DD-1.11] Concatenation - QR Code Onboarding Payload Verification
    [DUT - Commissioner]

PICS:
    - MCORE.ROLE.COMMISSIONER

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

tests:
    - label:
          "Scan QR code using concatenation (which supports the commissioning of
          all the TH devices)"
      PICS: MCORE.DD.CTRL_CONCATENATED_QR_CODE_1
      verification: |
          Out of Scope for V1.0 as Concatenated QR codes are not supported yet
          https://github.com/project-chip/connectedhomeip/issues/5331

          1. Lauch TH chip-all-clusters-app
          ubuntu@matter-7:~/Apr18_dut/connectedhomeip/examples/all-clusters-app/linux/out/all-clusters-app$ sudo ./chip-all-clusters-app --wifi

          [13293:13293] CHIP:DL: Device Configuration:
          [1653306603.740569][13293:13293] CHIP:DL:   Serial Number: TEST_SN
          [1653306603.740607][13293:13293] CHIP:DL:   Vendor Id: 65521 (0xFFF1)
          [1653306603.740644][13293:13293] CHIP:DL:   Product Id: 32769 (0x8001)
          [1653306603.740676][13293:13293] CHIP:DL:   Hardware Version: 0
          [1653306603.740700][13293:13293] CHIP:DL:   Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
          [1653306603.740722][13293:13293] CHIP:DL:   Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
          [1653306603.740752][13293:13293] CHIP:DL:   Manufacturing Date: (not set)
          [1653306603.740777][13293:13293] CHIP:DL:   Device Type: 65535 (0xFFFF)
          [1653306603.740798][13293:13293] CHIP:-: ==== Onboarding payload for Standard Commissioning Flow ====
          [1653306603.740846][13293:13293] CHIP:SVR: SetupQRCode: [MT:-24J042C00KA0648G00]
          [1653306603.740877][13293:13293] CHIP:SVR: Copy/paste the below URL in a browser to see the QR Code:
          [1653306603.740898][13293:13293] CHIP:SVR: https://dhrishi.github.io/connectedhomeip/qrcode.html?data=MT%3A-24J042C00KA0648G00
          [1653306603.740929][13293:13293] CHIP:SVR: Manual pairing code: [34970112332]
          [1653306603.740951][13293:13293] CHIP:-: ==== Onboarding payload for Custom Commissioning Flows ====
          [1653306603.741000][13293:13293] CHIP:SVR: SetupQRCode: [MT:-24J0YXE00KA0648G00]
          [1653306603.741028][13293:13293] CHIP:SVR: Copy/paste the below URL in a browser to see the QR Code:
          [1653306603.741049][13293:13293] CHIP:SVR: https://dhrishi.github.io/connectedhomeip/qrcode.html?data=MT%3A-24J0YXE00KA0648G00
          [1653306603.741081][13293:13293] CHIP:SVR: Manual pairing code: [749701123365521327694]
      disabled: true

    - label:
          "Verify the DUT follows the correct order of onboarding the TH devices
          which must be from first to last starting from left to right."
      PICS: MCORE.DD.CTRL_CONCATENATED_QR_CODE_1_INORDER
      verification: |
          Out of Scope for V1.0 as Concatenated QR codes are not supported yet
          https://github.com/project-chip/connectedhomeip/issues/5331
          Vendor specific field testcase
      disabled: true

    - label:
          "Verify the DUT follows the correct order of onboarding the TH devices
          which must be from first to last starting from left to right."
      PICS:
          "!(MCORE.DD.CTRL_CONCATENATED_QR_CODE_1) &&
          MCORE.DD.CTRL_CONCATENATED_QR_CODE_2"
      verification: |
          Out of Scope for V1.0 as Concatenated QR codes are not supported yet
          https://github.com/project-chip/connectedhomeip/issues/5331
          Vendor specific field testcase
      disabled: true

    - label:
          "Verify the DUT does NOT indicate to the user the need to commission
          TH devices one by one by scanning their individual QR codes, but
          instead warns the user (in a way described by the provider of the DUT)
          that the QR code cannot be processed."
      PICS:
          "!(MCORE.DD.CTRL_CONCATENATED_QR_CODE_1) &&
          !(MCORE.DD.CTRL_CONCATENATED_QR_CODE_2)"
      verification: |
          Out of Scope for V1.0 as Concatenated QR codes are not supported yet
          https://github.com/project-chip/connectedhomeip/issues/5331
          Vendor specific field testcase
      disabled: true
