Skip to content

Commit

Permalink
Add unit test to document change button
Browse files Browse the repository at this point in the history
Fixes #428
  • Loading branch information
deeplow committed Jun 12, 2023
1 parent 6392344 commit f05cb1c
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 2 deletions.
4 changes: 3 additions & 1 deletion dangerzone/gui/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,9 @@ def dangerous_doc_button_clicked(self) -> None:
self.file_dialog.setDirectory(first_doc_dir)

if self.file_dialog.exec():
documents = [Document(filename) for filename in self.file_dialog.selectedFiles()]
documents = [
Document(filename) for filename in self.file_dialog.selectedFiles()
]
self.documents_selected.emit(documents)
else:
# No files selected
Expand Down
21 changes: 20 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ pytest-mock = "^3.10.0"
pytest-xdist = "^2.5.0"
pytest-cov = "^3.0.0"
strip-ansi = "*"
pytest-qt = "^4.2.0"

[build-system]
requires = ["poetry>=1.1.4"]
Expand Down
6 changes: 6 additions & 0 deletions tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

SAMPLE_DIRECTORY = "test_docs"
BASIC_SAMPLE = "sample-pdf.pdf"
BASIC_SAMPLE2 = "sample-doc.doc"
test_docs_dir = Path(__file__).parent.joinpath(SAMPLE_DIRECTORY)
test_docs = [
p
Expand All @@ -30,6 +31,11 @@ def sample_doc() -> str:
return str(test_docs_dir.joinpath(BASIC_SAMPLE))


@pytest.fixture
def sample_doc2() -> str:
return str(test_docs_dir.joinpath(BASIC_SAMPLE2))


@pytest.fixture
def unreadable_pdf(tmp_path: Path) -> str:
file_path = tmp_path / "document.pdf"
Expand Down
Empty file added tests/gui/__init__.py
Empty file.
80 changes: 80 additions & 0 deletions tests/gui/test_main_window.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import pytest
from pytest_mock import MockerFixture
from pytestqt.qtbot import QtBot

from dangerzone.gui.main_window import *

from .. import sample_doc, sample_doc2

# FIXME: See https://github.com/freedomofpress/dangerzone/issues/320 for more details.
if typing.TYPE_CHECKING:
from PySide2 import QtCore
else:
try:
from PySide6 import QtCore, QtGui, QtWidgets
except ImportError:
from PySide2 import QtCore, QtGui, QtWidgets

##
## Widget Fixtures
##


@pytest.fixture
def content_widget(qtbot: QtBot, mocker: MockerFixture) -> QtWidgets.QWidget:
# Setup
mock_app = mocker.MagicMock()
dummy = mocker.MagicMock()
dz = DangerzoneGui(mock_app, dummy)
w = ContentWidget(dz)
qtbot.addWidget(w)
return w


##
## Document Selection tests
##


def test_change_document_button(
content_widget: ContentWidget,
qtbot: QtBot,
mocker: MockerFixture,
sample_doc: str,
sample_doc2: str,
) -> None:
# Setup first doc selection
file_dialog_mock = mocker.MagicMock()
file_dialog_mock.selectedFiles.return_value = (sample_doc,)
content_widget.doc_selection_widget.file_dialog = file_dialog_mock

# Select first file
with qtbot.waitSignal(content_widget.documents_added):
qtbot.mouseClick(
content_widget.doc_selection_widget.dangerous_doc_button,
QtCore.Qt.MouseButton.LeftButton,
)
file_dialog_mock.accept()

# Setup doc change
file_dialog_mock.selectedFiles.return_value = (sample_doc2,)

# When clicking on "select docs" button
with qtbot.waitSignal(content_widget.documents_added):
qtbot.mouseClick(
content_widget.settings_widget.change_selection_button,
QtCore.Qt.MouseButton.LeftButton,
)
file_dialog_mock.accept()

# Then two dialogs should have been open
assert file_dialog_mock.exec.call_count is 2
assert file_dialog_mock.selectedFiles.call_count is 2

# Then the final document should be only the second one
docs = [
doc.input_filename
for doc in content_widget.dangerzone.get_unconverted_documents()
]
assert len(docs) is 1
assert docs[0] == sample_doc2

0 comments on commit f05cb1c

Please sign in to comment.