示例#1
0
def test_loader_inserts_food_element(  # noqa
    clirunner, monkeypatch, tmpdir, listfile):
    # Mocking for Nurungji-only food list
    monkeypatch.setattr(
        koreafood.requests, 'get',
        lambda _: MockHTTPResponse(listfile.read()))
    monkeypatch.setattr(
        koreafood.requests, 'Session',
        lambda: MockHTTPSession(post=_mock_foodlist_analysis_page))

    food = koreafood.get_food_list().next()
    monkeypatch.setattr(
        koreafood, 'get_food_list', lambda: [food])

    # Trigger SUT command
    url = 'sqlite:///'+tmpdir.join('new.db').strpath
    res = clirunner.invoke(loader, [url])

    # Test result
    assert res.exit_code == 0
    session = sessionmaker(create_engine(url))()

    mfood = session.query(koreafood_model.Food).one()
    assert mfood.name == food.name
    assert mfood.category_big == food.category_big
    assert mfood.category_small == food.category_small
    assert len(mfood.aliments) == 1
示例#2
0
def test_loader_inserts_food_element(  # noqa
        clirunner, monkeypatch, tmpdir, listfile):
    # Mocking for Nurungji-only food list
    monkeypatch.setattr(koreafood.requests, 'get',
                        lambda _: MockHTTPResponse(listfile.read()))
    monkeypatch.setattr(
        koreafood.requests, 'Session',
        lambda: MockHTTPSession(post=_mock_foodlist_analysis_page))

    food = koreafood.get_food_list().next()
    monkeypatch.setattr(koreafood, 'get_food_list', lambda: [food])

    # Trigger SUT command
    url = 'sqlite:///' + tmpdir.join('new.db').strpath
    res = clirunner.invoke(loader, [url])

    # Test result
    assert res.exit_code == 0
    session = sessionmaker(create_engine(url))()

    mfood = session.query(koreafood_model.Food).one()
    assert mfood.name == food.name
    assert mfood.category_big == food.category_big
    assert mfood.category_small == food.category_small
    assert len(mfood.aliments) == 1
示例#3
0
def test_foodlist_monkeypatch_work(monkeypatch):
    '''
    Test if koreafood.get_food_list() calls monkeypatched
    requests.get() method.
    '''

    monkeypatch.setattr(koreafood.requests, 'get', trigger_error_func)

    l = koreafood.get_food_list()
    with pytest.raises(AttributeError):
        l.next()
示例#4
0
def test_foodlist_listfile_food_parsed(monkeypatch, listfile):
    monkeypatch.setattr(
        koreafood.requests, 'get',
        lambda _: MockHTTPResponse(listfile.read()))
    monkeypatch.setattr(
        koreafood, 'get_food_analysis',
        lambda _: {})  # alignment parse ignored

    food = koreafood.get_food_list().next()
    assert food.category_big == u'밥류'
    assert food.category_small == u'쌀밥'
    assert food.name == u'누룽지'
示例#5
0
def test_foodlist_break_if_no_more_list(monkeypatch, listfile):
    monkeypatch.setattr(
        koreafood.requests, 'get',
        lambda _: MockHTTPResponse(listfile.read()))

    l = koreafood.get_food_list()
    for n in range(10):
        l.next()  # traverse all(10) list elements

    monkeypatch.setattr(
        koreafood.requests, 'get',
        lambda _: MockHTTPResponse(u'<html></html>'))

    # returns nothing, iterator should be stopped
    with pytest.raises(StopIteration):
        l.next()
示例#6
0
def test_foodlist_listfile_next_called(monkeypatch, listfile):
    monkeypatch.setattr(
        koreafood.requests, 'get',
        lambda _: MockHTTPResponse(listfile.read()))

    l = koreafood.get_food_list()
    l.next()  # 1 called (9 items remained)

    monkeypatch.setattr(
        koreafood.requests, 'get',
        lambda _: trigger_error_func)

    for n in range(9):
        l.next()  # consume all lists

    with pytest.raises(AttributeError):
        l.next()  # requets next page
示例#7
0
def test_foodlist_analysis_parsed(monkeypatch):
    monkeypatch.setattr(
        koreafood.requests, 'Session',
        lambda: MockHTTPSession(post=_mock_foodlist_analysis_page))

    nurungji = koreafood.get_food_list().next()
    expect_aliment = {
        u'쌀,멥쌀,논벼,백미,(국내산),일반형,일품': [
            50, 185, 5.6, 2.6, 0.2, 41.3, 0.2, 0.2, 3, 45.5, 0.6,
            7.5, 52.5, 0, 0, 0, 0.1, 0.015, 0.5, 0
            ]
        }

    for k in nurungji.aliment:
        assert k in nurungji.aliment
        assert len(nurungji.aliment[k]) == len(expect_aliment[k])
        for a, b in zip(nurungji.aliment[k], expect_aliment[k]):
            assert float(a) == float(b)
示例#8
0
def test_foodlist_analysis_exists(monkeypatch):
    monkeypatch.setattr(
        koreafood.requests, 'Session',
        lambda: MockHTTPSession(post=_mock_foodlist_analysis_page))

    koreafood.get_food_list().next()