sessions: Add some more tests.
This commit is contained in:
parent
201f2f67d3
commit
a8d549cb24
@ -20,6 +20,7 @@
|
|||||||
"""Tests for qutebrowser.misc.sessions."""
|
"""Tests for qutebrowser.misc.sessions."""
|
||||||
|
|
||||||
import textwrap
|
import textwrap
|
||||||
|
import logging
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import yaml
|
import yaml
|
||||||
@ -30,6 +31,7 @@ from qutebrowser.misc import sessions
|
|||||||
from qutebrowser.utils import objreg, qtutils
|
from qutebrowser.utils import objreg, qtutils
|
||||||
from qutebrowser.browser import tabhistory
|
from qutebrowser.browser import tabhistory
|
||||||
from qutebrowser.browser.tabhistory import TabHistoryItem as Item
|
from qutebrowser.browser.tabhistory import TabHistoryItem as Item
|
||||||
|
from qutebrowser.commands import cmdexc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -584,3 +586,101 @@ class TestSave:
|
|||||||
sess_man.save(str(session_path))
|
sess_man.save(str(session_path))
|
||||||
data = session_path.read_text('utf-8')
|
data = session_path.read_text('utf-8')
|
||||||
assert data == textwrap.dedent(expected.strip('\n'))
|
assert data == textwrap.dedent(expected.strip('\n'))
|
||||||
|
|
||||||
|
|
||||||
|
class TestDelete:
|
||||||
|
|
||||||
|
def test_existing(self, sess_man, tmpdir):
|
||||||
|
sess = tmpdir / 'foo.yml'
|
||||||
|
sess.ensure()
|
||||||
|
sess_man.delete(str(sess))
|
||||||
|
assert not tmpdir.listdir()
|
||||||
|
|
||||||
|
def test_update_completion_signal(self, sess_man, qtbot, tmpdir):
|
||||||
|
sess = tmpdir / 'foo.yml'
|
||||||
|
sess.ensure()
|
||||||
|
|
||||||
|
blocker = qtbot.waitSignal(sess_man.update_completion)
|
||||||
|
sess_man.delete(str(sess))
|
||||||
|
assert blocker.signal_triggered
|
||||||
|
|
||||||
|
def test_not_existing(self, sess_man, qtbot, tmpdir):
|
||||||
|
sess = tmpdir / 'foo.yml'
|
||||||
|
|
||||||
|
with pytest.raises(sessions.SessionError):
|
||||||
|
sess_man.delete(str(sess))
|
||||||
|
|
||||||
|
|
||||||
|
class TestListSessions:
|
||||||
|
|
||||||
|
def test_no_base_path(self, sess_man):
|
||||||
|
assert not sess_man.list_sessions()
|
||||||
|
|
||||||
|
def test_no_sessions(self, tmpdir):
|
||||||
|
sess_man = sessions.SessionManager(str(tmpdir))
|
||||||
|
assert not sess_man.list_sessions()
|
||||||
|
|
||||||
|
def test_with_sessions(self, tmpdir):
|
||||||
|
(tmpdir / 'foo.yml').ensure()
|
||||||
|
(tmpdir / 'bar.yml').ensure()
|
||||||
|
sess_man = sessions.SessionManager(str(tmpdir))
|
||||||
|
assert sorted(sess_man.list_sessions()) == ['bar', 'foo']
|
||||||
|
|
||||||
|
def test_with_other_files(self, tmpdir):
|
||||||
|
(tmpdir / 'foo.yml').ensure()
|
||||||
|
(tmpdir / 'bar.html').ensure()
|
||||||
|
sess_man = sessions.SessionManager(str(tmpdir))
|
||||||
|
assert sess_man.list_sessions() == ['foo']
|
||||||
|
|
||||||
|
|
||||||
|
class TestSessionDelete:
|
||||||
|
|
||||||
|
def test_internal_without_force(self, tmpdir):
|
||||||
|
sess_man = sessions.SessionManager(str(tmpdir))
|
||||||
|
sess_file = tmpdir / '_foo.yml'
|
||||||
|
sess_file.ensure()
|
||||||
|
|
||||||
|
with pytest.raises(cmdexc.CommandError) as excinfo:
|
||||||
|
sess_man.session_delete('_foo')
|
||||||
|
|
||||||
|
expected_text = ("_foo is an internal session, use --force to "
|
||||||
|
"delete anyways.")
|
||||||
|
assert str(excinfo.value) == expected_text
|
||||||
|
assert sess_file.exists()
|
||||||
|
|
||||||
|
def test_internal_with_force(self, tmpdir):
|
||||||
|
sess_man = sessions.SessionManager(str(tmpdir))
|
||||||
|
sess_file = tmpdir / '_foo.yml'
|
||||||
|
sess_file.ensure()
|
||||||
|
sess_man.session_delete('_foo', force=True)
|
||||||
|
assert not tmpdir.listdir()
|
||||||
|
|
||||||
|
def test_normal_delete(self, tmpdir):
|
||||||
|
sess_man = sessions.SessionManager(str(tmpdir))
|
||||||
|
sess_file = tmpdir / 'foo.yml'
|
||||||
|
sess_file.ensure()
|
||||||
|
sess_man.session_delete('foo')
|
||||||
|
assert not tmpdir.listdir()
|
||||||
|
|
||||||
|
def test_session_not_found(self, tmpdir):
|
||||||
|
sess_man = sessions.SessionManager(str(tmpdir))
|
||||||
|
|
||||||
|
with pytest.raises(cmdexc.CommandError) as excinfo:
|
||||||
|
sess_man.session_delete('foo')
|
||||||
|
|
||||||
|
assert str(excinfo.value) == "Session foo not found!"
|
||||||
|
|
||||||
|
@pytest.mark.posix
|
||||||
|
def test_deletion_error(self, caplog, tmpdir):
|
||||||
|
sess_man = sessions.SessionManager(str(tmpdir))
|
||||||
|
(tmpdir / 'foo.yml').ensure()
|
||||||
|
tmpdir.chmod(0o555) # unwritable
|
||||||
|
|
||||||
|
with pytest.raises(cmdexc.CommandError) as excinfo:
|
||||||
|
with caplog.atLevel(logging.ERROR):
|
||||||
|
sess_man.session_delete('foo')
|
||||||
|
|
||||||
|
assert str(excinfo.value).startswith('Error while deleting session: ')
|
||||||
|
records = caplog.records()
|
||||||
|
assert len(records) == 1
|
||||||
|
assert records[0].message == 'Error while deleting session!'
|
||||||
|
Loading…
Reference in New Issue
Block a user