def test_retrieve_jira_schema_for_field():
    """
        will return a JiraFieldSchema instance for a valid field
    """
    SLOG = "getschema.log"
    logger = BasicLogger(SLOG)
    logger.level = 'DEBUG'
    conf = copy.copy(GOOD_VANILLA_SERVER_CONFIG)
    conf['logger'] = logger

    jp = JiraProxy(conf)
    fs = jp.fieldSchema(PROJECT_KEY_1, 'Bug', 'Priority')
    assert fs.__class__  == JiraFieldSchema
    assert fs.display_name == 'Priority'
    assert fs.standard   == True
    assert fs.custom     == False
    assert fs.structure  == 'atom'
    assert fs.data_type  == 'priority'
    assert 'High' in fs.allowed_values

    log_lines = []
    with open(SLOG, 'r') as lf:
        log_lines = lf.readlines()
    log_debug_line_with_field_info_patt \
        = re.compile(r':DEBUG:.*:JiraProxy config arg content:.*password.*')
    re.compile(r":DEBUG:.*:.*field_info returned from JIRA options-[^\n]+ were:\n")
    lines_with_field_info = [line for line in log_lines 
                             if log_debug_line_with_field_info_patt.search(line)]
    assert len(lines_with_field_info) == 1

    os.remove(SLOG)
def test_sad_get_jira_schema_for_invalid_project():
    """
        will raise an error on attempt to return a JiraFieldSchema instance 
        for a valid field for an invalid project identifier
    """
    jp = JiraProxy(GOOD_VANILLA_SERVER_CONFIG)
    with py.test.raises(JiraProxyError) as excinfo:
        fs = jp.fieldSchema(BAD_PROJECT_KEY_1, 'Bug', 'Priority')
    actualErrorMessage = excErrorMessage(excinfo)
    assert 'Could not find project for identifier:' in actualErrorMessage
def test_get_jira_schema_for_valid_project():
    """
        return a JiraFieldSchema instance for a valid field using a valid project name
    """
    jp = JiraProxy(GOOD_VANILLA_SERVER_CONFIG)
    fs = jp.fieldSchema(PROJECT_NAME_1, 'Bug', 'Priority')

    assert fs.__class__    == JiraFieldSchema
    assert fs.display_name ==  'Priority'
    assert fs.standard     == True
    assert fs.custom       == False
    assert fs.structure    == 'atom'
    assert fs.data_type    == 'priority'
    assert 'Low' in fs.allowed_values
def test_get_jira_schema_for_custom_number_field():
    """
        will return a JiraFieldScheme instance for a valid custom field of type number
    """
    jp = JiraProxy(GOOD_VANILLA_SERVER_CONFIG)
    fs = jp.fieldSchema(PROJECT_KEY_1, 'Bug', 'RallyID')

    assert fs.__class__    == JiraFieldSchema
    assert fs.display_name == 'RallyID'
    assert fs.name.startswith('customfield_')
    assert fs.standard     == False
    assert fs.custom       == True
    assert fs.structure    == 'atom'
    assert fs.data_type    == 'number'
    assert not fs.allowed_values
def test_get_jira_schema_for_array_valued_field():
    """
        will return a JiraFieldSchema instance for a valid field that is an array
    """
    jp = JiraProxy(GOOD_VANILLA_SERVER_CONFIG)
    fs = jp.fieldSchema(PROJECT_KEY_1, 'Bug', 'Affects Version/s')

    assert fs.__class__    == JiraFieldSchema
    assert fs.display_name == 'Affects Version/s'
    assert fs.standard     == True
    assert fs.custom       == False
    # FIX!
    #assert fs.structure    == 'array'   # this fails, it comes back as 'atom'
    assert fs.data_type    == 'array'
    assert 'vanilla' in fs.allowed_values