aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Jon Bernard <jbernard@tuxion.com> 2016-01-19 09:55:36 -0500
committerGravatar Jon Bernard <jbernard@tuxion.com> 2016-01-19 09:55:36 -0500
commitad1487517467b4866b8e0572a9cf13604dcd0f2a (patch)
treeb99f3e49582138fcb0813c94ed669f2f2dd6f3f9
parentd3a5aa4cdd022e0fc336b66177b9eee7c2675485 (diff)
downloaddotfiles-ad1487517467b4866b8e0572a9cf13604dcd0f2a.tar.gz
dotfiles-ad1487517467b4866b8e0572a9cf13604dcd0f2a.tar.bz2
dotfiles-ad1487517467b4866b8e0572a9cf13604dcd0f2a.zip
Finish tests for dotfile class
-rw-r--r--tests/test_dotfile.py186
1 files changed, 121 insertions, 65 deletions
diff --git a/tests/test_dotfile.py b/tests/test_dotfile.py
index 0e09654..a913743 100644
--- a/tests/test_dotfile.py
+++ b/tests/test_dotfile.py
@@ -1,89 +1,145 @@
+import py
import pytest
from dotfiles.dotfile import Dotfile
-from dotfiles.exceptions import IsSymlink
+from dotfiles.exceptions import IsSymlink, NotASymlink
+from dotfiles.exceptions import TargetExists, TargetMissing, Exists
-class TestDotfile(object):
+def test_str(repo, home):
+ dotfile = Dotfile(home.join('.a'), repo.join('.b'))
+ assert str(dotfile) == home.join('.a')
- def test_state_error(self, repo, home):
- dotfile = Dotfile(home.join('.vimrc'), repo.join('vimrc'))
- assert dotfile.state == 'error'
- def test_state_missing(self, repo, home):
- dotfile = Dotfile(home.join('.vimrc'), repo.ensure('vimrc'))
- assert dotfile.state == 'missing'
+def test_short_name(repo, home):
+ dotfile = Dotfile(home.join('.foo'), repo.join('.foo'))
+ assert dotfile.name == home.join('.foo')
+ assert dotfile.short_name(home) == '.foo'
- def test_state_conflict(self, repo, home):
- dotfile = Dotfile(home.ensure('.vimrc'), repo.ensure('vimrc'))
- assert dotfile.state == 'conflict'
- def test_state_ok(self, repo, home):
- name = home.join('.vimrc')
- target = repo.ensure('vimrc')
+def test_state_error(repo, home):
+ dotfile = Dotfile(home.join('.vimrc'), repo.join('.vimrc'))
+ assert dotfile.state == 'error'
- dotfile = Dotfile(name, target)
- name.mksymlinkto(target)
- assert dotfile.state == 'ok'
- name.remove()
- assert dotfile.state == 'missing'
+def test_state_missing(repo, home):
+ dotfile = Dotfile(home.join('.vimrc'), repo.ensure('.vimrc'))
+ assert dotfile.state == 'missing'
- @pytest.mark.parametrize('times', range(1, 4))
- def test_add(self, repo, home, times):
- name = home.ensure('.vimrc')
- target = repo.join('vimrc')
- Dotfile(name, target).add()
+def test_state_conflict(repo, home):
+ dotfile = Dotfile(home.ensure('.vimrc'), repo.ensure('.vimrc'))
+ assert dotfile.state == 'conflict'
- assert target.check(file=1, link=0)
- assert name.check(file=1, link=1)
- assert name.samefile(target)
- for x in range(2, times):
- with pytest.raises(IsSymlink):
- Dotfile(name, target).add()
- assert target.check(file=1, link=0)
- assert name.check(file=1, link=1)
- assert name.samefile(target)
+def test_state_ok(repo, home):
+ name = home.join('.vimrc')
+ target = repo.ensure('vimrc')
- @pytest.mark.parametrize('times', range(1, 4))
- def test_remove(self, repo, home, times):
- name = home.join('.vimrc')
- target = repo.ensure('vimrc')
+ dotfile = Dotfile(name, target)
+ name.mksymlinkto(target)
+ assert dotfile.state == 'ok'
- name.mksymlinkto(target)
- Dotfile(name, target).remove()
+ name.remove()
+ assert dotfile.state == 'missing'
- assert not target.check()
- assert name.check(file=1, link=0)
- for x in range(2, times):
- with pytest.raises(Exception):
- # TODO: verify exception type once those exists
- Dotfile(name, target).remove()
- assert not target.check()
- assert name.check(file=1, link=0)
+@pytest.mark.parametrize('path', ['.foo', '.foo/bar/baz'])
+def test_add(repo, home, path):
+ name = home.ensure(path)
+ target = repo.ensure(path)
+ dotfile = Dotfile(name, target)
- @pytest.mark.parametrize('times', range(1, 4))
- def test_link(self, repo, home, times):
- name = home.join('.vimrc')
- target = repo.ensure('vimrc')
+ with pytest.raises(TargetExists):
+ dotfile.add()
- Dotfile(name, target).link()
+ target.remove()
+ dotfile.add()
- assert target.check(file=1, link=0)
- assert name.check(file=1, link=1)
- assert name.samefile(target)
+ assert target.check(file=1, link=0)
+ assert name.check(file=1, link=1)
+ assert name.samefile(target)
- for x in range(2, times):
- with pytest.raises(Exception):
- # TODO: verify exception type once those exists
- Dotfile(name, target).link()
- assert target.check(file=1, link=0)
- assert name.check(file=1, link=1)
- assert name.samefile(target)
+ with pytest.raises(IsSymlink):
+ dotfile.add()
- @pytest.mark.xfail(reason='TODO')
- def test_unlink(self):
- assert False
+ assert target.check(file=1, link=0)
+ assert name.check(file=1, link=1)
+ assert name.samefile(target)
+
+
+@pytest.mark.parametrize('path', ['.foo', '.foo/bar/baz'])
+def test_remove(repo, home, path):
+ name = home.join(path)
+ target = repo.join(path)
+ dotfile = Dotfile(name, target)
+
+ py.path.local(name.dirname).ensure_dir()
+ name.mksymlinkto(target)
+
+ with pytest.raises(TargetMissing):
+ dotfile.remove()
+
+ target.ensure()
+ dotfile.remove()
+
+ assert target.check(exists=0)
+ assert name.check(file=1, link=0)
+
+ with pytest.raises(NotASymlink):
+ dotfile.remove()
+
+ assert target.check(exists=0)
+ assert name.check(file=1, link=0)
+
+
+@pytest.mark.parametrize('path', ['.foo', '.foo/bar/baz'])
+def test_link(repo, home, path):
+ name = home.join(path)
+ target = repo.join(path)
+ dotfile = Dotfile(name, target)
+
+ with pytest.raises(TargetMissing):
+ dotfile.link()
+
+ target.ensure()
+ dotfile.link()
+
+ assert target.check(file=1, link=0)
+ assert name.check(file=1, link=1)
+ assert name.samefile(target)
+
+ with pytest.raises(Exists):
+ dotfile.link()
+
+ assert target.check(file=1, link=0)
+ assert name.check(file=1, link=1)
+ assert name.samefile(target)
+
+
+@pytest.mark.parametrize('path', ['.foo', '.foo/bar/baz'])
+def test_unlink(repo, home, path):
+ name = home.join(path)
+ target = repo.join(path)
+ dotfile = Dotfile(name, target)
+
+ with pytest.raises(NotASymlink):
+ dotfile.unlink()
+
+ py.path.local(name.dirname).ensure_dir()
+ name.mksymlinkto(target)
+
+ with pytest.raises(TargetMissing):
+ dotfile.unlink()
+
+ target.ensure()
+ dotfile.unlink()
+
+ assert target.check(file=1, link=0)
+ assert name.check(exists=0)
+
+ with pytest.raises(NotASymlink):
+ dotfile.unlink()
+
+ assert target.check(file=1, link=0)
+ assert name.check(exists=0)