Skip to content

Commit

Permalink
Requirement unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mkoura committed Jun 18, 2018
1 parent f9bed07 commit 6c8c7ed
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 6 deletions.
4 changes: 2 additions & 2 deletions dump2polarion/requirements_exporter.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# pylint: disable=c-extension-no-member
"""
Dump testcases results to requirements XML file for submitting to the Polarion Importer.
Creates a Requirement XML file for submitting to the Polarion Importer.
"""

from __future__ import absolute_import, unicode_literals
Expand Down Expand Up @@ -170,7 +170,7 @@ def _requirement_element(self, parent_element, req_data):

def _fill_requirements(self, parent_element):
if not self.requirements_data:
raise NothingToDoException("Nothing to export")
raise NothingToDoException('Nothing to export')
for req_data in self.requirements_data:
self._requirement_element(parent_element, req_data)

Expand Down
2 changes: 1 addition & 1 deletion dump2polarion/xunit_exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ def _gen_testcase(self, parent_element, result, records):
def _fill_tests_results(self, testsuite_element):
"""Creates records for all testcases results."""
if not self.tests_records.results:
raise NothingToDoException("Nothing to export")
raise NothingToDoException('Nothing to export')

records = dict(passed=0, skipped=0, failures=0, waiting=0, time=0.0)
for testcase_result in self.tests_records.results:
Expand Down
9 changes: 6 additions & 3 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from __future__ import unicode_literals

import copy
import io
import os
import logging
Expand All @@ -15,8 +16,10 @@
GENERIC_CONF = {
'xunit_target': 'https://polarion.example.com/import/xunit',
'testcase_taget': 'https://polarion.example.com/import/testcase',
'requirement_target': 'https://polarion.example.com/import/requirement',
'xunit_queue': 'https://polarion.example.com/import/xunit-queue',
'testcase_queue': 'https://polarion.example.com/import/testcase-queue'
'testcase_queue': 'https://polarion.example.com/import/testcase-queue',
'requirement_queue': 'https://polarion.example.com/import/requirement-queue',
}

RHCF3_PROPS = {
Expand All @@ -36,12 +39,12 @@

@pytest.fixture(scope='module')
def config_prop():
return RHCF3_CONF
return copy.deepcopy(RHCF3_CONF)


@pytest.fixture(scope='module')
def config_prop_cmp():
return CMP_CONF
return copy.deepcopy(CMP_CONF)


@pytest.fixture(scope='function')
Expand Down
27 changes: 27 additions & 0 deletions tests/data/requirement_complete.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version='1.0' encoding='utf-8'?>
<requirements document-relative-path="testing/requirements" project-id="CLOUDTP">
<properties>
<property name="prop1" value="val1"/>
<property name="prop2" value="val2"/>
<property name="lookup-method" value="name"/>
</properties>
<requirement approver-ids="sbulage:approved" assignee-id="mkourim" category-ids="CAT-01" due-date="2018-05-30" initial-estimate="1/4h" planned-in-ids="PROJ-01" priority-id="medium" severity-id="good_to_have" status-id="STAT-01">
<title>req01</title>
<custom-fields>
<custom-field content="functional" id="reqtype"/>
</custom-fields>
</requirement>
<requirement approver-ids="mkourim:approved" assignee-id="mkourim" initial-estimate="1/4h" priority-id="high" severity-id="should_have">
<title>req02</title>
<description>requirement description</description>
<custom-fields>
<custom-field content="functional" id="reqtype"/>
</custom-fields>
</requirement>
<requirement approver-ids="mkourim:approved" assignee-id="mkourim" priority-id="high" severity-id="should_have">
<title>req03</title>
<custom-fields>
<custom-field content="functional" id="reqtype"/>
</custom-fields>
</requirement>
</requirements>
83 changes: 83 additions & 0 deletions tests/test_requirement_exporter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# encoding: utf-8
# pylint: disable=missing-docstring,redefined-outer-name,no-self-use,protected-access
# pylint: disable=c-extension-no-member

from __future__ import unicode_literals

import copy
import io
import os

import pytest
from tests import conf

from dump2polarion.exceptions import Dump2PolarionException, NothingToDoException
from dump2polarion.requirements_exporter import RequirementExport


REQ_DATA = [
{
'title': 'req01',
'approver-ids': 'sbulage:approved',
'assignee-id': 'mkourim',
'category-ids': 'CAT-01',
'due-date': '2018-05-30',
'planned-in-ids': 'PROJ-01',
'initial-estimate': '1/4h',
'priority-id': 'medium',
'severity-id': 'good_to_have',
'status-id': 'STAT-01',
'reqtype': 'functional',
},
{
'title': 'req02',
'description': 'requirement description',
'assignee-id': 'mkourim',
'initial-estimate': '1/4h',
},
{
'id': 'PROJ-01',
'title': 'req03',
'initial-estimate': None,
},
{
'id': 'PROJ-02',
},
]


@pytest.fixture(scope='module')
def config_cloudtp(config_prop):
config_prop['xunit_import_properties']['polarion-project-id'] = 'CLOUDTP'
config_prop['requirements-document-relative-path'] = 'testing/requirements'
config_prop['requirements_import_properties'] = {
'prop1': 'val1',
'prop2': 'val2',
}
return config_prop


class TestRequirement(object):
def test_export(self, config_cloudtp):
req_exp = RequirementExport(REQ_DATA, config_cloudtp)
complete = req_exp.export()
fname = 'requirement_complete.xml'
with io.open(os.path.join(conf.DATA_PATH, fname), encoding='utf-8') as input_xml:
parsed = input_xml.read()
assert complete == parsed

def test_invalid_lookup(self, config_cloudtp):
new_config = copy.deepcopy(config_cloudtp)
new_config['requirements_import_properties'] = {
'lookup-method': 'inv',
}
req_exp = RequirementExport(REQ_DATA, new_config)
with pytest.raises(Dump2PolarionException) as excinfo:
req_exp.export()
assert "Invalid value 'inv' for the 'lookup-method' property" in str(excinfo.value)

def test_no_requirements(self, config_cloudtp):
req_exp = RequirementExport([], config_cloudtp)
with pytest.raises(NothingToDoException) as excinfo:
req_exp.export()
assert 'Nothing to export' in str(excinfo.value)
5 changes: 5 additions & 0 deletions tests/test_submit.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ def test_get_testsuites_taget(self, config_prop):
response = submit._get_submit_target(xml_root, config_prop)
assert 'xunit' in response

def test_get_requirements_taget(self, config_prop):
xml_root = utils.get_xml_root_from_str('<requirements/>')
response = submit._get_submit_target(xml_root, config_prop)
assert 'requirement' in response

def test_file_testsuites_failure(self, config_prop, captured_log):
class Response(object):
def __init__(self):
Expand Down

0 comments on commit 6c8c7ed

Please sign in to comment.