def test_feedback_show_all(out):
    """should output JSON for all results if query is empty"""
    yvs.main('')
    output = out.getvalue().rstrip()
    results = yvs.get_result_list('')
    feedback = yvs.core.get_result_list_feedback_str(results).rstrip()
    nose.assert_equal(output, feedback)
def test_feedback_show_all(out):
    """should output JSON for all results if query is empty"""
    yvs.main('')
    output = out.getvalue().rstrip()
    results = yvs.get_result_list('')
    feedback = yvs.core.get_result_list_feedback_str(results).rstrip()
    nose.assert_equal(output, feedback)
def test_xml_show_all(out):
    """should output XML for all results if query is empty"""
    yvs.main('')
    output = out.getvalue().strip()
    results = yvs.get_result_list('')
    xml = yvs.shared.get_result_list_xml(results).strip()
    nose.assert_equal(output, xml)
def test_filter_preferences_name_partial():
    """should match partial pref name at word boundaries"""
    results = yvs.get_result_list('version en st')
    nose.assert_equal(len(results), 2)
    nose.assert_equal(results[1]['uid'], 'yvs-version-59')
    nose.assert_equal(results[1]['title'],
                      'English Standard Version 2016 (ESV)')
def test_preferences_autocompletion():
    """autocompletion should be functioning for all preference results"""
    results = yvs.get_result_list('')
    for result in results:
        nose.assert_in('autocomplete', result)
        nose.assert_in('valid', result)
        nose.assert_equal(result['valid'], False)
def test_preferences_autocompletion():
    """autocompletion should be functioning for all preference results"""
    results = yvs.get_result_list('')
    for result in results:
        nose.assert_in('autocomplete', result)
        nose.assert_in('valid', result)
        nose.assert_equal(result['valid'], False)
def test_main_output(out):
    """should output pref result list JSON"""
    query_str = 'language'
    yvs.main(query_str)
    output = out.getvalue().rstrip()
    results = yvs.get_result_list(query_str)
    feedback = yvs.core.get_result_list_feedback_str(results).rstrip()
    nose.assert_equal(output, feedback)
def test_main_output(out):
    """should output pref result list JSON"""
    query_str = 'language'
    yvs.main(query_str)
    output = out.getvalue().rstrip()
    results = yvs.get_result_list(query_str)
    feedback = yvs.core.get_result_list_feedback_str(results).rstrip()
    nose.assert_equal(output, feedback)
def test_main_output(out):
    """should output pref result list XML"""
    query_str = 'language'
    yvs.main(query_str)
    output = out.getvalue().strip()
    results = yvs.get_result_list(query_str)
    xml = yvs.shared.get_result_list_xml(results).strip()
    nose.assert_equal(output, xml)
def test_filter_preference_entire_query():
    """should match available preference values using entire query string"""
    results = yvs.get_result_list('language español (españa)')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-language-spa_es')
    nose.assert_equal(results[0]['title'], 'Español (España)')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(
        results[0]['variables'], {
            'pref_id': 'language',
            'pref_name': 'language',
            'value_id': '"spa_es"',
            'value_name': 'Español (España)'
        })
def test_show_current_refformat():
    """should show current refformat as an available value"""
    results = yvs.get_result_list('refformat Z')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-refformat-Z {content}')
    nose.assert_equal(results[0]['title'], 'Z Jesus wept.')
    nose.assert_equal(results[0]['valid'], False)
    nose.assert_equal(
        results[0]['variables'], {
            'pref_id': 'refformat',
            'pref_name': 'reference format',
            'value_id': '"Z {content}"',
            'value_name': 'Z Jesus wept.'
        })
def test_filter_languages():
    """should filter available languages if value is given"""
    results = yvs.get_result_list('language esp')
    nose.assert_equal(results[0]['uid'], 'yvs-language-spa')
    nose.assert_equal(results[0]['title'], 'Español (América Latina)')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(len(results), 2)
    nose.assert_equal(
        results[0]['variables'], {
            'pref_id': 'language',
            'pref_name': 'language',
            'value_id': '"spa"',
            'value_name': 'Español (América Latina)'
        })
def test_filter_preference_ignore_special():
    """should ignore special characters when matching preference values"""
    results = yvs.get_result_list('language 繁體中文$$')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-language-zho_tw')
    nose.assert_equal(results[0]['title'], '繁體中文')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(
        results[0]['variables'], {
            'pref_id': 'language',
            'pref_name': 'language',
            'value_id': '"zho_tw"',
            'value_name': '繁體中文'
        })
def test_filter_languages_non_latin():
    """should filter non-latin language names"""
    results = yvs.get_result_list('language 繁')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-language-zho_tw')
    nose.assert_equal(results[0]['title'], '繁體中文')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(
        results[0]['variables'], {
            'pref_id': 'language',
            'pref_name': 'language',
            'value_id': '"zho_tw"',
            'value_name': '繁體中文'
        })
def test_filter_versions():
    """should filter available versions if value is given"""
    results = yvs.get_result_list('version ni')
    nose.assert_equal(len(results), 3)
    nose.assert_equal(results[0]['uid'], 'yvs-version-110')
    nose.assert_equal(results[0]['title'],
                      'New International Reader’s Version (NIRV)')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(
        results[0]['variables'], {
            'pref_id': 'version',
            'pref_name': 'version',
            'value_id': '110',
            'value_name': 'New International Reader’s Version (NIRV)'
        })
def test_filter_preference_ignore_special():
    """should ignore special characters when matching preference values"""
    results = yvs.get_result_list('language 繁體中文$$')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-language-zho_tw')
    nose.assert_equal(results[0]['title'], '繁體中文')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(json.loads(results[0]['arg']), {
        'pref': {
            'id': 'language',
            'name': 'language'
        },
        'value': {
            'id': 'zho_tw',
            'name': '繁體中文'
        }
    })
def test_filter_preference_entire_query():
    """should match available preference values using entire query string"""
    results = yvs.get_result_list('language español (españa)')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-language-spa_es')
    nose.assert_equal(results[0]['title'], 'Español (España)')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(json.loads(results[0]['arg']), {
        'pref': {
            'id': 'language',
            'name': 'language'
        },
        'value': {
            'id': 'spa_es',
            'name': 'Español (España)'
        }
    })
def test_show_current_refformat():
    """should show current refformat as an available value"""
    results = yvs.get_result_list('refformat Z')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-refformat-Z {content}')
    nose.assert_equal(results[0]['title'], 'Z Jesus wept.')
    nose.assert_equal(results[0]['valid'], False)
    nose.assert_equal(json.loads(results[0]['arg']), {
        'pref': {
            'id': 'refformat',
            'name': 'reference format'
        },
        'value': {
            'id': 'Z {content}',
            'name': 'Z Jesus wept.'
        }
    })
def test_filter_languages_non_latin():
    """should filter non-latin language names"""
    results = yvs.get_result_list('language 繁')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-language-zho_tw')
    nose.assert_equal(results[0]['title'], '繁體中文')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(json.loads(results[0]['arg']), {
        'pref': {
            'id': 'language',
            'name': 'language'
        },
        'value': {
            'id': 'zho_tw',
            'name': '繁體中文'
        }
    })
def test_filter_versions():
    """should filter available versions if value is given"""
    results = yvs.get_result_list('version ni')
    nose.assert_equal(len(results), 3)
    nose.assert_equal(results[0]['uid'], 'yvs-version-110')
    nose.assert_equal(results[0]['title'],
                      'New International Reader\'s Version (NIRV)')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(json.loads(results[0]['arg']), {
        'pref': {
            'id': 'version',
            'name': 'version'
        },
        'value': {
            'id': 110,
            'name': 'New International Reader\'s Version (NIRV)'
        }
    })
def test_filter_refformats():
    """should filter available refformats if value is given"""
    results = yvs.get_result_list('refformat http')
    result_title = '"Jesus wept." ¬ John 11:35 NIV ¬ {url}'.format(
        url=yvs.core.get_ref_url('111/jhn.11.35'))
    result_format_id = '"{content}"\n{name} {version}\n{url}'
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'],
                      'yvs-refformat-{id}'.format(id=result_format_id))
    nose.assert_equal(results[0]['title'], result_title)
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(
        results[0]['variables'], {
            'pref_id': 'refformat',
            'pref_name': 'reference format',
            'value_id': json.dumps(result_format_id),
            'value_name': result_title
        })
def test_filter_languages():
    """should filter available languages if value is given"""
    results = yvs.get_result_list('language esp')
    nose.assert_equal(results[0]['uid'], 'yvs-language-spa')
    nose.assert_equal(
        results[0]['title'], 'Español (América Latina)')
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(len(results), 2)
    nose.assert_equal(json.loads(results[0]['arg']), {
        'pref': {
            'id': 'language',
            'name': 'language'
        },
        'value': {
            'id': 'spa',
            'name': 'Español (América Latina)'
        }
    })
def test_filter_refformats():
    """should filter available refformats if value is given"""
    results = yvs.get_result_list('refformat http')
    result_title = '"Jesus wept." ¬ John 11:35 NIV ¬ {url}'.format(
        url=yvs.core.get_ref_url('111/jhn.11.35'))
    result_format_id = '"{content}"\n{name} {version}\n{url}'
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'],
                      'yvs-refformat-{id}'.format(id=result_format_id))
    nose.assert_equal(results[0]['title'], result_title)
    nose.assert_equal(results[0].get('valid', True), True)
    nose.assert_equal(json.loads(results[0]['arg']), {
        'pref': {
            'id': 'refformat',
            'name': 'reference format'
        },
        'value': {
            'id': result_format_id,
            'name': result_title
        }
    })
def test_filter_preferences_name():
    """should filter available preferences if partial pref name is given"""
    results = yvs.get_result_list('refe')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-refformat')
    nose.assert_equal(results[0]['title'], 'Reference Format')
def test_show_all_preferences():
    """should show all available preferences if query is empty"""
    results = yvs.get_result_list('')
    nose.assert_not_equal(len(results), 0)
def test_nonexistent_value():
    """should return null result for nonexistent value"""
    results = yvs.get_result_list('language xyz')
    nose.assert_regexp_matches(results[0]['title'], 'No Results')
    nose.assert_equal(results[0]['valid'], False)
    nose.assert_equal(len(results), 1)
def test_current_value():
    """should not make preference's current value actionable"""
    results = yvs.get_result_list('language english')
    nose.assert_equal(results[0]['title'], 'English')
    nose.assert_equal(results[0]['valid'], False)
    nose.assert_equal(len(results), 1)
def test_invalid_query():
    """should show all available preferences for invalid preference name"""
    results = yvs.get_result_list('!@#')
    nose.assert_not_equal(len(results), 0)
def test_show_languages():
    """should show all languages if no value is given"""
    results = yvs.get_result_list('language')
    nose.assert_not_equal(len(results), 0)
def test_filter_preferences_show_current():
    """should show current values for all preferences"""
    results = yvs.get_result_list('')
    nose.assert_equal(len(results), 5)
    nose.assert_in('English', results[0]['subtitle'])
    nose.assert_in('NIV', results[1]['subtitle'])
def test_filter_preferences_show_current_valid_only():
    """should not show invalid current preference values"""
    results = yvs.get_result_list('')
    nose.assert_equal(len(results), 4)
    nose.assert_in('currently', results[0]['subtitle'])
    nose.assert_not_in('currently', results[1]['subtitle'])
def test_show_languages():
    """should show all languages if no value is given"""
    results = yvs.get_result_list('language')
    nose.assert_equal(len(results),
                      len(glob.glob('yvs/data/bible/bible-*.json')))
def test_filter_preferences_name():
    """should filter available preferences if partial pref name is given"""
    results = yvs.get_result_list('refe')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-refformat')
    nose.assert_equal(results[0]['title'], 'Reference Format')
def test_filter_preferences_name_partial():
    """should match partial pref name at word boundaries"""
    results = yvs.get_result_list('version en st')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['uid'], 'yvs-version-59')
    nose.assert_equal(results[0]['title'], 'English Standard Version (ESV)')
def test_show_refformats():
    """should show all refformats if no value is given"""
    results = yvs.get_result_list('refformat')
    nose.assert_greater(len(results), 3)
def test_invalid_query():
    """should show all available preferences for invalid preference name"""
    results = yvs.get_result_list('!@#')
    nose.assert_not_equal(len(results), 0)
def test_filter_versions():
    """should filter available versions if value is given"""
    results = yvs.get_result_list('version ni')
    nose.assert_equal(len(results), 3)
    nose.assert_equal(results[0]['title'], 'NIRV')
    nose.assert_equal(results[0]['arg'], 'version:110')
def test_empty():
    """should show all existing preferences if query is empty"""
    results = yvs.get_result_list('')
    nose.assert_equal(len(results), 2)
    nose.assert_equal(results[0]['title'], 'Language')
    nose.assert_equal(results[1]['title'], 'Version')
def test_show_all_preferences():
    """should show all available preferences if query is empty"""
    results = yvs.get_result_list('')
    nose.assert_not_equal(len(results), 0)
def test_filter_preferences_show_current():
    """should show current values for all preferences"""
    results = yvs.get_result_list('')
    nose.assert_equal(len(results), 4)
    nose.assert_in('English', results[0]['subtitle'])
    nose.assert_in('NIV', results[1]['subtitle'])
def test_current_value():
    """should not make preference's current value actionable"""
    results = yvs.get_result_list('language english')
    nose.assert_equal(results[0]['title'], 'English')
    nose.assert_equal(results[0]['valid'], False)
    nose.assert_equal(len(results), 1)
def test_nonexistent_pref():
    """should not match nonexistent preference"""
    results = yvs.get_result_list('xyz')
    nose.assert_equal(len(results), 0)
def test_nonexistent_value():
    """should return null result for nonexistent value"""
    results = yvs.get_result_list('language xyz')
    nose.assert_regexp_matches(results[0]['title'], 'No Results')
    nose.assert_equal(results[0]['valid'], False)
    nose.assert_equal(len(results), 1)
def test_nonexistent_pref():
    """should not match nonexistent preference"""
    results = yvs.get_result_list('xyz')
    nose.assert_equal(len(results), 0)
def test_show_languages():
    """should show all languages if no value is given"""
    results = yvs.get_result_list('language')
    nose.assert_equal(
        len(results), len(glob.glob('yvs/data/bible/bible-*.json')))
def test_invalid():
    """should show all existing preferences for invalid preference name"""
    results = yvs.get_result_list('!@#')
    nose.assert_equal(len(results), 2)
    nose.assert_equal(results[0]['title'], 'Language')
    nose.assert_equal(results[1]['title'], 'Version')
def test_filter_preferences_show_current_valid_only():
    """should not show invalid current preference values"""
    results = yvs.get_result_list('')
    nose.assert_equal(len(results), 5)
    nose.assert_in('currently', results[0]['subtitle'])
    nose.assert_not_in('currently', results[1]['subtitle'])
def test_show_versions():
    """should show all versions if no value is given"""
    results = yvs.get_result_list('version')
    nose.assert_greater(len(results), 10)
def test_show_versions():
    """should show all versions if no value is given"""
    results = yvs.get_result_list('version')
    nose.assert_greater(len(results), 10)
def test_show_refformats():
    """should show all refformats if no value is given"""
    results = yvs.get_result_list('refformat')
    nose.assert_greater(len(results), 3)
def test_filter_languages():
    """should filter available languages if value is given"""
    results = yvs.get_result_list('language en')
    nose.assert_equal(len(results), 1)
    nose.assert_equal(results[0]['title'], 'English')
    nose.assert_equal(results[0]['arg'], 'language:en')