Пример #1
0
def create(request, values):
    """
    Description: Creates a new Test Case object and stores it in the database.

    Params:      $values - Array/Hash: A reference to a hash or array of hashes with keys and values
                 matching the fields of the test case to be created.
      +----------------------------+----------------+-----------+-----------------------------+
      | Field                      | Type           | Null      | Description                 |
      +----------------------------+----------------+-----------+-----------------------------+
      | product                    | Integer        | Required  | ID of Product               |
      | category                   | Integer        | Required  | ID of Category              |
      | priority                   | Integer        | Required  | ID of Priority              |
      | summary                    | String         | Required  |                             |
      | case_status                | Integer        | Optional  | ID of case status           |
      | plan                       | Array/Str/Int  | Optional  | ID or List of plan_ids      |
      | component                  | Integer/String | Optional  | ID of Priority              |
      | default_tester             | String         | Optional  | Login of tester             |
      | estimated_time             | String         | Optional  | HH:MM:SS Format             |
      | is_automated               | Integer        | Optional  | 0: Manual, 1: Auto, 2: Both |
      | is_automated_proposed      | Boolean        | Optional  | Default 0                   |
      | script                     | String         | Optional  |                             |
      | arguments                  | String         | Optional  |                             |
      | requirement                | String         | Optional  |                             |
      | alias                      | String         | Optional  | Must be unique              |
      | action                     | String         | Optional  |                             |
      | effect                     | String         | Optional  | Expected Result             |
      | setup                      | String         | Optional  |                             |
      | breakdown                  | String         | Optional  |                             |
      | tag                        | Array/String   | Optional  | String Comma separated      |
      | bug                        | Array/String   | Optional  | String Comma separated      |
      | extra_link                 | String         | Optional  | reference link              |
      +----------------------------+----------------+-----------+-----------------------------+

    Returns:     Array/Hash: The newly created object hash if a single case was created, or
                             an array of objects if more than one was created. If any single case threw an
                             error during creation, a hash with an ERROR key will be set in its place.

    Example:
    # Minimal test case parameters
    >>> values = {
        'category': 135,
        'product': 61,
        'summary': 'Testing XML-RPC',
        'priority': 1,
    }
    >>> TestCase.create(values)
    """
    from nitrate.core import forms
    from nitrate.apps.testcases.forms import XMLRPCNewCaseForm

    if not (values.get('category') or values.get('summary')):
        raise ValueError()

    values['component'] = pre_process_ids(values.get('component', []))
    values['plan'] = pre_process_ids(values.get('plan', []))
    values['bug'] = pre_process_ids(values.get('bug', []))

    form = XMLRPCNewCaseForm(values)
    form.populate(values.get('product'))

    if form.is_valid():
        # Create the case
        tc = TestCase.create(author = request.user, values = form.cleaned_data)

        # Add case text to the case
        tc.add_text(
            action = form.cleaned_data['action'] or '',
            effect = form.cleaned_data['effect'] or '',
            setup = form.cleaned_data['setup'] or '',
            breakdown = form.cleaned_data['breakdown'] or '',
        )

        # Add the case to specific plans
        for p in form.cleaned_data['plan']:
            tc.add_to_plan(plan = p)
            del p

        # Add components to the case
        for c in form.cleaned_data['component']:
            tc.add_component(component = c)
            del c

        # Add tag to the case
        for tag in TestTag.string_to_list(values.get('tag', [])):
            t, c = TestTag.objects.get_or_create(name = tag)
            tc.add_tag(tag = t)
    else:
        # Print the errors if the form is not passed validation.
        return forms.errors_to_list(form)

    return get(request, tc.case_id)