def test_diff_should_update(fake_dist, from_line): installed = [fake_dist('django==1.7')] reqs = [from_line('django==1.8')] to_install, to_uninstall = diff(reqs, installed) assert to_install == {'django==1.8'} assert to_uninstall == set()
def test_diff_should_install(from_line): installed = [] # empty env reqs = [from_line('django==1.8')] to_install, to_uninstall = diff(reqs, installed) assert to_install == {'django==1.8'} assert to_uninstall == set()
def test_diff_should_uninstall(fake_dist): installed = [fake_dist('django==1.8')] reqs = [] to_install, to_uninstall = diff(reqs, installed) assert to_install == set() assert to_uninstall == {'django'} # no version spec when uninstalling
def test_diff_leave_prequ_alone(fake_dist, from_line): # Suppose an env contains Django, and prequ itself (including all of # its dependencies) installed = [ fake_dist('django==1.7'), fake_dist('first==2.0.1'), fake_dist('prequ==1.1.1', [ 'click>=4', 'first', 'six', ]), fake_dist('six==1.9.0'), fake_dist('click==4.1'), fake_dist('foobar==0.3.6'), ] # Then this Django-only requirement should keep pip around (i.e. NOT # uninstall it), but uninstall first reqs = [ from_line('django==1.7'), ] to_install, to_uninstall = diff(reqs, installed) assert to_install == set() assert to_uninstall == {'foobar'}
def test_diff_should_do_nothing(): installed = [] # empty env reqs = [] # no requirements to_install, to_uninstall = diff(reqs, installed) assert to_install == set() assert to_uninstall == set()
def test_diff_should_not_uninstall(fake_dist): ignored = ('pip==7.1.0', 'prequ==1.0.0', 'pip-review==1.1.1', 'pkg-resources==0.0.0', 'setuptools==34.0.0', 'wheel==0.29.0') installed = [fake_dist(pkg) for pkg in ignored] reqs = [] to_uninstall = diff(reqs, installed)[1] assert to_uninstall == set()
def test_diff_should_uninstall_with_markers(fake_dist, from_line): installed = [fake_dist('subprocess32==3.2.7')] reqs = [from_line("subprocess32==3.2.7 ; python_version=='2.7'")] to_install, to_uninstall = diff(reqs, installed) assert to_install == set() assert to_uninstall == (set() if sys.version.startswith('2.7') else {'subprocess32'})
def test_diff_should_install_with_markers(from_line): installed = [] reqs = [from_line("subprocess32==3.2.7 ; python_version=='2.7'")] to_install, to_uninstall = diff(reqs, installed) assert { str(x.req) for x in to_install } == ({'subprocess32==3.2.7'} if sys.version.startswith('2.7') else set()) assert to_uninstall == set()
def test_diff_leave_packaging_packages_alone(fake_dist, from_line): # Suppose an env contains Django, and pip itself installed = [ fake_dist('django==1.7'), fake_dist('first==2.0.1'), fake_dist('pip==7.1.0'), ] # Then this Django-only requirement should keep pip around (i.e. NOT # uninstall it), but uninstall first reqs = [ from_line('django==1.7'), ] to_install, to_uninstall = diff(reqs, installed) assert to_install == set() assert to_uninstall == {'first'}
def test_diff_with_editable_without_changes(fake_dist, from_editable, from_line, small_fake_package_dir): installed = [ fake_dist('small-fake-with-deps==0.1'), fake_dist('six==1.10.0'), ] reqs = [ from_editable(small_fake_package_dir), from_line('six==1.10.0'), ] assert reqs[0].req is None, "Editable doesn't have Requirement data yet" to_install, to_uninstall = diff(reqs, installed) assert reqs[0].req is not None, "Requirement data has been filled" pinned_ver = get_ireq_version(reqs[0]) assert installed[0].version == pinned_ver assert to_uninstall == set(), "No packages should be uninstalled" assert to_install == set(), "No packages should be (re)installed"
def test_diff_with_editable(fake_dist, from_editable, from_line, small_fake_package_dir): installed = [ fake_dist('small-fake-with-deps==0.0.1'), fake_dist('six==1.10.0'), ] reqs = [ from_editable(small_fake_package_dir), from_line('six==1.10.0'), ] to_install, to_uninstall = diff(reqs, installed) assert to_uninstall == set(), "No packages should be uninstalled" # The editable should be upgraded, since the installed version # (0.0.1) was different than the version specified in setup.py of # the editable package (0.1) assert len(to_install) == 1 package = list(to_install)[0] assert package.editable assert str(package.link) == path_to_url(small_fake_package_dir)