From fb32cea5b55fcb67286d46de8123444be9773dc4 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 11 Jun 2024 00:54:05 +0200 Subject: [PATCH] Update writing stats tests --- tests/test_tools/test_tools_writingstats.py | 102 +++++++++++++++----- 1 file changed, 77 insertions(+), 25 deletions(-) diff --git a/tests/test_tools/test_tools_writingstats.py b/tests/test_tools/test_tools_writingstats.py index 47e67a2c..5e88645d 100644 --- a/tests/test_tools/test_tools_writingstats.py +++ b/tests/test_tools/test_tools_writingstats.py @@ -22,8 +22,6 @@ from __future__ import annotations import json -from pathlib import Path - import pytest from PyQt5.QtWidgets import QAction, QFileDialog @@ -43,10 +41,8 @@ def testToolWritingStats_Main(qtbot, monkeypatch, nwGUI, projPath, tstPaths): # Create a project to work on buildTestProject(nwGUI, projPath) project = SHARED.project - - qtbot.wait(100) assert nwGUI.saveProject() - sessFile: Path = projPath / "meta" / nwFiles.SESS_FILE + sessFile = projPath / "meta" / nwFiles.SESS_FILE # Open the Writing Stats dialog nwGUI.mainMenu.aWritingStats.activate(QAction.Trigger) @@ -62,6 +58,16 @@ def testToolWritingStats_Main(qtbot, monkeypatch, nwGUI, projPath, tstPaths): assert not sessFile.is_file() assert list(project.session.iterRecords()) == [] + # Make an invalid logfile + data = ( + '{"type": "initial", "offset": 123}\n' + '{"type": "record", "start": "foo", "end": "bar", "novel": 840, "notes": 376, "idle": 394}' + ) + sessFile.write_text(data, encoding="utf-8") + sessLog._loadLogFile() + assert sessLog.wordOffset == 123 + assert len(sessLog.logData) == 0 + # Make a test log file data = [ project.session.createInitial(123), @@ -75,8 +81,17 @@ def testToolWritingStats_Main(qtbot, monkeypatch, nwGUI, projPath, tstPaths): assert sessLog.wordOffset == 123 assert len(sessLog.logData) == 4 - # Test Exporting - # ============== + +@pytest.mark.gui +def testToolWritingStats_Export(qtbot, monkeypatch, nwGUI, projPath, tstPaths): + """Test the export feature.""" + monkeypatch.setattr(QFileDialog, "getSaveFileName", lambda ss, tt, pp, options: (pp, "")) + + buildTestProject(nwGUI, projPath) + project = SHARED.project + assert nwGUI.saveProject() + sessFile = projPath / "meta" / nwFiles.SESS_FILE + sessLog = GuiWritingStats(nwGUI) data = [ project.session.createInitial(1075), @@ -95,13 +110,13 @@ def testToolWritingStats_Main(qtbot, monkeypatch, nwGUI, projPath, tstPaths): sessLog.populateGUI() # Make the saving fail - monkeypatch.setattr(QFileDialog, "getSaveFileName", lambda *a, **k: ("", "")) - assert not sessLog._saveData(sessLog.FMT_CSV) - assert not sessLog._saveData(sessLog.FMT_JSON) - assert not sessLog._saveData(None) # type: ignore + with monkeypatch.context() as mp: + mp.setattr(QFileDialog, "getSaveFileName", lambda *a, **k: ("", "")) + assert not sessLog._saveData(sessLog.FMT_CSV) + assert not sessLog._saveData(sessLog.FMT_JSON) + assert not sessLog._saveData(None) # type: ignore - # Make the save succeed - monkeypatch.setattr(QFileDialog, "getSaveFileName", lambda ss, tt, pp, options: (pp, "")) + # Sort by time sessLog.listBox.sortByColumn(sessLog.C_TIME, 0) # type: ignore assert sessLog.novelWords.text() == "{:n}".format(600) @@ -153,8 +168,49 @@ def testToolWritingStats_Main(qtbot, monkeypatch, nwGUI, projPath, tstPaths): } ] - # Test Filters - # ============ + # I/O Error + with monkeypatch.context() as mp: + mp.setattr("builtins.open", causeOSError) + assert not sessLog._loadLogFile() + assert not sessLog._saveData(sessLog.FMT_CSV) + + +@pytest.mark.gui +def testToolWritingStats_Filters(qtbot, monkeypatch, nwGUI, projPath, tstPaths): + """Test the filters.""" + monkeypatch.setattr(QFileDialog, "getSaveFileName", lambda ss, tt, pp, options: (pp, "")) + + buildTestProject(nwGUI, projPath) + project = SHARED.project + assert nwGUI.saveProject() + sessFile = projPath / "meta" / nwFiles.SESS_FILE + sessLog = GuiWritingStats(nwGUI) + + data = [ + project.session.createInitial(1075), + project.session.createRecord("2021-01-31 19:00:00", "2021-01-31 19:30:00", 700, 375, 0), + project.session.createRecord("2021-02-01 19:00:00", "2021-02-01 19:30:00", 700, 375, 10), + project.session.createRecord("2021-02-01 20:00:00", "2021-02-01 20:30:00", 600, 275, 20), + project.session.createRecord("2021-02-02 19:00:00", "2021-02-02 19:30:00", 750, 425, 30), + project.session.createRecord("2021-02-02 20:00:00", "2021-02-02 20:30:00", 690, 365, 40), + project.session.createRecord("2021-02-03 19:00:00", "2021-02-03 19:30:00", 680, 355, 50), + project.session.createRecord("2021-02-04 19:00:00", "2021-02-04 19:30:00", 700, 375, 60), + project.session.createRecord("2021-02-05 19:00:00", "2021-02-05 19:30:00", 500, 175, 70), + project.session.createRecord("2021-02-06 19:00:00", "2021-02-06 19:30:00", 600, 275, 80), + project.session.createRecord("2021-02-07 19:00:00", "2021-02-07 19:30:00", 600, 275, 90), + ] + sessFile.write_text("".join(data), encoding="utf-8") + sessLog.populateGUI() + sessLog.listBox.sortByColumn(sessLog.C_TIME, 0) # type: ignore + + assert sessLog.listBox.topLevelItem(0).text(sessLog.C_COUNT) == "{:n}".format(1) + assert sessLog.listBox.topLevelItem(1).text(sessLog.C_COUNT) == "{:n}".format(-200) + assert sessLog.listBox.topLevelItem(2).text(sessLog.C_COUNT) == "{:n}".format(300) + assert sessLog.listBox.topLevelItem(3).text(sessLog.C_COUNT) == "{:n}".format(-120) + assert sessLog.listBox.topLevelItem(4).text(sessLog.C_COUNT) == "{:n}".format(-20) + assert sessLog.listBox.topLevelItem(5).text(sessLog.C_COUNT) == "{:n}".format(40) + assert sessLog.listBox.topLevelItem(6).text(sessLog.C_COUNT) == "{:n}".format(-400) + assert sessLog.listBox.topLevelItem(7).text(sessLog.C_COUNT) == "{:n}".format(200) # No Novel Files qtbot.mouseClick(sessLog.incNovel, QtMouseLeft) @@ -252,8 +308,6 @@ def testToolWritingStats_Main(qtbot, monkeypatch, nwGUI, projPath, tstPaths): qtbot.mouseClick(sessLog.hideNegative, QtMouseLeft) assert sessLog._saveData(sessLog.FMT_JSON) - # qtbot.stop() - jsonStats = tstPaths.tmpDir / "sessionStats.json" with open(jsonStats, mode="r", encoding="utf-8") as inFile: jsonData = json.load(inFile) @@ -333,6 +387,11 @@ def testToolWritingStats_Main(qtbot, monkeypatch, nwGUI, projPath, tstPaths): } ] + # Toggle Idle Time + assert sessLog.listBox.topLevelItem(7).text(sessLog.C_IDLE) == "4 %" + qtbot.mouseClick(sessLog.showIdleTime, QtMouseLeft) + assert sessLog.listBox.topLevelItem(7).text(sessLog.C_IDLE) == "00:01:10" + # Group by Day qtbot.mouseClick(sessLog.groupByDay, QtMouseLeft) assert sessLog._saveData(sessLog.FMT_JSON) @@ -378,14 +437,7 @@ def testToolWritingStats_Main(qtbot, monkeypatch, nwGUI, projPath, tstPaths): } ] - # IOError - # ======= - with monkeypatch.context() as mp: - mp.setattr("builtins.open", causeOSError) - assert not sessLog._loadLogFile() - assert not sessLog._saveData(sessLog.FMT_CSV) - # qtbot.stop() sessLog._doClose() - assert nwGUI.closeProject() is True + nwGUI.closeProject()