Fix doc merge dialog test

This commit is contained in:
Veronica Berglyd Olsen
2022-10-09 22:47:36 +02:00
parent 02dc7f5fe0
commit 428dce3e6e
+43 -125
View File
@@ -19,17 +19,14 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
import os
import pytest import pytest
from mock import causeOSError from tools import buildTestProject
from tools import getGuiItem, readFile, writeFile, buildTestProject
from PyQt5.QtWidgets import QAction, QMessageBox from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMessageBox
from novelwriter.enum import nwItemType, nwWidget from novelwriter.dialogs import GuiDocMerge
from novelwriter.dialogs import GuiDocMerge, GuiEditLabel
from novelwriter.core.tree import NWTree
@pytest.mark.gui @pytest.mark.gui
@@ -39,142 +36,63 @@ def testDlgMerge_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
# Block message box # Block message box
monkeypatch.setattr(QMessageBox, "question", lambda *a: QMessageBox.Yes) monkeypatch.setattr(QMessageBox, "question", lambda *a: QMessageBox.Yes)
monkeypatch.setattr(QMessageBox, "critical", lambda *a: QMessageBox.Ok) monkeypatch.setattr(QMessageBox, "critical", lambda *a: QMessageBox.Ok)
monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True))
# Create a new project # Create a new project
buildTestProject(nwGUI, fncProj) buildTestProject(nwGUI, fncProj)
# Handles for new objects hInvalid = "0000000000000"
hNovelRoot = "0000000000008"
hChapterDir = "000000000000d" hChapterDir = "000000000000d"
hChapterOne = "000000000000e" hChapterDoc = "000000000000e"
hSceneOne = "000000000000f" hSceneDoc = "000000000000f"
hSceneTwo = "0000000000010"
hSceneThree = "0000000000011"
hSceneFour = "0000000000012"
hMergedDoc = "0000000000023"
# Add Project Content # Check that the dialog kan handle invalid items
nwGUI.switchFocus(nwWidget.TREE) nwMerge = GuiDocMerge(nwGUI, hInvalid, [hInvalid])
nwGUI.projView.projTree.clearSelection() qtbot.addWidget(nwMerge)
nwGUI.projView.projTree._getTreeItem(hChapterDir).setSelected(True)
nwGUI.projView.projTree.newTreeItem(nwItemType.FILE)
nwGUI.projView.projTree.newTreeItem(nwItemType.FILE)
nwGUI.projView.projTree.newTreeItem(nwItemType.FILE)
assert nwGUI.saveProject() is True
assert nwGUI.closeProject() is True
tChapterOne = "## Chapter One\n\n% Chapter one comment\n"
tSceneOne = "### Scene One\n\nThere once was a man from Nantucket"
tSceneTwo = "### Scene Two\n\nWho kept all his cash in a bucket."
tSceneThree = "### Scene Three\n\n\tBut his daughter, named Nan, \n\tRan away with a man"
tSceneFour = "### Scene Four\n\nAnd as for the bucket, Nantucket."
contentDir = os.path.join(fncProj, "content")
writeFile(os.path.join(contentDir, hChapterOne+".nwd"), tChapterOne)
writeFile(os.path.join(contentDir, hSceneOne+".nwd"), tSceneOne)
writeFile(os.path.join(contentDir, hSceneTwo+".nwd"), tSceneTwo)
writeFile(os.path.join(contentDir, hSceneThree+".nwd"), tSceneThree)
writeFile(os.path.join(contentDir, hSceneFour+".nwd"), tSceneFour)
assert nwGUI.openProject(fncProj) is True
# Open the Merge tool
nwGUI.switchFocus(nwWidget.TREE)
nwGUI.projView.projTree.clearSelection()
nwGUI.projView.projTree._getTreeItem(hChapterDir).setSelected(True)
monkeypatch.setattr(GuiDocMerge, "exec_", lambda *a: None)
nwGUI.mainMenu.aMergeDocs.activate(QAction.Trigger)
qtbot.waitUntil(lambda: getGuiItem("GuiDocMerge") is not None, timeout=1000)
nwMerge = getGuiItem("GuiDocMerge")
assert isinstance(nwMerge, GuiDocMerge)
nwMerge.show() nwMerge.show()
qtbot.wait(50)
# Populate List
# =============
nwMerge.listBox.clear()
assert nwMerge.listBox.count() == 0 assert nwMerge.listBox.count() == 0
nwMerge.reject()
# No item selected # Load items from chapter dir
nwGUI.projView.projTree.clearSelection() nwMerge = GuiDocMerge(nwGUI, hChapterDir, [hChapterDir, hChapterDoc, hSceneDoc])
assert nwMerge._populateList() is False qtbot.addWidget(nwMerge)
assert nwMerge.listBox.count() == 0 nwMerge.show()
# Non-existing item assert nwMerge.listBox.count() == 2
with monkeypatch.context() as mp:
mp.setattr(NWTree, "__getitem__", lambda *a: None)
nwGUI.projView.projTree.clearSelection()
nwGUI.projView.projTree._getTreeItem(hChapterDir).setSelected(True)
assert nwMerge._populateList() is False
assert nwMerge.listBox.count() == 0
# Select a non-folder itemOne = nwMerge.listBox.item(0)
nwGUI.projView.projTree.clearSelection() itemTwo = nwMerge.listBox.item(1)
nwGUI.projView.projTree._getTreeItem(hChapterOne).setSelected(True)
assert nwMerge._populateList() is False
assert nwMerge.listBox.count() == 0
# Select the chapter folder assert itemOne.data(Qt.UserRole) == hChapterDoc
nwGUI.projView.projTree.clearSelection() assert itemTwo.data(Qt.UserRole) == hSceneDoc
nwGUI.projView.projTree._getTreeItem(hChapterDir).setSelected(True)
assert nwMerge._populateList() is True
assert nwMerge.listBox.count() == 5
# Merge Documents assert itemOne.checkState() == Qt.Checked
# =============== assert itemTwo.checkState() == Qt.Checked
# First, a successful merge data = nwMerge.getData()
with monkeypatch.context() as mp: assert data["sHandle"] == hChapterDir
mp.setattr(GuiDocMerge, "_doClose", lambda *a: None) assert data["origItems"] == [hChapterDir, hChapterDoc, hSceneDoc]
assert nwMerge._doMerge() is True assert data["moveToTrash"] is False
assert nwGUI.saveProject() is True assert data["finalItems"] == [hChapterDoc, hSceneDoc]
mergedFile = os.path.join(contentDir, hMergedDoc+".nwd")
assert os.path.isfile(mergedFile)
assert readFile(mergedFile) == (
"%%%%~name: New Chapter\n"
"%%%%~path: %s/%s\n"
"%%%%~kind: NOVEL/DOCUMENT\n"
"%s\n\n"
"%s\n\n"
"%s\n\n"
"%s\n\n"
"%s\n\n"
) % (
hNovelRoot,
hMergedDoc,
tChapterOne.strip(),
tSceneOne.strip(),
tSceneTwo.strip(),
tSceneThree.strip(),
tSceneFour.strip(),
)
# OS error # Uncheck second item and toggle trash switch
with monkeypatch.context() as mp: itemTwo.setCheckState(Qt.Unchecked)
mp.setattr("builtins.open", causeOSError) nwMerge.trashSwitch.setChecked(True)
assert nwMerge._doMerge() is False
# Can't find the source item data = nwMerge.getData()
with monkeypatch.context() as mp: assert data["sHandle"] == hChapterDir
mp.setattr(NWTree, "__getitem__", lambda *a: None) assert data["origItems"] == [hChapterDir, hChapterDoc, hSceneDoc]
assert nwMerge._doMerge() is False assert data["moveToTrash"] is True
assert data["finalItems"] == [hChapterDoc]
# No source handle set # Restore default values
nwMerge.sourceItem = None nwMerge._resetList()
assert nwMerge._doMerge() is False
# No documents to merge data = nwMerge.getData()
nwMerge.listBox.clear() assert data["sHandle"] == hChapterDir
assert nwMerge._doMerge() is False assert data["origItems"] == [hChapterDir, hChapterDoc, hSceneDoc]
assert data["moveToTrash"] is True
assert data["finalItems"] == [hChapterDoc, hSceneDoc]
# Close up # qtbot.stop()
nwMerge._doClose()
# qtbot.stopForInteraction()
# END Test testDlgMerge_Main # END Test testDlgMerge_Main