#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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: Unit Test
title: "[Unit Test] Unit test title"
description: I want to do some unit tests for this project
labels: [ "testing" ]
body:
  - type: markdown
    attributes:
      value: |
        For better global communication, Please write in English.

  - type: checkboxes
    attributes:
      label: Search before asking
      description: >
        Please make sure to search in the [issues](https://github.com/apache/eventmesh/issues?q=is%3Aissue)
        first to see whether the same issue was reported already.
      options:
        - label: >
            I had searched in the [issues](https://github.com/apache/eventmesh/issues?q=is%3Aissue) and found
            no similar issues.
          required: true

  - type: checkboxes
    attributes:
      label: Read the unit testing guidelines
      description: >
        Read the [unit testing guidelines](https://eventmesh.apache.org/community/contribute/write-unit-test) before writing unit test code.
      options:
        - label: >
            I have read.
          required: true

  - type: textarea
    attributes:
      label: Unit test request
      description: Describe the unit test.
      placeholder: >
        First of all: Have you checked the docs https://github.com/apache/eventmesh/tree/develop/docs,
        or GitHub issues whether someone else has already reported your issue?
        Maybe the unit tests you want to do have already been done?
    validations:
      required: true

  - type: textarea
    attributes:
      label: Describe the unit tests you want to do
      description: Describe the unit test.
      value: |
        Module name:
        Located at:
        Task status: ×(unfinished) / √(finished)
        | Task Status | Class | Type |
        | :------: | :------ | :------ |
        | × | xxxxxx | xxxxxx |
    validations:
      required: true

  - type: checkboxes
    attributes:
      label: Are you willing to submit PR?
      description: >
        This is absolutely not required, but we are happy to guide you in the contribution process
        especially if you already have a good understanding of how to implement the fix.
      options:
        - label: Yes I am willing to submit a PR!

  - type: markdown
    attributes:
      value: "Thanks for completing our form!"
