# 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: Test Cluster Constraints Tests

config:
    nodeId: 0x12344321
    cluster: "Test Cluster"
    endpoint: 1

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

    # Tests for List of INT8U attribute
    - label: "Write attribute LIST With List of INT8U"
      command: "writeAttribute"
      attribute: "list_int8u"
      arguments:
          value: [1, 2, 3, 4]

    - label:
          "Read attribute LIST With Partial List of INT8U that should be in it"
      command: "readAttribute"
      attribute: "list_int8u"
      response:
          constraints:
              contains: [2, 3, 4]

    - label:
          "Read attribute LIST With Partial List of INT8U that should not be
          included"
      command: "readAttribute"
      attribute: "list_int8u"
      response:
          constraints:
              excludes: [0, 5]

    - label: "Write attribute LIST Back to Default Value"
      command: "writeAttribute"
      attribute: "list_int8u"
      arguments:
          value: []

    # Tests for Bitmap32 attribute

    - label: "Read attribute BITMAP32 Default Value"
      command: "readAttribute"
      attribute: "bitmap32"
      response:
          value: 0

    - label: "Write attribute BITMAP32 with MaskVal1 and MaskVal3"
      command: "writeAttribute"
      attribute: "bitmap32"
      arguments:
          value: 5 # MaskVal1 | MaskVal3

    - label:
          "Read attribute BITMAP32 with MaskVal1 and MaskVal3 and ensure
          MaskVal2 is not set"
      command: "readAttribute"
      attribute: "bitmap32"
      response:
          value: 5 # MaskVal1 | MaskVal3
          constraints:
              hasMasksClear: [0x02] # [MaskVal2]

    - label:
          "Read attribute BITMAP32 with MaskVal1 and MaskVal3 and ensure
          MaskVal1 is set"
      command: "readAttribute"
      attribute: "bitmap32"
      response:
          value: 5 # MaskVal1 | MaskVal3
          constraints:
              hasMasksSet: [0x01] # [MaskVal1]

    - label:
          "Read attribute BITMAP32 with MaskVal1 and MaskVal3 and ensure
          MaskVal3 is set"
      command: "readAttribute"
      attribute: "bitmap32"
      response:
          value: 5 # MaskVal1 | MaskVal3
          constraints:
              hasMasksSet: [0x04] # [MaskVal3]

    - label:
          "Read attribute BITMAP32 with MaskVal1 and MaskVal3 and ensure
          Maskval1 and MaskVal3 are set"
      command: "readAttribute"
      attribute: "bitmap32"
      response:
          value: 5 # MaskVal1 | MaskVal3
          constraints:
              hasMasksSet: [0x01, 0x04] # [MaskVal1, MaskVal3]

    # Tests for INT32U attribute

    - label: "Write attribute INT32U Value"
      command: "writeAttribute"
      attribute: "int32u"
      arguments:
          value: 5

    - label: "Read attribute INT32U Value MinValue Constraints"
      command: "readAttribute"
      attribute: "int32u"
      response:
          constraints:
              minValue: 5

    - label: "Read attribute INT32U Value MaxValue Constraints"
      command: "readAttribute"
      attribute: "int32u"
      response:
          constraints:
              maxValue: 5

    - label: "Read attribute INT32U Value NotValue Constraints"
      command: "readAttribute"
      attribute: "int32u"
      response:
          constraints:
              notValue: 6

    - label: "Write attribute INT32U Value Back to Default Value"
      command: "writeAttribute"
      attribute: "int32u"
      arguments:
          value: 0

    # Tests for CHAR_STRING attribute

    - label: "Write attribute CHAR_STRING Value"
      command: "writeAttribute"
      attribute: "char_string"
      arguments:
          value: "** Test **"

    - label: "Read attribute CHAR_STRING Value MinLength Constraints"
      command: "readAttribute"
      attribute: "char_string"
      response:
          constraints:
              minLength: 5

    - label: "Read attribute CHAR_STRING Value MaxLength Constraints"
      command: "readAttribute"
      attribute: "char_string"
      response:
          constraints:
              maxLength: 20

    - label: "Read attribute CHAR_STRING Value StartsWith Constraints"
      command: "readAttribute"
      attribute: "char_string"
      response:
          constraints:
              startsWith: "**"

    - label: "Read attribute CHAR_STRING Value EndsWith Constraints"
      command: "readAttribute"
      attribute: "char_string"
      response:
          constraints:
              endsWith: "**"

    - label: "Write attribute CHAR_STRING Value"
      command: "writeAttribute"
      attribute: "char_string"
      arguments:
          value: "lowercase"

    - label:
          "Read attribute CHAR_STRING Value isLowerCase/isUpperCase Constraints"
      command: "readAttribute"
      attribute: "char_string"
      response:
          constraints:
              isLowerCase: true
              isUpperCase: false

    - label: "Write attribute CHAR_STRING Value"
      command: "writeAttribute"
      attribute: "char_string"
      arguments:
          value: "UPPERCASE"

    - label:
          "Read attribute CHAR_STRING Value isLowerCase/isUpperCase Constraints"
      command: "readAttribute"
      attribute: "char_string"
      response:
          constraints:
              isUpperCase: true
              isLowerCase: false

    - label: "Write attribute CHAR_STRING Value"
      command: "writeAttribute"
      attribute: "char_string"
      arguments:
          value: "lowUPPER"

    - label:
          "Read attribute CHAR_STRING Value isLowerCase/isUpperCase Constraints"
      command: "readAttribute"
      attribute: "char_string"
      response:
          constraints:
              isUpperCase: false
              isLowerCase: false

    - label: "Write attribute CHAR_STRING Value"
      command: "writeAttribute"
      attribute: "char_string"
      arguments:
          value: "ABCDEF012V"

    - label: "Read attribute CHAR_STRING Value isHexString Constraints"
      command: "readAttribute"
      attribute: "char_string"
      response:
          constraints:
              isHexString: false

    - label: "Write attribute CHAR_STRING Value"
      command: "writeAttribute"
      attribute: "char_string"
      arguments:
          value: "ABCDEF0123"

    - label: "Read attribute CHAR_STRING Value isHexString Constraints"
      command: "readAttribute"
      attribute: "char_string"
      response:
          constraints:
              isHexString: true

    - label: "Write attribute CHAR_STRING Value Back to Default Value"
      command: "writeAttribute"
      attribute: "char_string"
      arguments:
          value: ""
