diff --git a/poetry.lock b/poetry.lock index 1ca90f107..aa9e1d895 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "asttokens" @@ -444,6 +444,17 @@ docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2. testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] typing = ["typing-extensions (>=4.12.2)"] +[[package]] +name = "gherkin-official" +version = "29.0.0" +description = "Gherkin parser (official, by Cucumber team)" +optional = false +python-versions = "*" +files = [ + {file = "gherkin_official-29.0.0-py3-none-any.whl", hash = "sha256:26967b0d537a302119066742669e0e8b663e632769330be675457ae993e1d1bc"}, + {file = "gherkin_official-29.0.0.tar.gz", hash = "sha256:dbea32561158f02280d7579d179b019160d072ce083197625e2f80a6776bb9eb"}, +] + [[package]] name = "ghp-import" version = "2.1.0" @@ -1204,21 +1215,22 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no [[package]] name = "pytest-bdd" -version = "7.3.0" +version = "8.0.0" description = "BDD for pytest" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pytest_bdd-7.3.0-py3-none-any.whl", hash = "sha256:168ede4a118e348feb70182590ee4a2f856e68dafe54a75a4e9203da37d4ade6"}, - {file = "pytest_bdd-7.3.0.tar.gz", hash = "sha256:9dfeb1d8565d9548907f36a5a9e2c8e1e0cbac3b2724e17331b87386a19fbc16"}, + {file = "pytest_bdd-8.0.0-py3-none-any.whl", hash = "sha256:a62f52c8e4198824ce7fa6ddb8b419565466c15727469647899dc2c626d959d7"}, + {file = "pytest_bdd-8.0.0.tar.gz", hash = "sha256:f520c6f307cca7d4a8b0141394eed4f0873ba82124b161a26af0bb7cba20fca9"}, ] [package.dependencies] +gherkin-official = ">=29.0.0,<30.0.0" Mako = "*" packaging = "*" parse = "*" parse-type = "*" -pytest = ">=6.2.0" +pytest = ">=7.0.0" typing-extensions = "*" [[package]] @@ -1780,4 +1792,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.10.0, <3.14" -content-hash = "b1d7129a811405c5cb82fed2ace5529a830b1a373a7929557aa6ac22058b950b" +content-hash = "ef6226bf4ee37a69297a2c21ab95539525ba604cfb7d7b2d715bddcb5724f672" diff --git a/pyproject.toml b/pyproject.toml index 741f4e01e..89890bc00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ mkdocs = ">=1.4" parse-type = ">=0.6.0" poethepoet = "*" pytest = ">=6.2,<=8.1" -pytest-bdd = ">=6.0" +pytest-bdd = ">=8.0" pytest-clarity = "*" pytest-xdist = ">=2.5.0" requests = "*" diff --git a/tests/bdd/features/actions.feature b/tests/bdd/features/actions.feature index 6cf9b80b6..849b93898 100644 --- a/tests/bdd/features/actions.feature +++ b/tests/bdd/features/actions.feature @@ -8,16 +8,20 @@ Feature: Test combinations of edit, change-time, and delete And we write nothing to the editor if opened And we use the password "test" if prompted When we run "jrnl --change-time '2022-04-23 10:30' --edit" and enter + """ Y N Y + """ Then the error output should contain "No text received from editor. Were you trying to delete all the entries?" And the editor should have been called When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2022-04-23 10:30 Entry the first. 2022-04-23 10:30 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -29,12 +33,16 @@ Feature: Test combinations of edit, change-time, and delete Scenario Outline: --delete with --edit deletes selected entries Given we use the config "" And we append to the editor if opened + """ [2023-02-21 10:32] Here is a new entry + """ And we use the password "test" if prompted When we run "jrnl --delete --edit" and enter + """ Y N Y + """ Then the editor should have been called And the error output should contain "3 entries found" And the error output should contain "2 entries deleted" @@ -42,8 +50,10 @@ Feature: Test combinations of edit, change-time, and delete When we run "jrnl -99 --short" Then the error output should contain "2 entries found" And the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2023-02-21 10:32 Here is a new entry + """ Examples: Configs | config_file | @@ -57,19 +67,23 @@ Feature: Test combinations of edit, change-time, and delete And we use the password "test" if prompted # --change-time is asked first, then --delete When we run "jrnl --change-time '2022-04-23 10:30' --delete" and enter + """ N N Y Y N N + """ Then the error output should contain "3 entries found" And the error output should contain "1 entry deleted" And the error output should contain "1 entry modified" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2022-04-23 10:30 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -81,24 +95,30 @@ Feature: Test combinations of edit, change-time, and delete Scenario Outline: Combining --change-time and --delete and --edit affects appropriate entries Given we use the config "" And we append to the editor if opened - [2023-02-21 10:32] Here is a new entry + """ + [2023-02-21 10:32] Here is a new entry + """ And we use the password "test" if prompted # --change-time is asked first, then --delete, then --edit When we run "jrnl --change-time '2022-04-23 10:30' --delete --edit" and enter + """ N Y Y Y Y N + """ Then the error output should contain "3 entries found" And the error output should contain "2 entries deleted" - And the error output should contain "1 entry modified" # only 1, because the other was deleted - And the error output should contain "1 entry added" # by edit + And the error output should contain "1 entry modified" + And the error output should contain "1 entry added" When we run "jrnl -99 --short" Then the output should be + """ 2022-04-23 10:30 The third entry finally after weeks without writing. 2023-02-21 10:32 Here is a new entry + """ Examples: Configs | config_file | diff --git a/tests/bdd/features/change_time.feature b/tests/bdd/features/change_time.feature index 01ad22869..d5c073c11 100644 --- a/tests/bdd/features/change_time.feature +++ b/tests/bdd/features/change_time.feature @@ -8,14 +8,18 @@ Feature: Change entry times in journal When we run "jrnl -1" Then the output should contain "2020-09-24 09:14 The third entry finally" When we run "jrnl -1 --change-time '2022-04-23 10:30'" and enter + """ Y + """ Then the error output should contain "1 entry modified" And the error output should not contain "deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2022-04-23 10:30 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -29,20 +33,26 @@ Feature: Change entry times in journal And we use the password "test" if prompted When we run "jrnl --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ When we run "jrnl --change-time '2022-04-23 10:30'" and enter + """ Y N Y + """ Then the error output should contain "3 entries found" And the error output should contain "2 entries modified" When we run "jrnl --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2022-04-23 10:30 Entry the first. 2022-04-23 10:30 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -58,14 +68,18 @@ Feature: Change entry times in journal When we run "jrnl -1" Then the output should contain "2020-09-24 09:14 The third entry finally" When we run "jrnl -1 --change-time '2023-02-21 10:30'" and enter + """ N + """ Then the error output should not contain "modified" And the error output should not contain "deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -83,9 +97,11 @@ Feature: Change entry times in journal And the error output should not contain "entries deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -99,14 +115,18 @@ Feature: Change entry times in journal Given we use the config "" And we use the password "test" if prompted When we run "jrnl --change-time '2022-04-23 10:30' @ipsum" and enter + """ Y + """ Then the error output should contain "1 entry found" And the error output should contain "1 entry modified" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. 2022-04-23 10:30 Entry the first. + """ Examples: Configs | config_file | @@ -120,13 +140,17 @@ Feature: Change entry times in journal Given we use the config "" And we use the password "test" if prompted When we run "jrnl --change-time '2022-04-23 10:30' @ipsum @tagthree" and enter + """ Y Y + """ When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2022-04-23 10:30 Entry the first. 2022-04-23 10:30 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -140,12 +164,16 @@ Feature: Change entry times in journal Given we use the config "" And we use the password "test" if prompted When we run "jrnl --change-time '2022-04-23 10:30' -and @tagone @tagtwo" and enter + """ Y + """ When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. 2022-04-23 10:30 Entry the first. + """ Examples: Configs | config_file | @@ -159,12 +187,16 @@ Feature: Change entry times in journal Given we use the config "" And we use the password "test" if prompted When we run "jrnl --change-time '2022-04-23 10:30' @tagone -not @ipsum" and enter + """ Y + """ When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2022-04-23 10:30 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -178,12 +210,16 @@ Feature: Change entry times in journal Given we use the config "" And we use the password "test" if prompted When we run "jrnl --change-time '2022-04-23 10:30' -from 2020-09-01" and enter + """ Y + """ When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2022-04-23 10:30 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -197,13 +233,17 @@ Feature: Change entry times in journal Given we use the config "" And we use the password "test" if prompted When we run "jrnl --change-time '2022-04-23 10:30' -to 2020-08-31" and enter + """ Y Y + """ When we run "jrnl -99 --short" Then the output should be + """ 2020-09-24 09:14 The third entry finally after weeks without writing. 2022-04-23 10:30 Entry the first. 2022-04-23 10:30 A second entry in what I hope to be a long series. + """ Examples: Configs | config_file | @@ -217,12 +257,16 @@ Feature: Change entry times in journal Given we use the config "" And we use the password "test" if prompted When we run "jrnl --change-time '2022-04-23 10:30' -starred" and enter + """ Y + """ When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-09-24 09:14 The third entry finally after weeks without writing. 2022-04-23 10:30 A second entry in what I hope to be a long series. + """ Examples: Configs | config_file | @@ -236,13 +280,17 @@ Feature: Change entry times in journal Given we use the config "" And we use the password "test" if prompted When we run "jrnl --change-time '2022-04-23 10:30' -contains dignissim" and enter + """ Y + """ Then the error output should contain "1 entry modified" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. 2022-04-23 10:30 Entry the first. + """ Examples: Configs | config_file | @@ -256,14 +304,18 @@ Feature: Change entry times in journal Given we use the config "" And we use the password "test" if prompted When we run "jrnl --change-time" and enter + """ N N N + """ When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | diff --git a/tests/bdd/features/config_file.feature b/tests/bdd/features/config_file.feature index 913e36fd6..65254ecc8 100644 --- a/tests/bdd/features/config_file.feature +++ b/tests/bdd/features/config_file.feature @@ -7,8 +7,8 @@ Feature: Multiple journals Given the config "basic_onefile.yaml" exists And we use the config "multiple.yaml" When we run "jrnl --cf basic_onefile.yaml -999" - Then the output should not contain "My first entry" # from multiple.yaml - And the output should contain "Lorem ipsum" # from basic_onefile.yaml + Then the output should not contain "My first entry" + And the output should contain "Lorem ipsum" Scenario: Write to default journal by default using an alternate config Given the config "multiple.yaml" exists @@ -73,18 +73,22 @@ Feature: Multiple journals Given the config "multiple.yaml" exists And we use the config "basic_onefile.yaml" When we run "jrnl new_encrypted --cf multiple.yaml Adding first entry" and enter + """ these three eyes these three eyes n + """ Then the output should contain "Journal 'new_encrypted' created at " Scenario: Don't overwrite main config when encrypting a journal in an alternate config Given the config "basic_onefile.yaml" exists And we use the config "multiple.yaml" When we run "jrnl --cf basic_onefile.yaml --encrypt" and enter + """ these three eyes these three eyes n + """ Then the output should contain "Journal encrypted to features/journals/basic_onefile.journal" And the config should contain "encrypt: false" @@ -122,7 +126,7 @@ Feature: Multiple journals And we use the config "duplicate_keys.yaml" When we run "jrnl -1" Then the output should contain "There is at least one duplicate key in your configuration file" - + Scenario: Show a warning message when using --config-file with duplicate keys Given the config "duplicate_keys.yaml" exists And we use the config "multiple.yaml" @@ -138,4 +142,4 @@ Feature: Multiple journals Given we use the config "format_md.yaml" When we run "jrnl -1" Then the output should contain "Configuration updated to newest version at" - And the version in the config file should be up-to-date \ No newline at end of file + And the version in the config file should be up-to-date diff --git a/tests/bdd/features/datetime.feature b/tests/bdd/features/datetime.feature index 1e7ae7221..0a3c3d6b3 100644 --- a/tests/bdd/features/datetime.feature +++ b/tests/bdd/features/datetime.feature @@ -27,11 +27,13 @@ Feature: Reading and writing to journal with custom date formats Then we should get no error When we run "jrnl -n 999" Then the output should be + """ 09.06.2013 15:39 My first entry. | Everything is alright 10.07.2013 15:40 Life is good. | But I'm better. + """ Scenario Outline: Writing an entry from command line with custom date @@ -142,9 +144,11 @@ Feature: Reading and writing to journal with custom date formats Given we use the config "mostlyreadabledates.yaml" When we run "jrnl --short" Then the output should be + """ 2019-07-01 14:23 The third entry 2019-07-18 14:23 The first entry 2019-07-19 14:23 The second entry + """ Scenario: Update near-valid dates after journal is edited @@ -175,7 +179,9 @@ Feature: Reading and writing to journal with custom date formats When we run "jrnl -1" Then we should get no error And the output should be + """ 2013-10-27 04:27 Some text. + """ @skip #1422 diff --git a/tests/bdd/features/delete.feature b/tests/bdd/features/delete.feature index 6cc77d5b9..52d93a845 100644 --- a/tests/bdd/features/delete.feature +++ b/tests/bdd/features/delete.feature @@ -8,15 +8,19 @@ Feature: Delete entries from journal When we run "jrnl -1" Then the output should contain "2020-09-24 09:14 The third entry finally" When we run "jrnl --delete" and enter + """ N N Y + """ Then the error output should contain "3 entries found" And the error output should contain "1 entry deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. + """ Examples: Configs | config_file | @@ -29,13 +33,17 @@ Feature: Delete entries from journal Scenario Outline: Backing out of interactive delete does not change journal Given we use the config "" When we run "jrnl --delete -n 1" and enter + """ N + """ Then the error output should not contain "deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -50,9 +58,11 @@ Feature: Delete entries from journal Then the error output should contain "No entries to delete" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -64,13 +74,17 @@ Feature: Delete entries from journal Scenario Outline: Delete flag with tag only deletes tagged entries Given we use the config "" When we run "jrnl --delete @ipsum" and enter + """ Y + """ Then the error output should contain "1 entry found" Then the error output should contain "1 entry deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -82,13 +96,17 @@ Feature: Delete entries from journal Scenario Outline: Delete flag with multiple tags deletes all entries matching any of the tags Given we use the config "" When we run "jrnl --delete @ipsum @tagthree" and enter + """ Y Y + """ Then the error output should contain "2 entries found" And the error output should contain "2 entries deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. + """ Examples: Configs | config_file | @@ -100,13 +118,17 @@ Feature: Delete entries from journal Scenario Outline: Delete flag with -and deletes boolean AND of tagged entries Given we use the config "" When we run "jrnl --delete -and @tagone @tagtwo" and enter + """ Y + """ Then the error output should contain "1 entry found" And the error output should contain "1 entry deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -118,13 +140,17 @@ Feature: Delete entries from journal Scenario Outline: Delete flag with -not does not delete entries from given tag Given we use the config "" When we run "jrnl --delete @tagone -not @ipsum" and enter + """ Y + """ Then the error output should contain "1 entry found" And the error output should contain "1 entry deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. + """ Examples: Configs | config_file | @@ -136,13 +162,17 @@ Feature: Delete entries from journal Scenario Outline: Delete flag with -from search operator only deletes entries since that date Given we use the config "" When we run "jrnl --delete -from 2020-09-01" and enter + """ Y + """ Then the error output should contain "1 entry found" And the error output should contain "1 entry deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. + """ Examples: Configs | config_file | @@ -154,13 +184,17 @@ Feature: Delete entries from journal Scenario Outline: Delete flag with -to only deletes entries up to specified date Given we use the config "" When we run "jrnl --delete -to 2020-08-31" and enter + """ Y Y + """ Then the error output should contain "2 entries found" And the error output should contain "2 entries deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -172,12 +206,16 @@ Feature: Delete entries from journal Scenario Outline: Delete flag with -starred only deletes starred entries Given we use the config "" When we run "jrnl --delete -starred" and enter + """ Y + """ Then the error output should contain "1 entry deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-29 11:11 Entry the first. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | @@ -189,13 +227,17 @@ Feature: Delete entries from journal Scenario Outline: Delete flag with -contains only entries containing expression Given we use the config "" When we run "jrnl --delete -contains dignissim" and enter + """ Y + """ Then the error output should contain "1 entry found" And the error output should contain "1 entry deleted" When we run "jrnl -99 --short" Then the output should be + """ 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: Configs | config_file | diff --git a/tests/bdd/features/encrypt.feature b/tests/bdd/features/encrypt.feature index a00812eb8..ff955cf1c 100644 --- a/tests/bdd/features/encrypt.feature +++ b/tests/bdd/features/encrypt.feature @@ -11,8 +11,10 @@ Feature: Encrypting and decrypting journals And the config for journal "default" should contain "encrypt: false" When we run "jrnl -99 --short" Then the output should be + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ @todo @@ -23,8 +25,10 @@ Feature: Encrypting and decrypting journals Then the config for journal "default" should contain "encrypt: false" When we run "jrnl -99 --short" Then the output should be + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ Scenario: Trying to encrypt an already encrypted journal @@ -36,9 +40,11 @@ Feature: Encrypting and decrypting journals Scenario Outline: Encrypting a journal Given we use the config "simple.yaml" When we run "jrnl --encrypt" and enter + """ swordfish swordfish n + """ Then we should get no error And the output should contain "Journal encrypted" And the config for journal "default" should contain "encrypt: true" @@ -50,16 +56,20 @@ Feature: Encrypting and decrypting journals Given we use the config "simple.yaml" And we don't have a keyring When we run "jrnl --encrypt" and enter + """ swordfish swordfish y + """ Then we should get no error And the output should contain "Journal encrypted" When we run "jrnl --encrypt" and enter + """ swordfish tuna tuna y + """ Then we should get no error And the output should contain "Journal default is already encrypted. Create a new password." And we should be prompted for a password @@ -69,15 +79,19 @@ Feature: Encrypting and decrypting journals Given we use the config "simple.yaml" And we have a keyring When we run "jrnl --encrypt" and enter + """ swordfish swordfish y + """ Then we should get no error And the output should contain "Journal encrypted" When we run "jrnl --encrypt" and enter + """ tuna tuna y + """ Then we should get no error And the output should contain "Journal default is already encrypted. Create a new password." And we should be prompted for a password diff --git a/tests/bdd/features/file_storage.feature b/tests/bdd/features/file_storage.feature index cecb21f65..2e79fb359 100644 --- a/tests/bdd/features/file_storage.feature +++ b/tests/bdd/features/file_storage.feature @@ -8,7 +8,9 @@ Feature: Journals iteracting with the file system in a way that users can see When we run "jrnl 23 July 2013: Testing folder journal." Then we should get no error And the journal directory should contain + """ 2013/07/23.txt + """ Scenario: Adding multiple entries to a Folder journal should generate multiple date files Given we use the config "empty_folder.yaml" @@ -16,7 +18,9 @@ Feature: Journals iteracting with the file system in a way that users can see And we run "jrnl 3/7/2014: Second entry of journal." Then we should get no error And the journal directory should contain + """ 2013/07/23.txt + """ Scenario: If the journal and its parent directory don't exist, they should be created Given we use the config "missing_directory.yaml" @@ -33,7 +37,7 @@ Feature: Journals iteracting with the file system in a way that users can see Then the journal should exist When we run "jrnl -99 --short" Then the output should contain "This is a new entry in my journal" - + @on_posix Scenario: If the directory for a Folder journal ending in a slash ('/') doesn't exist, then it should be created Given we use the config "missing_directory.yaml" @@ -55,9 +59,11 @@ Feature: Journals iteracting with the file system in a way that users can see Scenario: Creating journal with relative path should update to absolute path Given we use no config When we run "jrnl hello world" and enter + """ test.txt n \n + """ Then the output should contain "Journal 'default' created" When we change directory to "subfolder" And we run "jrnl -n 1" diff --git a/tests/bdd/features/format.feature b/tests/bdd/features/format.feature index b02831d67..9c6b496c7 100644 --- a/tests/bdd/features/format.feature +++ b/tests/bdd/features/format.feature @@ -40,10 +40,12 @@ Feature: Custom formats Given we parse the output as JSON Then "entries" in the parsed output should have 3 elements And "tags" in the parsed output should be + """ @ipsum @tagone @tagtwo @tagthree + """ And "entries.0.tags" in the parsed output should have 3 elements And "entries.1.tags" in the parsed output should have 1 elements And "entries.2.tags" in the parsed output should have 2 elements @@ -62,7 +64,9 @@ Feature: Custom formats And the output should be valid JSON Given we parse the output as JSON Then "entries.0.uuid" in the parsed output should be + """ 4BB1F46946AD439996C9B59DE7C4DDC1 + """ Scenario Outline: Printing a journal that has multiline entries with tags Given we use the config "" @@ -70,6 +74,7 @@ Feature: Custom formats When we run "jrnl -n 1 @ipsum" Then we should get no error And the output should be + """ 2020-08-29 11:11 Entry the first. | Lorem @ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada | quis est ac dignissim. Aliquam dignissim rutrum pretium. Phasellus @@ -90,6 +95,7 @@ Feature: Custom formats | velit scelerisque fringilla. Phasellus pharetra justo et nulla fringilla, ac | porta sapien accumsan. Class aptent taciti sociosqu ad litora torquent per | conubia nostra, per inceptos himenaeos. + """ Examples: configs | config_file | @@ -108,9 +114,11 @@ Feature: Custom formats Given we parse the output as JSON Then "entries" in the parsed output should have 2 elements And "tags" in the parsed output should be + """ @ipsum @tagone @tagtwo + """ And "entries.0.tags" in the parsed output should have 3 elements And "entries.1.tags" in the parsed output should have 1 elements @@ -125,6 +133,7 @@ Feature: Custom formats Given we use the config "" And we use the password "test" if prompted Given we append to the editor if opened + """ [2021-10-14 13:23] Heading Test H1-1 @@ -167,10 +176,12 @@ Feature: Custom formats More stuff more stuff again + """ When we run "jrnl --edit -1" Then the editor should have been called When we run "jrnl -1 --export markdown" Then the output should be + """ # 2021 ## October @@ -211,6 +222,7 @@ Feature: Custom formats More stuff more stuff again + """ Examples: configs | config_file | @@ -227,10 +239,12 @@ Feature: Custom formats Then the output should be a valid XML string And "entries" in the xml output should have 3 elements And "tags" in the xml output should contain + """ @ipsum @tagone @tagtwo @tagthree + """ And there should be 10 "tag" elements Examples: configs @@ -248,9 +262,11 @@ Feature: Custom formats Given we parse the output as XML Then "entries" in the parsed output should have 2 elements And "tags" in the parsed output should be + """ @idea @journal @dan + """ And there should be 7 "tag" elements Scenario Outline: Exporting tags @@ -258,10 +274,12 @@ Feature: Custom formats And we use the password "test" if prompted When we run "jrnl --export tags" Then the output should be + """ @tagtwo : 2 @tagone : 2 @tagthree : 1 @ipsum : 1 + """ Examples: configs | config_file | @@ -293,6 +311,7 @@ Feature: Custom formats And we use the password "test" if prompted When we run "jrnl --export fancy" Then the output should be + """ ┎──────────────────────────────────────────────────────────────╮2020-08-29 11:11 ┃ Entry the first. ╘═══════════════╕ ┠╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ @@ -375,6 +394,7 @@ Feature: Custom formats ┃ Phasellus aliquam lacus placerat convallis vestibulum. Curabitur maximus at │ ┃ ante eget fringilla. @tagthree and also @tagone │ ┖──────────────────────────────────────────────────────────────────────────────┘ + """ Examples: configs | config_file | @@ -390,11 +410,14 @@ Feature: Custom formats And we create a cache directory When we run "jrnl --format yaml --file {cache_dir}" Then the cache directory should contain the files + """ 2020-08-29_entry-the-first.md 2020-08-31_a-second-entry-in-what-i-hope-to-be-a-long-series.md 2020-09-24_the-third-entry-finally-after-weeks-without-writing.md + """ And the content of file "2020-08-29_entry-the-first.md" in the cache should be + """ --- title: Entry the first. date: 2020-08-29 11:11 @@ -420,7 +443,8 @@ Feature: Custom formats porta sapien accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. ... - + """ + Examples: configs | config_file | | basic_onefile.yaml | @@ -451,10 +475,13 @@ Feature: Custom formats And we create a cache directory When we run "jrnl --export yaml -o {cache_dir}" Then the cache should contain the files + """ 2020-08-29_entry-the-first.md 2020-08-31_a-second-entry-in-what-i-hope-to-be-a-long-series.md 2020-09-24_the-third-entry-finally-after-weeks-without-writing.md + """ And the content of file "2020-09-24_the-third-entry-finally-after-weeks-without-writing.md" in the cache should be + """ --- title: The third entry finally after weeks without writing. date: 2020-09-24 09:14 @@ -472,6 +499,7 @@ Feature: Custom formats Phasellus aliquam lacus placerat convallis vestibulum. Curabitur maximus at ante eget fringilla. @tagthree and also @tagone ... + """ Examples: configs | config_file | @@ -516,6 +544,7 @@ Feature: Custom formats Given we use the config "format_md.yaml" When we run "jrnl -n 1" Then the output should be + """ # 2013 ## June @@ -523,13 +552,16 @@ Feature: Custom formats ### 2013-06-10 15:40 Life is good. But I'm better. + """ Scenario: Text Formatter from config file Given we use the config "format_text.yaml" When we run "jrnl -n 1" Then the output should be + """ [2013-06-10 15:40] Life is good. But I'm better. + """ Scenario Outline: Exporting entries with Cyrillic characters to directory should not fail Given we use the config "" @@ -538,7 +570,9 @@ Feature: Custom formats When we run "jrnl 2020-11-21: Первая" When we run "jrnl --format md --file {cache_dir} -on 2020-11-21" Then the cache should contain the files + """ 2020-11-21_первая.md + """ Examples: configs | config_file | @@ -553,9 +587,11 @@ Feature: Custom formats When we run "jrnl 2020-08-31 01:01: Hi." And we run "jrnl --format dates" Then the output should be + """ 2020-08-29, 1 2020-08-31, 2 2020-09-24, 1 + """ Examples: configs | config_file | @@ -571,7 +607,7 @@ Feature: Custom formats When we run "jrnl --config-override display_format short -1" Then we should get no error When we run "jrnl --config-override display_format pretty -1" - Then we should get no error + Then we should get no error Examples: configs | config_file | @@ -588,7 +624,7 @@ Feature: Custom formats When we run "jrnl --format markdown --file {cache_dir}" Then the cache directory should contain 5 files And we should get no error - + Scenario: Export entries in text format with a title longer than max file name length. Given we use the config "basic_onefile.yaml" And we create a cache directory @@ -602,30 +638,42 @@ Feature: Custom formats Given we use the config "basic_onefile.yaml" When we run "jrnl --list" Then the output should match + """ Journals defined in config \(.+basic_onefile\.yaml\) \* default -> features/journals/basic_onefile\.journal + """ When we run "jrnl --list --format json" Then the output should match + """ {"config_path": ".+basic_onefile\.yaml", "journals": {"default": "features/journals/basic_onefile\.journal"}} + """ When we run "jrnl --list --format yaml" Then the output should match + """ config_path: .+basic_onefile\.yaml journals: default: features/journals/basic_onefile\.journal + """ Scenario: Export journal list to formats with no default journal Given we use the config "no_default_journal.yaml" When we run "jrnl --list" Then the output should match + """ Journals defined in config \(.+no_default_journal\.yaml\) \* simple -> features/journals/simple\.journal \* work -> features/journals/work\.journal + """ When we run "jrnl --list --format json" Then the output should match + """ {"config_path": ".+no_default_journal\.yaml", "journals": {"simple": "features/journals/simple\.journal", "work": "features/journals/work\.journal"}} + """ When we run "jrnl --list --format yaml" Then the output should match + """ config_path: .+no_default_journal\.yaml journals: simple: features/journals/simple\.journal work: features/journals/work\.journal + """ diff --git a/tests/bdd/features/import.feature b/tests/bdd/features/import.feature index 50f90b097..025576324 100644 --- a/tests/bdd/features/import.feature +++ b/tests/bdd/features/import.feature @@ -21,6 +21,7 @@ Feature: Importing data Given we use the config "" And we use the password "test" if prompted When we run "jrnl --import" and pipe + """ [2020-07-05 15:00] Observe and import. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada quis est ac dignissim. Aliquam dignissim rutrum pretium. Phasellus pellentesque augue @@ -28,6 +29,7 @@ Feature: Importing data Aenean ante ex, elementum ut interdum et, mattis eget lacus. In commodo nulla nec tellus placerat, sed ultricies metus bibendum. Duis eget venenatis erat. In at dolor dui end of entry. + """ When we run "jrnl -on 2020-07-05" Then the output should contain "2020-07-05 15:00 Observe and import." And the output should contain "Lorem ipsum" @@ -44,11 +46,13 @@ Feature: Importing data Given we use the config "" And we use the password "test" if prompted When we run "jrnl --import" and pipe + """ [2020-07-05 15:00] Observe and import. Lorem ipsum dolor sit amet, consectetur adipiscing elit. [2020-07-05 15:01] Twice as nice. Sed dignissim sed nisl eu consequat. + """ When we run "jrnl -on 2020-07-05" Then the output should contain "2020-07-05 15:00 Observe and import." And the output should contain "Lorem ipsum" @@ -83,7 +87,9 @@ Feature: Importing data But the output should not contain "I have an @idea" And the output should not contain "I met with" When we run "jrnl --import --file features/journals/tags.journal" and pipe + """ [2020-07-05 15:00] I should not exist! + """ And we run "jrnl -99" Then the output should contain "My first entry." And the output should contain "PROFIT!" diff --git a/tests/bdd/features/install.feature b/tests/bdd/features/install.feature index 5dc286b91..163fec9dd 100644 --- a/tests/bdd/features/install.feature +++ b/tests/bdd/features/install.feature @@ -3,9 +3,11 @@ Feature: Installing jrnl Scenario: Install jrnl with default options Given we use no config When we run "jrnl hello world" and enter + """ \n \n \n + """ Then the output should contain "jrnl configuration created at" And the output should contain "For advanced features, read the docs at https://jrnl.sh" And the output should contain "Journal 'default' created" @@ -16,9 +18,11 @@ Feature: Installing jrnl Scenario: Install jrnl with custom relative default journal path Given we use no config When we run "jrnl hello world" and enter + """ default/custom.txt n \n + """ Then the output should contain "Journal 'default' created" And the default journal "custom.txt" should be in the "default" directory And the config should contain "encrypt: false" @@ -28,9 +32,11 @@ Feature: Installing jrnl Given we use no config And the home directory is called "home" When we run "jrnl hello world" and enter + """ ~/custom.txt n \n + """ Then the output should contain "Journal 'default' created" And the default journal "custom.txt" should be in the "home" directory And the config should contain "encrypt: false" @@ -39,9 +45,11 @@ Feature: Installing jrnl Scenario: Install jrnl with encrypted default journal Given we use no config When we run "jrnl hello world" and enter + """ encrypted.txt y \n + """ Then the output should contain "Journal will be encrypted" And the default journal "encrypted.txt" should be in the "." directory And the config should contain "encrypt: true" @@ -52,46 +60,58 @@ Feature: Installing jrnl Scenario: Install jrnl with colors by default Given we use no config When we run "jrnl hello world" and enter + """ \n \n \n + """ Then the output should contain "Journal 'default' created" And the config should contain + """ colors: body: none date: black tags: yellow title: cyan + """ Scenario: Install jrnl without colors Given we use no config When we run "jrnl hello world" and enter + """ \n \n N + """ Then the output should contain "Journal 'default' created" And the config should contain + """ colors: body: none date: none tags: none title: none + """ Scenario: Install jrnl with encrypted default journal with no entries Given we use no config When we run "jrnl -1" and enter + """ encrypted.txt y n test test n + """ Then the error output should contain "Journal will be encrypted" And the default journal "encrypted.txt" should be in the "." directory And the config should contain "encrypt: true" And the version in the config file should be up-to-date When we run "jrnl -1" and enter - test + """ + test + """ Then we should be prompted for a password And the error output should contain "no entries found" And the error output should not contain "Wrong password, try again" diff --git a/tests/bdd/features/multiple_journals.feature b/tests/bdd/features/multiple_journals.feature index fa3734523..866e6ec21 100644 --- a/tests/bdd/features/multiple_journals.feature +++ b/tests/bdd/features/multiple_journals.feature @@ -7,8 +7,10 @@ Feature: Multiple journals Given we use the config "multiple.yaml" When we run "jrnl -99 --short" Then the output should be + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ When we run "jrnl work -99 --short" Then the output should be empty @@ -17,10 +19,14 @@ Feature: Multiple journals When we run "jrnl this goes to default" When we run "jrnl -99 --short" Then the output should contain + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ Then the output should contain + """ this goes to default + """ When we run "jrnl work -99 --short" Then the output should be empty @@ -29,8 +35,10 @@ Feature: Multiple journals When we run "jrnl work a long day in the office" When we run "jrnl -99 --short" Then the output should be + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ When we run "jrnl work -99 --short" Then the output should contain "a long day in the office" @@ -44,32 +52,44 @@ Feature: Multiple journals When we run "jrnl work 23 july 2012: a long day in the office" When we run "jrnl -99 --short" Then the output should be + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ When we run "jrnl work -99 --short" Then the output should be + """ 2012-07-23 09:00 a long day in the office + """ Scenario: Write to specified journal without a timestamp but with colon Given we use the config "multiple.yaml" When we run "jrnl work : a long day in the office" Then the output should be + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ When we run "jrnl work -99 --short" Then the output should be contain + """ a long day in the office + """ Scenario: Write to specified journal without a timestamp but with colon Given we use the config "multiple.yaml" When we run "jrnl work: a long day in the office" When we run "jrnl -99 --short" Then the output should be + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ When we run "jrnl work -99 --short" Then the output should contain + """ a long day in the office + """ Scenario: Create new journals as required Given we use the config "multiple.yaml" @@ -77,7 +97,9 @@ Feature: Multiple journals When we run "jrnl ideas 23 july 2012: sell my junk on ebay and make lots of money" When we run "jrnl ideas -99 --short" Then the output should be + """ 2012-07-23 09:00 sell my junk on ebay and make lots of money + """ Scenario: Don't crash if no default journal is specified Given we use the config "no_default_journal.yaml" @@ -87,9 +109,11 @@ Feature: Multiple journals Scenario: Don't crash if no file exists for a configured encrypted journal Given we use the config "multiple.yaml" When we run "jrnl new_encrypted Adding first entry" and enter + """ these three eyes these three eyes n + """ Then the output should contain "Journal 'new_encrypted' created at" Scenario: Read and write to journal with emoji name diff --git a/tests/bdd/features/override.feature b/tests/bdd/features/override.feature index 9ddf4a194..2a85bec98 100644 --- a/tests/bdd/features/override.feature +++ b/tests/bdd/features/override.feature @@ -7,7 +7,9 @@ Feature: Implementing Runtime Overrides for Select Configuration Keys Given we use the config "basic_encrypted.yaml" And we use the password "test" if prompted When we run "jrnl --config-override editor ''" and type - This is a journal entry + """ + This is a journal entry + """ Then the stdin prompt should have been called And the editor should not have been called When we run "jrnl -1" @@ -27,6 +29,7 @@ Feature: Implementing Runtime Overrides for Select Configuration Keys And we use the password "test" if prompted When we run "jrnl -2 --config-override linewrap 23 --format fancy" Then the output should be + """ ┎─────╮2013-06-09 15:39 ┃ My ╘═══════════════╕ ┃ fir st ent ry. │ @@ -40,6 +43,7 @@ Feature: Implementing Runtime Overrides for Select Configuration Keys ┠╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ ┃ But I'm better. │ ┖─────────────────────┘ + """ Scenario: Override color selections with runtime overrides @@ -59,12 +63,14 @@ Feature: Implementing Runtime Overrides for Select Configuration Keys And we use the password "test" if prompted When we run "jrnl -1 --config-override colors.body green --config-override editor 'nano'" Then the config in memory should contain + """ editor: nano colors: title: none body: green tags: none date: none + """ Scenario: Override default journal @@ -74,6 +80,7 @@ Feature: Implementing Runtime Overrides for Select Configuration Keys Then we should get no error When we run "jrnl -3 --config-override journals.default features/journals/simple.journal" Then the output should be + """ 2000-03-20 09:00 The rain in Spain comes from clouds 2013-06-09 15:39 My first entry. @@ -81,6 +88,7 @@ Feature: Implementing Runtime Overrides for Select Configuration Keys 2013-06-10 15:40 Life is good. | But I'm better. + """ Scenario: Make an entry into an overridden journal @@ -91,6 +99,7 @@ Feature: Implementing Runtime Overrides for Select Configuration Keys And the output should contain "Entry added" When we run "jrnl --config-override journals.temp features/journals/simple.journal temp -3" Then the output should be + """ 1969-09-06 09:00 @say Ni 2013-06-09 15:39 My first entry. @@ -98,3 +107,4 @@ Feature: Implementing Runtime Overrides for Select Configuration Keys 2013-06-10 15:40 Life is good. | But I'm better. + """ diff --git a/tests/bdd/features/password.feature b/tests/bdd/features/password.feature index e3f4dbd14..8bbb75224 100644 --- a/tests/bdd/features/password.feature +++ b/tests/bdd/features/password.feature @@ -7,9 +7,11 @@ Feature: Using the installed keyring Given we use the config "multiple.yaml" And we have a keyring When we run "jrnl simple --encrypt" and enter + """ sabertooth sabertooth Y + """ Then the config for journal "simple" should contain "encrypt: true" When we run "jrnl simple -n 1" Then the output should contain "2013-06-10 15:40 Life is good" @@ -19,9 +21,11 @@ Feature: Using the installed keyring Given we use the config "simple.yaml" When we run "jrnl test entry" And we run "jrnl --encrypt" and enter + """ password password n + """ Then we should get no error And the output should not contain "Failed to retrieve keyring" @@ -30,9 +34,11 @@ Feature: Using the installed keyring Given we use the config "simple.yaml" When we run "jrnl test entry" And we run "jrnl --encrypt" and enter + """ password password y + """ Then we should get no error And the output should not contain "Failed to retrieve keyring" # @todo add step to check contents of keyring @@ -55,9 +61,11 @@ Feature: Using the installed keyring Given we use the config "simple.yaml" And we have a failed keyring When we run "jrnl --encrypt" and enter + """ this password will not be saved in keyring this password will not be saved in keyring y + """ Then the output should contain "Failed to retrieve keyring" And we should get no error And we should be prompted for a password @@ -77,8 +85,10 @@ Feature: Using the installed keyring When we run "jrnl --short" Then we should not be prompted for a password And the output should be + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ Scenario: Open encrypted journal when keyring exists but fails @@ -96,25 +106,31 @@ Feature: Using the installed keyring Scenario: Mistyping your password Given we use the config "simple.yaml" When we run "jrnl --encrypt" and enter + """ swordfish sordfish + """ Then we should be prompted for a password And the output should contain "Passwords did not match" And the config for journal "default" should not contain "encrypt: true" When we run "jrnl --short" Then the output should be + """ 2013-06-09 15:39 My first entry. 2013-06-10 15:40 Life is good. + """ Scenario: Mistyping your password, then getting it right Given we use the config "simple.yaml" When we run "jrnl --encrypt" and enter + """ swordfish sordfish swordfish swordfish n + """ Then we should be prompted for a password And the output should contain "Passwords did not match" And the output should contain "Journal encrypted" diff --git a/tests/bdd/features/search.feature b/tests/bdd/features/search.feature index 79ddf0871..dee108b48 100644 --- a/tests/bdd/features/search.feature +++ b/tests/bdd/features/search.feature @@ -27,7 +27,7 @@ Feature: Searching in a journal When we run "jrnl tomorrow: A future entry." Then we should get no error When we run "jrnl -from today" - Then the output should contain "2 entries found" + Then the output should contain "2 entries found" And the output should contain "Adding an entry right now." And the output should contain "A future entry." And the output should not contain "This thing happened yesterday" @@ -65,7 +65,9 @@ Feature: Searching in a journal Then we should get no error And the output should contain "1 entry found" And the output should be + """ 2020-08-29 11:11 Entry the first. + """ Examples: configs | config_file | @@ -92,9 +94,11 @@ Feature: Searching in a journal Then we should get no error And the output should contain "3 entries found" And the output should be + """ 2020-08-29 11:11 Entry the first. 2020-08-31 14:32 A second entry in what I hope to be a long series. 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: configs | config_file | @@ -108,7 +112,9 @@ Feature: Searching in a journal Then we should get no error And the output should contain "1 entry found" And the output should be + """ 2020-09-24 09:14 The third entry finally after weeks without writing. + """ Examples: configs | config_file | @@ -219,19 +225,23 @@ Feature: Searching in a journal Then we should get no error When we run "jrnl -2" Then the output should be + """ 2013-07-23 09:00 Testing folder journal. 2014-03-07 16:37 Second entry of journal. + """ Scenario Outline: Searching for all tags should show counts of each tag Given we use the config "" When we run "jrnl --tags" Then we should get no error And the output should be + """ @tagtwo : 2 @tagone : 2 @tagthree : 1 @ipsum : 1 + """ Examples: configs | config_file | @@ -244,8 +254,10 @@ Feature: Searching in a journal When we run "jrnl -from 'september 2020' --tags" Then we should get no error And the output should be + """ @tagthree : 1 @tagone : 1 + """ Examples: configs | config_file | @@ -257,8 +269,10 @@ Feature: Searching in a journal Given we use the config "" When we run "jrnl --tags -not @tagtwo" Then the output should be + """ @tagthree : 1 @tagone : 1 + """ Examples: configs | config_file | @@ -270,7 +284,9 @@ Feature: Searching in a journal Given we use the config "" When we run "jrnl --tags -not @tagone -not @tagthree" Then the output should be + """ @tagtwo : 1 + """ Examples: configs | config_file | @@ -302,11 +318,13 @@ Feature: Searching in a journal When we run "jrnl -2" Then we should get no error And the output should be + """ 2013-06-09 15:39 My first entry. | Everything is alright 2013-06-10 15:40 Life is good. | But I'm better. + """ Scenario Outline: Searching by month Given we use the config "" @@ -381,8 +399,10 @@ Feature: Searching in a journal And we run "jrnl -today-in-history --short" Then the output should contain "2 entries found" And the output should be + """ 2019-08-31 01:01 Hi, from last year. 2020-08-31 14:32 A second entry in what I hope to be a long series. + """ Examples: configs | config_file | @@ -397,11 +417,13 @@ Feature: Searching in a journal Then we should get no error And the output should contain "3 entries found" And the output should be + """ 2013-05-17 11:39 This entry has tags! 2013-06-17 20:38 This entry has a location. 2013-07-17 11:38 This entry is starred! + """ Scenario Outline: Searching the most recent entry should not show found count Given we use the config "" diff --git a/tests/bdd/features/tag.feature b/tests/bdd/features/tag.feature index 64ceab9f4..6dfde7118 100644 --- a/tests/bdd/features/tag.feature +++ b/tests/bdd/features/tag.feature @@ -11,9 +11,11 @@ Feature: Tagging When we run "jrnl --tags -on 2020-09-26" Then we should get no error And the output should be + """ @os/2 : 1 @c++ : 1 @c# : 1 + """ Examples: configs | config_file | @@ -41,8 +43,10 @@ Feature: Tagging When we run "jrnl 2020-09-26: @foo came over, we went to a @bar" When we run "jrnl --tags -on 2020-09-26" Then the output should be + """ @foo : 1 @bar : 1 + """ Examples: configs | config_file | diff --git a/tests/bdd/features/template.feature b/tests/bdd/features/template.feature index ab13115ad..de4de927f 100644 --- a/tests/bdd/features/template.feature +++ b/tests/bdd/features/template.feature @@ -2,12 +2,13 @@ # License: https://www.gnu.org/licenses/gpl-3.0.html Feature: Using templates - Scenario Outline: Template contents should be used in new entry Given we use the config "" And we use the password "test" if prompted And we append to the editor if opened + """ This is an addition to a templated entry + """ When we run "jrnl --config-override template features/templates/basic.template" And we run "jrnl -1" Then the output should contain "This text is in the basic template" diff --git a/tests/bdd/features/upgrade.feature b/tests/bdd/features/upgrade.feature index b1c056bf3..d0cfdb8c2 100644 --- a/tests/bdd/features/upgrade.feature +++ b/tests/bdd/features/upgrade.feature @@ -8,19 +8,27 @@ Feature: Upgrading Journals from 1.x.x to 2.x.x When we run "jrnl -9" and enter "Y" When we run "jrnl -99 --short" Then the output should be + """ 2010-06-10 15:00 A life without chocolate is like a bad analogy. 2013-06-10 15:40 He said "[this] is the best time to be alive".Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada + """ And the output should contain + """ 2010-06-10 15:00 A life without chocolate is like a bad analogy. + """ And the output should contain + """ 2013-06-10 15:40 He said "[this] is the best time to be alive". + """ Scenario: Upgrading a journal encrypted with jrnl 1.x Given we use the config "encrypted_old.json" When we run "jrnl -n 1" and enter + """ Y bad doggie no biscuit bad doggie no biscuit + """ Then we should be prompted for a password And the output should contain "2013-06-10 15:40 Life is good" @@ -28,18 +36,22 @@ Feature: Upgrading Journals from 1.x.x to 2.x.x Given we use the config "no_colors.yaml" When we run "jrnl -n 1" Then the config should contain + """ colors: date: none title: none body: none tags: none + """ Scenario: Upgrade and parse journals with little endian date format Given we use the config "upgrade_from_195_little_endian_dates.json" When we run "jrnl -9 --short" and enter "Y" Then the output should contain + """ 10.06.2010 15:00 A life without chocolate is like a bad analogy. 10.06.2013 15:40 He said "[this] is the best time to be alive". + """ Scenario: Upgrade with missing journal Given we use the config "upgrade_from_195_with_missing_journal.json" @@ -50,8 +62,10 @@ Feature: Upgrading Journals from 1.x.x to 2.x.x Scenario: Upgrade with missing encrypted journal Given we use the config "upgrade_from_195_with_missing_encrypted_journal.json" When we run "jrnl --list" and enter + """ Y bad doggie no biscuit + """ Then the output should contain "features/journals/missing.journal does not exist" And the output should contain "We're all done" And we should get no error diff --git a/tests/bdd/features/write.feature b/tests/bdd/features/write.feature index 9c57f850c..c2824f35b 100644 --- a/tests/bdd/features/write.feature +++ b/tests/bdd/features/write.feature @@ -67,7 +67,9 @@ Feature: Writing new entries. Then we should get no error Then the editor should have been called And the editor file content should be + """ this is a partial + """ Examples: configs | config_file | @@ -146,8 +148,10 @@ Feature: Writing new entries. Then we should get no error When we run "jrnl -1" Then the output should be + """ 2014-04-24 09:00 Created a new website - empty.com. | Hope to get a lot of traffic. + """ Examples: configs | config_file | @@ -206,13 +210,17 @@ Feature: Writing new entries. Given we parse the output as JSON Then "entries" in the parsed output should have 5 elements And "entries.0.creator" in the parsed output should be + """ software_agent os_agent host_name generation_date device_agent + """ And "entries.0.creator.software_agent" in the parsed output should contain + """ jrnl + """ Scenario: Title with an embedded period on DayOne journal Given we use the config "dayone.yaml" @@ -220,8 +228,10 @@ Feature: Writing new entries. Then we should get no error When we run "jrnl -1" Then the output should be + """ 2014-04-24 09:00 Ran 6.2 miles today in 1:02:03. | I am feeling sore because I forgot to stretch. + """ Scenario: Opening an folder that's not a DayOne folder should treat as folder journal Given we use the config "empty_folder.yaml" @@ -234,7 +244,9 @@ Feature: Writing new entries. Given we use the config "" And we use the password "test" if prompted And we append to the editor if opened + """ [2021-11-13] worked on jrnl tests + """ When we run "jrnl --edit" Then the error output should contain "3 entries found" And the error output should contain "1 entry added" @@ -252,9 +264,11 @@ Feature: Writing new entries. Given we use the config "" And we use the password "test" if prompted And we append to the editor if opened + """ [2021-11-11] worked on jrnl tests [2021-11-12] worked on jrnl tests again [2021-11-13] worked on jrnl tests a little bit more + """ When we run "jrnl --edit" Then the error output should contain "3 entries found" And the error output should contain "3 entries added" @@ -271,7 +285,9 @@ Feature: Writing new entries. Given we use the config "" And we use the password "test" if prompted And we write to the editor if opened + """ [2021-11-13] I am replacing my whole journal with this entry + """ When we run "jrnl --edit" Then the output should contain "2 entries deleted" And the output should contain "1 entry modified" @@ -288,7 +304,9 @@ Feature: Writing new entries. Given we use the config "" And we use the password "test" if prompted And we write to the editor if opened + """ [2021-11-13] I am replacing the last entry with this entry + """ When we run "jrnl --edit -1" Then the error output should contain "1 entry modified" @@ -304,7 +322,9 @@ Feature: Writing new entries. Given we use the config "" And we use the password "test" if prompted And we append to the editor if opened + """ This is a small addendum to my latest entry. + """ When we run "jrnl --edit" Then the error output should contain "3 entries found" And the error output should contain "1 entry modified" @@ -341,12 +361,16 @@ Feature: Writing new entries. Given we use the config "" And we use the password "test" if prompted And we append to the editor if opened + """ @newtag + """ When we run "jrnl --edit -1" Then the error output should contain "1 entry modified" When we run "jrnl --tags @newtag" Then the output should contain + """ 1 entry found + """ Examples: configs | config_file | diff --git a/tests/lib/given_steps.py b/tests/lib/given_steps.py index 6b783ae29..29793b16c 100644 --- a/tests/lib/given_steps.py +++ b/tests/lib/given_steps.py @@ -13,6 +13,7 @@ from pytest_bdd import given from pytest_bdd.parsers import parse +from pytest_bdd.parsers import re from jrnl import __version__ from jrnl.time import __get_pdt_calendar @@ -21,7 +22,11 @@ from tests.lib.fixtures import TestKeyring -@given(parse("we {editor_method} to the editor if opened\n{editor_input}")) +@given(re(r"we (?P\w+) to the editor if opened")) +def we_enter_editor_docstring(editor_method, editor_state, docstring): + we_enter_editor(editor_method, docstring, editor_state) + + @given(parse("we {editor_method} nothing to the editor if opened")) def we_enter_editor(editor_method, editor_input, editor_state): file_method = editor_state["intent"]["method"] diff --git a/tests/lib/then_steps.py b/tests/lib/then_steps.py index 4d237ba28..29b4f9671 100644 --- a/tests/lib/then_steps.py +++ b/tests/lib/then_steps.py @@ -8,6 +8,7 @@ from pytest_bdd import then from pytest_bdd.parsers import parse +from pytest_bdd.parsers import re as pytest_bdd_parsers_re from ruamel.yaml import YAML from jrnl.config import scope_config @@ -30,7 +31,11 @@ def should_get_an_error(cli_run): assert cli_run["status"] != 0, cli_run["status"] -@then(parse("the output should match\n{regex}")) +@then(parse("the output should match")) +def output_should_match_docstring(cli_run, docstring): + output_should_match(docstring, cli_run) + + @then(parse('the output should match "{regex}"')) def output_should_match(regex, cli_run): out = cli_run["stdout"] @@ -38,14 +43,18 @@ def output_should_match(regex, cli_run): assert matches, f"\nRegex didn't match:\n{regex}\n{str(out)}\n{str(matches)}" -@then(parse("the output {it_should:Should} contain\n{expected}", SHOULD_DICT)) -@then(parse('the output {it_should:Should} contain "{expected}"', SHOULD_DICT)) +@then(parse("the output {it_should:Should} contain", SHOULD_DICT)) @then( parse( - "the {which_output_stream} output {it_should:Should} contain\n{expected}", + "the {which_output_stream} output {it_should:Should} contain", SHOULD_DICT, ) ) +def output_should_contain_docstring(which_output_stream, cli_run, it_should, docstring): + output_should_contain(docstring, which_output_stream, cli_run, it_should) + + +@then(parse('the output {it_should:Should} contain "{expected}"', SHOULD_DICT)) @then( parse( 'the {which_output_stream} output {it_should:Should} contain "{expected}"', @@ -75,13 +84,21 @@ def output_should_contain(expected, which_output_stream, cli_run, it_should): assert (expected in cli_run[which_output_stream]) == it_should, output_str -@then(parse("the output should not contain\n{expected_output}")) +@then(parse("the output should not contain")) +def output_should_not_contain_docstring(cli_run, docstring): + output_should_not_contain(docstring, cli_run) + + @then(parse('the output should not contain "{expected_output}"')) def output_should_not_contain(expected_output, cli_run): assert expected_output not in cli_run["stdout"] -@then(parse("the output should be\n{expected_output}")) +@then(parse("the output should be")) +def output_should_be_docstring(cli_run, docstring): + output_should_be(docstring, cli_run) + + @then(parse('the output should be "{expected_output}"')) def output_should_be(expected_output, cli_run): actual = cli_run["stdout"].strip() @@ -139,20 +156,23 @@ def default_journal_location(journal_file, journal_dir, config_on_disk, temp_dir @then( parse( - 'the config for journal "{journal_name}" ' - '{it_should:Should} contain "{some_yaml}"', + 'the config for journal "{journal_name}" {it_should:Should} contain', SHOULD_DICT, ) ) +@then(parse("the config {it_should:Should} contain", SHOULD_DICT)) +def config_var_on_disk_docstring(config_on_disk, journal_name, it_should, docstring): + config_var_on_disk(config_on_disk, journal_name, it_should, docstring) + + @then( parse( 'the config for journal "{journal_name}" ' - "{it_should:Should} contain\n{some_yaml}", + '{it_should:Should} contain "{some_yaml}"', SHOULD_DICT, ) ) @then(parse('the config {it_should:Should} contain "{some_yaml}"', SHOULD_DICT)) -@then(parse("the config {it_should:Should} contain\n{some_yaml}", SHOULD_DICT)) def config_var_on_disk(config_on_disk, journal_name, it_should, some_yaml): actual = config_on_disk if journal_name: @@ -171,23 +191,27 @@ def config_var_on_disk(config_on_disk, journal_name, it_should, some_yaml): @then( parse( 'the config in memory for journal "{journal_name}" ' - '{it_should:Should} contain "{some_yaml}"', + "{it_should:Should} contain", SHOULD_DICT, ) ) +@then(parse("the config in memory {it_should:Should} contain", SHOULD_DICT)) +def config_var_in_memory_docstring( + config_in_memory, journal_name, it_should, docstring +): + config_var_in_memory(config_in_memory, journal_name, it_should, docstring) + + @then( parse( 'the config in memory for journal "{journal_name}" ' - "{it_should:Should} contain\n{some_yaml}", + '{it_should:Should} contain "{some_yaml}"', SHOULD_DICT, ) ) @then( parse('the config in memory {it_should:Should} contain "{some_yaml}"', SHOULD_DICT) ) -@then( - parse("the config in memory {it_should:Should} contain\n{some_yaml}", SHOULD_DICT) -) def config_var_in_memory(config_in_memory, journal_name, it_should, some_yaml): actual = config_in_memory["overrides"] if journal_name: @@ -213,21 +237,23 @@ def password_was_not_called(cli_run): assert not cli_run["mocks"]["user_input"].return_value.input.called -@then(parse("the cache directory should contain the files\n{file_list}")) -def assert_dir_contains_files(file_list, cache_dir): - assert does_directory_contain_files(file_list, cache_dir["path"]) +@then(parse("the cache directory should contain the files")) +def assert_dir_contains_files(cache_dir, docstring): + assert does_directory_contain_files(docstring, cache_dir["path"]) -@then(parse("the cache directory should contain {number} files")) +@then( + pytest_bdd_parsers_re(r"the cache directory should contain (?P\d+) files") +) def assert_dir_contains_n_files(cache_dir, number): assert does_directory_contain_n_files(cache_dir["path"], number) -@then(parse("the journal directory should contain\n{file_list}")) -def journal_directory_should_contain(config_on_disk, file_list): +@then(parse("the journal directory should contain")) +def journal_directory_should_contain(config_on_disk, docstring): scoped_config = scope_config(config_on_disk, "default") - assert does_directory_contain_files(file_list, scoped_config["journal"]) + assert does_directory_contain_files(docstring, scoped_config["journal"]) @then(parse('journal "{journal_name}" should not exist')) @@ -262,10 +288,10 @@ def directory_should_not_exist(config_on_disk, it_should, journal_name): assert dir_exists == it_should -@then(parse('the content of file "{file_path}" in the cache should be\n{file_content}')) -def content_of_file_should_be(file_path, file_content, cache_dir): +@then(parse('the content of file "{file_path}" in the cache should be')) +def content_of_file_should_be(file_path, cache_dir, docstring): assert cache_dir["exists"] - expected_content = file_content.strip().splitlines() + expected_content = docstring.strip().splitlines() with open(os.path.join(cache_dir["path"], file_path), "r") as f: actual_content = f.read().strip().splitlines() @@ -282,12 +308,12 @@ def content_of_file_should_be(file_path, file_content, cache_dir): ] -@then(parse("the cache should contain the files\n{file_list}")) -def cache_dir_contains_files(file_list, cache_dir): +@then(parse("the cache should contain the files")) +def cache_dir_contains_files(cache_dir, docstring): assert cache_dir["exists"] actual_files = os.listdir(cache_dir["path"]) - expected_files = file_list.split("\n") + expected_files = docstring.split("\n") # sort to deal with inconsistent default file ordering on different OS's actual_files.sort() @@ -336,11 +362,11 @@ def assert_parsed_output_item_count(node_name, number, parsed_output): assert False, f"Language name {lang} not recognized" -@then(parse('"{field_name}" in the parsed output should {comparison}\n{expected_keys}')) -def assert_output_field_content(field_name, comparison, expected_keys, parsed_output): +@then(parse('"{field_name}" in the parsed output should {comparison}')) +def assert_output_field_content(field_name, comparison, parsed_output, docstring): lang = parsed_output["lang"] obj = parsed_output["obj"] - expected_keys = expected_keys.split("\n") + expected_keys = docstring.split("\n") if len(expected_keys) == 1: expected_keys = expected_keys[0] @@ -420,9 +446,13 @@ def editor_filename_suffix(suffix, editor_state): assert editor_state["tmpfile"]["name"].endswith(suffix), (editor_filename, suffix) +@then(parse("the editor file content should {comparison}")) +def contains_editor_file_docstring(comparison, editor_state, docstring): + contains_editor_file(comparison, docstring, editor_state) + + @then(parse('the editor file content should {comparison} "{str_value}"')) @then(parse("the editor file content should {comparison} empty")) -@then(parse("the editor file content should {comparison}\n{str_value}")) def contains_editor_file(comparison, str_value, editor_state): content = editor_state["tmpfile"]["content"] # content = f'\n"""\n{content}\n"""\n' diff --git a/tests/lib/when_steps.py b/tests/lib/when_steps.py index 4cd7d559f..310856505 100644 --- a/tests/lib/when_steps.py +++ b/tests/lib/when_steps.py @@ -34,7 +34,11 @@ def when_we_change_directory(directory_name): # an empty line of input internally for testing purposes. -@when(parse('we run "jrnl {command}" and {input_method}\n{all_input}')) +@when(re(f'we run "jrnl {command}" and {input_method}')) +def we_run_jrnl_docstring(capsys, keyring, request, command, input_method, docstring): + we_run_jrnl(capsys, keyring, request, command, input_method, docstring) + + @when(re(f'we run "jrnl ?{command}" and {input_method} {all_input}')) @when(re(f'we run "jrnl {command}"(?! and)')) @when('we run "jrnl"')