# 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:
    111.2.5. [TC-DRLK-2.5] Verification for the following Commands - Set Week
    Day Schedule, Get Week Day Schedule , Get Week Day Schedule Response, Clear
    Week Day Schedule [DUT-Server]

PICS:
    - DRLK.S

config:
    nodeId: 0x12344321
    cluster: "Door Lock"
    endpoint: 1

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

    - label: "Create new user"
      command: "SetUser"
      timedInteractionTimeoutMs: 10000
      arguments:
          values:
              - name: "OperationType"
                value: 0
              - name: "UserIndex"
                value: 1
              - name: "UserName"
                value: "xxx"
              - name: "UserUniqueID"
                value: 6452
              - name: "UserStatus"
                value: 1
              - name: "UserType"
                value: 0
              - name: "CredentialRule"
                value: 0

    - label: "Read the user back and verify its fields"
      command: "GetUser"
      arguments:
          values:
              - name: "UserIndex"
                value: 1
      response:
          values:
              - name: "UserIndex"
                value: 1
              - name: "UserName"
                value: "xxx"
              - name: "UserUniqueID"
                value: 6452
              - name: "UserStatus"
                value: 1
              - name: "UserType"
                value: 0
              - name: "CredentialRule"
                value: 0
              - name: "Credentials"
                value: []
              - name: "CreatorFabricIndex"
                value: 1
              - name: "LastModifiedFabricIndex"
                value: 1
              - name: "NextUserIndex"
                value: null

    - label: "TH reads NumberOfWeekDay SchedulesSupportedPerUser attribute"
      PICS: DRLK.S.F04 && DRLK.S.A0014
      command: "readAttribute"
      attribute: "NumberOfWeekDaySchedulesSupportedPerUser"
      response:
          saveAs: NumberOfWeekDaySchedulesSupportedPerUser
          constraints:
              minValue: 0
              maxValue: 255

    - label: "TH reads NumberOfTotalUsers Supported attribute"
      PICS: DRLK.S.F08 && DRLK.S.A0011
      command: "readAttribute"
      attribute: "NumberOfTotalUsersSupported"
      response:
          saveAs: NumberOfTotalUsersSupported
          constraints:
              minValue: 0
              maxValue: 65534

    - label: "TH send Set Week Day Schedule Command"
      PICS: DRLK.S.F04 && DRLK.S.C0b.Rsp
      command: "SetWeekDaySchedule"
      arguments:
          values:
              - name: "WeekDayIndex"
                value: 1
              - name: "UserIndex"
                value: 1
              - name: "DaysMask"
                value: 2
              - name: "StartHour"
                value: 15
              - name: "StartMinute"
                value: 45
              - name: "EndHour"
                value: 16
              - name: "EndMinute"
                value: 55

    #issue #18591
    - label: "TH send Get Week Day Schedule Command to DUT"
      PICS: DRLK.S.F04 && DRLK.S.C0c.Rsp && DRLK.S.C0c.Tx
      command: "GetWeekDaySchedule"
      arguments:
          values:
              - name: "WeekDayIndex"
                value: 1
              - name: "UserIndex"
                value: 1
      response:
          values:
              - name: "WeekDayIndex"
                value: 1
              - name: "UserIndex"
                value: 1
              - name: "Status"
                value: 0x0
              - name: "DaysMask"
                value: 2
              - name: "StartHour"
                value: 15
              - name: "StartMinute"
                value: 45
              - name: "EndHour"
                constraints:
                    hasValue: true
                    minValue: 16
              - name: "EndMinute"
                constraints:
                    hasValue: true
                    minValue: 55

    - label: "TH send Set Week Day Schedule Command"
      PICS: DRLK.S.F04 && DRLK.S.C0b.Rsp
      command: "SetWeekDaySchedule"
      arguments:
          values:
              - name: "WeekDayIndex"
                value: 0
              - name: "UserIndex"
                value: 1
              - name: "DaysMask"
                value: 7
              - name: "StartHour"
                value: 15
              - name: "StartMinute"
                value: 45
              - name: "EndHour"
                value: 16
              - name: "EndMinute"
                value: 55
      response:
          error: INVALID_COMMAND

    - label: "TH send Get Week Day Schedule Command to DUT"
      PICS: DRLK.S.F04 && DRLK.S.C0c.Rsp && DRLK.S.C0c.Tx
      command: "GetWeekDaySchedule"
      arguments:
          values:
              - name: "WeekDayIndex"
                value: 0
              - name: "UserIndex"
                value: 1
      response:
          values:
              - name: "WeekDayIndex"
                value: 0
              - name: "UserIndex"
                value: 1
              - name: "Status"
                value: 0x85
              - name: "DaysMask"
                constraints:
                    hasValue: false
              - name: "StartHour"
                constraints:
                    hasValue: false
              - name: "StartMinute"
                constraints:
                    hasValue: false
              - name: "EndHour"
                constraints:
                    hasValue: false
              - name: "EndMinute"
                constraints:
                    hasValue: false

    - label: "TH sends Clear Week Day Schedule Command to DUT"
      PICS: DRLK.S.F04 && DRLK.S.C0d.Rsp
      command: "ClearWeekDaySchedule"
      arguments:
          values:
              - name: "WeekDayIndex"
                value: 1
              - name: "UserIndex"
                value: 1

    - label: "TH sends Get Week Day Schedule Command to DUT"
      PICS: DRLK.S.F04 && DRLK.S.C0c.Rsp && DRLK.S.C0c.Tx
      command: "GetWeekDaySchedule"
      arguments:
          values:
              - name: "WeekDayIndex"
                value: 1
              - name: "UserIndex"
                value: 1
      response:
          values:
              - name: "WeekDayIndex"
                value: 1
              - name: "UserIndex"
                value: 1
              - name: "Status"
                value: 0x8B
              - name: "DaysMask"
                constraints:
                    hasValue: false
              - name: "StartHour"
                constraints:
                    hasValue: false
              - name: "StartMinute"
                constraints:
                    hasValue: false
              - name: "EndHour"
                constraints:
                    hasValue: false
              - name: "EndMinute"
                constraints:
                    hasValue: false

    - label: "Cleanup the created user"
      command: "ClearUser"
      timedInteractionTimeoutMs: 10000
      arguments:
          values:
              - name: "UserIndex"
                value: 1
