def test_match_due_to_options(venvscache): reqs = {'pypi': get_req('dep == 5')} interpreter = 'pythonX.Y' options = {'foo': 'bar'} venv1 = json.dumps({ 'metadata': 'venv1', 'installed': { 'pypi': { 'dep': '5' } }, 'interpreter': 'pythonX.Y', 'options': {} }) venv2 = json.dumps({ 'metadata': 'venv2', 'installed': { 'pypi': { 'dep': '5' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) resp = venvscache._select([venv1, venv2], reqs, interpreter, uuid='', options=options) assert resp == "venv2"
def test_match_mixed_multiple(venvscache): reqs = { 'vcs': [parsing.VCSDependency('url1'), parsing.VCSDependency('url2')], 'pypi': get_req(['dep1 == 5', 'dep2']) } interpreter = 'pythonX.Y' options = {'foo': 'bar'} venv = json.dumps({ 'metadata': 'foobar', 'installed': { 'vcs': { 'url1': None, 'url2': None }, 'pypi': { 'dep1': '5', 'dep2': '7' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) resp = venvscache._select([venv], reqs, interpreter, uuid='', options=options) assert resp == 'foobar'
def test_match_mixed_single(venvscache): reqs = { 'vcs': [parsing.VCSDependency('someurl')], 'pypi': get_req('dep == 5') } interpreter = 'pythonX.Y' options = {'foo': 'bar'} venv1 = json.dumps({ 'metadata': 'foobar1', 'installed': { 'vcs': { 'someurl': None }, 'pypi': { 'dep': '5' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) venv2 = json.dumps({ 'metadata': 'foobar2', 'installed': { 'pypi': { 'dep': '5' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) venv3 = json.dumps({ 'metadata': 'foobar3', 'installed': { 'vcs': { 'someurl': None } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) resp = venvscache._select([venv1, venv2, venv3], reqs, interpreter, uuid='', options=options) assert resp == 'foobar1'
def test_multiple_match_bigger_version(venvscache): reqs = {'pypi': get_req('dep')} interpreter = 'pythonX.Y' options = {'foo': 'bar'} venv1 = json.dumps({ 'metadata': 'venv1', 'installed': { 'pypi': { 'dep': '3' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) venv2 = json.dumps({ 'metadata': 'venv2', 'installed': { 'pypi': { 'dep': '7' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) venv3 = json.dumps({ 'metadata': 'venv3', 'installed': { 'pypi': { 'dep': '5' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) resp = venvscache._select([venv1, venv2, venv3], reqs, interpreter, uuid='', options=options) # matches venv2 because it has the bigger version for 'dep' (even if it's not the # latest virtualenv created) assert resp == 'venv2'
def test_simple_match_empty_options(venvscache): reqs = {'pypi': get_req('dep == 5')} interpreter = 'pythonX.Y' options = {} venv = json.dumps({ 'metadata': 'foobar', 'installed': { 'pypi': { 'dep': '5' } }, 'interpreter': 'pythonX.Y', 'options': {} }) resp = venvscache._select([venv], reqs, interpreter, uuid='', options=options) assert resp == "foobar"
def test_nomatch_pypi_dependency(venvscache): reqs = {'pypi': get_req('dep1 == 5')} interpreter = 'pythonX.Y' options = {'foo': 'bar'} venv = json.dumps({ 'metadata': 'foobar', 'installed': { 'pypi': { 'dep2': '5' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) resp = venvscache._select([venv], reqs, interpreter, uuid='', options=options) resp is None
def test_match_noversion(venvscache): reqs = {'pypi': get_req('dep')} interpreter = 'pythonX.Y' options = {'foo': 'bar'} venv = json.dumps({ 'metadata': 'foobar', 'installed': { 'pypi': { 'dep': '5' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) resp = venvscache._select([venv], reqs, interpreter, uuid='', options=options) assert resp == 'foobar'
def test_check_versions(venvscache, req, installed, expected): """The comparison in the selection.""" reqs = {"pypi": get_req("dep" + req)} interpreter = "pythonX.Y" options = {"foo": "bar"} venv = json.dumps({ "metadata": "ok", "installed": { "pypi": { "dep": installed } }, "interpreter": "pythonX.Y", "options": { "foo": "bar" } }) resp = venvscache._select([venv], reqs, interpreter, uuid="", options=options) assert resp == expected
def test_same_quantity_different_deps(venvscache): reqs = {'pypi': get_req(['dep1', 'dep2'])} interpreter = 'pythonX.Y' options = {'foo': 'bar'} venv = json.dumps({ 'metadata': 'foobar', 'installed': { 'pypi': { 'dep1': '5', 'dep3': '2' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) resp = venvscache._select([venv], reqs, interpreter, uuid='', options=options) assert resp is None
def test_not_too_crowded(venvscache): reqs = {'pypi': get_req(['dep1'])} interpreter = 'pythonX.Y' options = {'foo': 'bar'} venv = json.dumps({ 'metadata': 'foobar', 'installed': { 'pypi': { 'dep1': '5', 'dep2': '2' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) resp = venvscache._select([venv], reqs, interpreter, uuid='', options=options) assert resp is None
def test_multiple_deps_ok(venvscache): reqs = {'pypi': get_req(['dep1 == 5', 'dep2 == 7'])} interpreter = 'pythonX.Y' options = {'foo': 'bar'} venv = json.dumps({ 'metadata': 'foobar', 'installed': { 'pypi': { 'dep1': '5', 'dep2': '7' } }, 'interpreter': 'pythonX.Y', 'options': { 'foo': 'bar' } }) resp = venvscache._select([venv], reqs, interpreter, uuid='', options=options) assert resp == 'foobar'