Example #1
0
def test_search_config_validate_invalid_city(keywords, province_or_state,
                                             locale, providers, in_city):
    cfg = SearchConfig(keywords,
                       province_or_state,
                       locale,
                       providers,
                       city=in_city)

    with pytest.raises(AssertionError, match="City not set"):
        cfg.validate()
Example #2
0
def test_search_config_validate_remoteness(keywords, province_or_state, locale,
                                           providers, in_city, in_remoteness):
    cfg = SearchConfig(keywords,
                       province_or_state,
                       locale,
                       providers,
                       city=in_city,
                       remoteness=in_remoteness)

    with pytest.raises(AssertionError, match="Remoteness is UNKNOWN!"):
        cfg.validate()
Example #3
0
def test_search_config_validate_domain(keywords, province_or_state, locale,
                                       providers, in_city):
    cfg = SearchConfig(keywords,
                       province_or_state,
                       locale,
                       providers,
                       city=in_city)

    # We have to force an invalid domain because the constructor ensures that it is valid.
    cfg.domain = None

    with pytest.raises(AssertionError, match="Domain not set"):
        cfg.validate()
Example #4
0
def test_search_config_validate_invalid_max_posting_days(
        keywords, province_or_state, locale, providers, in_city,
        in_max_listing_days):
    cfg = SearchConfig(keywords,
                       province_or_state,
                       locale,
                       providers,
                       city=in_city,
                       max_listing_days=in_max_listing_days)

    with pytest.raises(AssertionError,
                       match="Cannot set max posting days < 1"):
        cfg.validate()
Example #5
0
def get_config_manager(config: Dict[str, Any]) -> JobFunnelConfigManager:
    """Method to build JobFunnelConfigManager from a config dictionary
    """

    # Build JobFunnelConfigManager
    search_cfg = SearchConfig(
        keywords=config['search']['keywords'],
        province_or_state=config['search']['province_or_state'],
        city=config['search']['city'],
        distance_radius=config['search']['radius'],
        return_similar_results=config['search']['similar_results'],
        max_listing_days=config['search']['max_listing_days'],
        blocked_company_names=config['search']['company_block_list'],
        locale=Locale[config['search']['locale']],
        providers=[Provider[p] for p in config['search']['providers']],
        remoteness=Remoteness[config['search']['remoteness']],
    )

    delay_cfg = DelayConfig(
        max_duration=config['delay']['max_duration'],
        min_duration=config['delay']['min_duration'],
        algorithm=DelayAlgorithm[config['delay']['algorithm']],
        random=config['delay']['random'],
        converge=config['delay']['converging'],
    )

    if config.get('proxy'):
        proxy_cfg = ProxyConfig(
            protocol=config['proxy']['protocol'],
            ip_address=config['proxy']['ip'],
            port=config['proxy']['port'],
        )
    else:
        proxy_cfg = None

    funnel_cfg_mgr = JobFunnelConfigManager(
        master_csv_file=config['master_csv_file'],
        user_block_list_file=config['block_list_file'],
        duplicates_list_file=config['duplicates_list_file'],
        cache_folder=config['cache_folder'],
        log_file=config['log_file'],
        log_level=config['log_level'],
        no_scrape=config['no_scrape'],
        search_config=search_cfg,
        delay_config=delay_cfg,
        proxy_config=proxy_cfg,
    )

    return funnel_cfg_mgr
Example #6
0
def test_search_config_init(mocker, locale, domain, exp_domain):
    """Make sure the init functions as we expect wrt to domain selection
    """
    # FUT
    if not locale:
        # test our error
        with pytest.raises(ValueError, match=r"Unknown domain for locale.*"):
            cfg = SearchConfig(
                keywords=mocker.Mock(),
                province_or_state=mocker.Mock(),
                locale=-1,  # AKA an unknown Enum entry to Locale
                providers=mocker.Mock(),
            )
    else:
        cfg = SearchConfig(
            keywords=mocker.Mock(),
            province_or_state=mocker.Mock(),
            locale=locale,
            domain=domain,
            providers=mocker.Mock(),
        )

        # Assertions
        assert cfg.domain == exp_domain
Example #7
0
def test_search_config_query_string(mocker, keywords, exp_query_str):
    """Test that search config can build keyword query string correctly.
    """
    cfg = SearchConfig(
        keywords=keywords,
        province_or_state=mocker.Mock(),
        locale=Locale.CANADA_FRENCH,
        providers=mocker.Mock(),
    )

    # FUT
    query_str = cfg.query_string

    # Assertions
    assert query_str == exp_query_str