update more tests

This commit is contained in:
Jonathan Wren 2020-10-10 17:04:25 -07:00
parent 9116b63d8a
commit 7368cd61cc
No known key found for this signature in database
GPG key ID: 43D5FF8722E7F68A
7 changed files with 372 additions and 112 deletions

View file

@ -5,7 +5,7 @@ colors:
tags: none tags: none
default_hour: 9 default_hour: 9
default_minute: 0 default_minute: 0
editor: "" editor: noop
encrypt: false encrypt: false
highlight: true highlight: true
journals: journals:

View file

@ -5,7 +5,7 @@ colors:
tags: none tags: none
default_hour: 9 default_hour: 9
default_minute: 0 default_minute: 0
editor: "" editor: noop
encrypt: true encrypt: true
highlight: true highlight: true
journals: journals:

View file

@ -5,7 +5,7 @@ colors:
tags: none tags: none
default_hour: 9 default_hour: 9
default_minute: 0 default_minute: 0
editor: "" editor: noop
encrypt: false encrypt: false
highlight: true highlight: true
journals: journals:

View file

@ -5,7 +5,7 @@ colors:
tags: none tags: none
default_hour: 9 default_hour: 9
default_minute: 0 default_minute: 0
editor: "" editor: noop
encrypt: false encrypt: false
highlight: true highlight: true
journals: journals:

View file

@ -16,7 +16,7 @@ Feature: Journals iteracting with the file system in a way that users can see
Then the output should contain "2013/07/23.txt" or "2013\07\23.txt" Then the output should contain "2013/07/23.txt" or "2013\07\23.txt"
Then the output should contain "2014/03/07.txt" or "2014\03\07.txt" Then the output should contain "2014/03/07.txt" or "2014\03\07.txt"
Scenario: If the journal and it's parent directory don't exist, they should be created Scenario: If the journal and its parent directory don't exist, they should be created
Given we use the config "missing_directory.yaml" Given we use the config "missing_directory.yaml"
Then the journal should not exist Then the journal should not exist
When we run "jrnl This is a new entry in my journal" When we run "jrnl This is a new entry in my journal"

View file

@ -1,19 +1,37 @@
Feature: Custom formats Feature: Custom formats
Scenario: JSON format Scenario Outline: JSON format
Given we use the config "tags.yaml" Given we use the config "<config>.yaml"
And we use the password "test" if prompted
When we run "jrnl --format json"
Then we should get no error
And the output should be parsable as json
And "entries" in the json output should have 3 elements
And "tags" in the json output should contain "@ipsum"
And "tags" in the json output should contain "@tagone"
And "tags" in the json output should contain "@tagthree"
And "tags" in the json output should contain "@tagtwo"
And entry 1 should have an array "tags" with 3 elements
And entry 2 should have an array "tags" with 1 elements
And entry 3 should have an array "tags" with 2 elements
Examples: configs
| config |
| basic_onefile |
| basic_encrypted |
| basic_folder |
| basic_dayone |
Scenario: Exporting dayone to json
Given we use the config "dayone.yaml"
When we run "jrnl --export json" When we run "jrnl --export json"
Then we should get no error Then we should get no error
And the output should be parsable as json And the output should be parsable as json
And "entries" in the json output should have 2 elements And the json output should contain entries.0.uuid = "4BB1F46946AD439996C9B59DE7C4DDC1"
And "tags" in the json output should contain "@idea"
And "tags" in the json output should contain "@journal"
And "tags" in the json output should contain "@dan"
And entry 1 should have an array "tags" with 2 elements
And entry 2 should have an array "tags" with 2 elements
Scenario Outline: Printing a journal that has multiline entries with tags Scenario Outline: Printing a journal that has multiline entries with tags
Given we use the config "<config>.yaml" Given we use the config "<config>.yaml"
And we use the password "test" if prompted
When we run "jrnl -n 1 @ipsum" When we run "jrnl -n 1 @ipsum"
Then we should get no error Then we should get no error
And the output should be And the output should be
@ -41,47 +59,119 @@ Feature: Custom formats
""" """
Examples: configs Examples: configs
| config | | config |
| basic_onefile | | basic_onefile |
| basic_folder | | basic_encrypted |
| basic_dayone | | basic_folder |
| basic_dayone |
Scenario: Exporting using filters should only export parts of the journal Scenario Outline: Exporting using filters should only export parts of the journal
Given we use the config "tags.yaml" Given we use the config "<config>.yaml"
When we run "jrnl -until 'may 2013' --export json" And we use the password "test" if prompted
When we run "jrnl -until 'August 2020' --format json"
Then the output should be parsable as json Then the output should be parsable as json
And "entries" in the json output should have 1 element Then we should get no error
And "tags" in the json output should contain "@idea" And the output should be parsable as json
And "tags" in the json output should contain "@journal" And "entries" in the json output should have 2 elements
And "tags" in the json output should not contain "@dan" And "tags" in the json output should contain "@ipsum"
And "tags" in the json output should contain "@tagone"
And "tags" in the json output should contain "@tagtwo"
And entry 1 should have an array "tags" with 3 elements
And entry 2 should have an array "tags" with 1 elements
Scenario: Exporting using custom templates Examples: configs
Given we use the config "simple.yaml" | config |
| basic_onefile |
| basic_encrypted |
| basic_folder |
| basic_dayone |
Scenario Outline: Exporting using custom templates
Given we use the config "<config>.yaml"
And we load template "sample.template" And we load template "sample.template"
When we run "jrnl --export sample" And we use the password "test" if prompted
When we run "jrnl -1 --format sample"
Then the output should be Then the output should be
""" """
My first entry. The third entry finally after weeks without writing.
--------------- ----------------------------------------------------
Everything is alright I'm so excited about emojis. 💯 🎶 💩
Life is good. Donec semper pellentesque iaculis. Nullam cursus et justo sit amet venenatis.
------------- Vivamus tempus ex dictum metus vehicula gravida. Aliquam sed sem dolor. Nulla
eget ultrices purus. Quisque at nunc at quam pharetra consectetur vitae quis
But I'm better. dolor. Fusce ultricies purus eu est feugiat, quis scelerisque nibh malesuada.
Quisque egestas semper nibh in hendrerit. Nam finibus ex in mi mattis
vulputate. Sed mauris urna, consectetur in justo eu, volutpat accumsan justo.
Phasellus aliquam lacus placerat convallis vestibulum. Curabitur maximus at
ante eget fringilla. @tagthree and also @tagone
""" """
Scenario: Increasing Headings on Markdown export Examples: configs
Given we use the config "markdown-headings-335.yaml" | config |
When we run "jrnl --export markdown" | basic_onefile |
| basic_encrypted |
| basic_folder |
| basic_dayone |
Scenario Outline: Increasing Headings on Markdown export
Given we use the config "<config>.yaml"
And we use the password "test" if prompted
When we open the editor and append
"""
[2020-10-14 13:23] Heading Test
H1-1
=
H1-2
===
H1-3
============================
H2-1
-
H2-2
---
H2-3
----------------------------------
Horizontal Rules (ignore)
---
===
# ATX H1
## ATX H2
### ATX H3
#### ATX H4
##### ATX H5
###### ATX H6
Stuff
More stuff
more stuff again
"""
Then we flush the output
When we run "jrnl -1 --export markdown"
Then the output should be Then the output should be
""" """
# 2015 # 2020
## April ## October
### 2015-04-14 13:23 Heading Test ### 2020-10-14 13:23 Heading Test
#### H1-1 #### H1-1
@ -119,132 +209,280 @@ Feature: Custom formats
more stuff again more stuff again
""" """
# the "deletion" journal is used because it doesn't have a newline at the Examples: configs
# end of the last entry | config |
Scenario: Add a blank line to Markdown export if there isn't one already | basic_onefile |
| basic_encrypted |
| basic_folder |
# | basic_dayone | @todo
Scenario Outline: Add a blank line to Markdown export if there isn't one already
# https://github.com/jrnl-org/jrnl/issues/768 # https://github.com/jrnl-org/jrnl/issues/768
# https://github.com/jrnl-org/jrnl/issues/881 # https://github.com/jrnl-org/jrnl/issues/881
Given we use the config "deletion.yaml" Given we use the config "<config>.yaml"
When we run "jrnl --format markdown" And we use the password "test" if prompted
When we open the editor and append
"""
[2020-10-29 11:11] First entry.
[2020-10-29 11:11] Second entry.
[2020-10-29 11:13] Third entry.
"""
Then we flush the output
When we run "jrnl -3 --format markdown"
Then the output should be Then the output should be
""" """
# 2019 # 2020
## October ## October
### 2019-10-29 11:11 First entry. ### 2020-10-29 11:11 First entry.
### 2019-10-29 11:11 Second entry. ### 2020-10-29 11:11 Second entry.
### 2019-10-29 11:13 Third entry. ### 2020-10-29 11:13 Third entry.
""" """
Examples: configs
| config |
| basic_onefile |
| basic_encrypted |
| basic_folder |
# | basic_dayone | @todo
@skip
Scenario Outline: Exporting to XML
Given we use the config "<config>.yaml"
And we use the password "test" if prompted
When we run "jrnl --export xml"
Then the output should be a valid XML string
And "entries" node 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
| config |
# | basic_onefile | @todo
# | basic_encrypted | @todo
# | basic_folder | @todo
# | basic_dayone | @todo
Scenario: Exporting to XML Scenario: Exporting to XML
Given we use the config "tags.yaml" Given we use the config "tags.yaml"
And we use the password "test" if prompted
When we run "jrnl --export xml" When we run "jrnl --export xml"
Then the output should be a valid XML string Then the output should be a valid XML string
And "entries" node in the xml output should have 2 elements And "entries" node in the xml output should have 2 elements
And "tags" in the xml output should contain ["@idea", "@journal", "@dan"] And "tags" in the xml output should contain ["@idea", "@journal", "@dan"]
And there should be 7 "tag" elements And there should be 7 "tag" elements
Scenario: Exporting tags Scenario Outline: Exporting tags
Given we use the config "tags.yaml" Given we use the config "<config>.yaml"
And we use the password "test" if prompted
When we run "jrnl --export tags" When we run "jrnl --export tags"
Then the output should be Then the output should be
""" """
@idea : 2 @tagtwo : 2
@journal : 1 @tagone : 2
@dan : 1 @tagthree : 1
@ipsum : 1
""" """
Scenario: Exporting fancy Examples: configs
Given we use the config "tags.yaml" | config |
| basic_onefile |
| basic_encrypted |
| basic_folder |
| basic_dayone |
@todo
Scenario Outline: Exporting fancy
# Needs better emoji support
Given we use the config "<config>.yaml"
And we use the password "test" if prompted
When we run "jrnl --export fancy" When we run "jrnl --export fancy"
Then the output should be Then the output should be
""" """
2013-04-09 15:39 2020-08-29 11:11
I have an @idea: Entry the first.
(1) write a command line @journal software Lorem @ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada
(2) ??? quis est ac dignissim. Aliquam dignissim rutrum pretium. Phasellus
(3) PROFIT! pellentesque
augue et venenatis facilisis. Suspendisse potenti. Sed dignissim sed nisl eu
consequat. 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. @tagone and maybe also @tagtwo.
Curabitur accumsan nunc ac neque tristique, eleifend faucibus justo
ullamcorper. Suspendisse at mattis nunc. Nullam eget lacinia urna.
Suspendisse
potenti. Ut urna est, venenatis sed ante in, ultrices congue mi. Maecenas
eget
molestie metus. Mauris porttitor dui ornare gravida porta. Quisque sed
lectus
hendrerit, lacinia ante eget, vulputate ante. Aliquam vitae erat non felis
feugiat sagittis. Phasellus quis arcu fringilla, mattis ligula id,
vestibulum
urna. Vivamus facilisis leo a mi tincidunt condimentum. Donec eu euismod
enim.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu ligula eget
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.
2013-06-10 15:40 2020-08-31 14:32
I met with @dan. A second entry in what I hope to be a long series.
As alway's he shared his latest @idea on how to rule the world with me. Sed sit amet metus et sapien feugiat elementum. Aliquam bibendum lobortis
inst leo
vitae tempus. Donec eleifend nec mi non volutpat. Lorem ipsum dolor sit
amet,
consectetur adipiscing elit. Praesent ut sodales libero. Maecenas nisl
lorem,
vestibulum in tempus sit amet, fermentum ut arcu. Donec vel vestibulum
lectus,
eget pretium enim. Maecenas diam nunc, imperdiet vitae pharetra sed, pretium
id
lectus. Donec eu metus et turpis tempor tristique ac non ex. In tellus arcu,
egestas at efficitur et, ultrices vel est. Sed commodo et nibh non
elementum.
Mauris tempus vitae neque vel viverra. @tagtwo all by its lonesome.
Nulla mattis elementum magna, viverra pretium dui fermentum et. Cras vel
vestibulum odio. Quisque sit amet turpis et urna finibus maximus. Interdum
et
malesuada fames ac ante ipsum primis in faucibus. Fusce porttitor iaculis
sem,
non dictum ipsum varius nec. Nulla eu erat at risus gravida blandit non vel
ante. Nam egestas ipsum leo, eu ultricies ipsum tincidunt vel. Morbi a
commodo
eros.
Nullam dictum, nisl ac varius tempus, ex tortor fermentum nisl, non
tempus dolor neque a lorem. Suspendisse a faucibus ex, vel ornare tortor.
Maecenas tincidunt id felis quis semper. Pellentesque enim libero, fermentum
quis metus id, rhoncus euismod magna. Nulla finibus velit eu purus bibendum
interdum. Integer id justo dui. Integer eu tellus in turpis bibendum
blandit.
Quisque auctor lacinia consectetur.
2020-09-24 09:14
The third entry finally after weeks without writing.
I'm so excited about emojis. 💯 🎶 💩
Donec semper pellentesque iaculis. Nullam cursus et justo sit amet
venenatis.
Vivamus tempus ex dictum metus vehicula gravida. Aliquam sed sem dolor.
Nulla
eget ultrices purus. Quisque at nunc at quam pharetra consectetur vitae quis
dolor. Fusce ultricies purus eu est feugiat, quis scelerisque nibh
malesuada.
Quisque egestas semper nibh in hendrerit. Nam finibus ex in mi mattis
vulputate. Sed mauris urna, consectetur in justo eu, volutpat accumsan
justo.
Phasellus aliquam lacus placerat convallis vestibulum. Curabitur maximus at
ante eget fringilla. @tagthree and also @tagone
""" """
Scenario: Export to yaml Examples: configs
Given we use the config "tags.yaml" | config |
| basic_onefile |
| basic_encrypted |
| basic_folder |
| basic_dayone |
Scenario Outline: Export to yaml
Given we use the config "<config>.yaml"
And we use the password "test" if prompted
And we create cache directory "exported_journal" And we create cache directory "exported_journal"
When we run "jrnl --export yaml -o {cache_dir}" with cache directory "exported_journal" When we run "jrnl --export yaml -o {cache_dir}" with cache directory "exported_journal"
Then cache directory "exported_journal" should contain the files Then cache directory "exported_journal" should contain the files
""" """
[ [
"2013-04-09_i-have-an-idea.md", "2020-08-29_entry-the-first.md",
"2013-06-10_i-met-with-dan.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 "2013-04-09_i-have-an-idea.md" in cache directory "exported_journal" should be And the content of file "2020-08-29_entry-the-first.md" in cache directory "exported_journal" should be
""" """
title: I have an @idea: title: Entry the first.
date: 2013-04-09 15:39 date: 2020-08-29 11:11
starred: False starred: False
tags: idea, journal tags: tagone, ipsum, tagtwo
(1) write a command line @journal software Lorem @ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada
(2) ??? quis est ac dignissim. Aliquam dignissim rutrum pretium. Phasellus pellentesque
(3) PROFIT! augue et venenatis facilisis. Suspendisse potenti. Sed dignissim sed nisl eu
consequat. 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. @tagone and maybe also @tagtwo.
Curabitur accumsan nunc ac neque tristique, eleifend faucibus justo
ullamcorper. Suspendisse at mattis nunc. Nullam eget lacinia urna. Suspendisse
potenti. Ut urna est, venenatis sed ante in, ultrices congue mi. Maecenas eget
molestie metus. Mauris porttitor dui ornare gravida porta. Quisque sed lectus
hendrerit, lacinia ante eget, vulputate ante. Aliquam vitae erat non felis
feugiat sagittis. Phasellus quis arcu fringilla, mattis ligula id, vestibulum
urna. Vivamus facilisis leo a mi tincidunt condimentum. Donec eu euismod enim.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu ligula eget
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.
""" """
Scenario: Add a blank line to YAML export if there isn't one already Examples: configs
| config |
| basic_onefile |
| basic_encrypted |
| basic_folder |
# | basic_dayone |
Scenario Outline: Add a blank line to YAML export if there isn't one already
# https://github.com/jrnl-org/jrnl/issues/768 # https://github.com/jrnl-org/jrnl/issues/768
# https://github.com/jrnl-org/jrnl/issues/881 # https://github.com/jrnl-org/jrnl/issues/881
Given we use the config "deletion.yaml" Given we use the config "<config>.yaml"
And we use the password "test" if prompted
And we create cache directory "bug768" And we create cache directory "bug768"
When we run "jrnl --export yaml -o {cache_dir}" with cache directory "bug768" When we run "jrnl --export yaml -o {cache_dir}" with cache directory "bug768"
Then cache directory "bug768" should contain the files Then cache directory "bug768" should contain the files
""" """
[ [
"2019-10-29_first-entry.md", "2020-08-29_entry-the-first.md",
"2019-10-29_second-entry.md", "2020-08-31_a-second-entry-in-what-i-hope-to-be-a-long-series.md",
"2019-10-29_third-entry.md" "2020-09-24_the-third-entry-finally-after-weeks-without-writing.md"
] ]
""" """
And the content of file "2019-10-29_third-entry.md" in cache directory "bug768" should be And the content of file "2020-09-24_the-third-entry-finally-after-weeks-without-writing.md" in cache directory "bug768" should be
""" """
title: Third entry. title: The third entry finally after weeks without writing.
date: 2019-10-29 11:13 date: 2020-09-24 09:14
starred: False starred: False
tags: tags: tagone, tagthree
I'm so excited about emojis. 💯 🎶 💩
Donec semper pellentesque iaculis. Nullam cursus et justo sit amet venenatis.
Vivamus tempus ex dictum metus vehicula gravida. Aliquam sed sem dolor. Nulla
eget ultrices purus. Quisque at nunc at quam pharetra consectetur vitae quis
dolor. Fusce ultricies purus eu est feugiat, quis scelerisque nibh malesuada.
Quisque egestas semper nibh in hendrerit. Nam finibus ex in mi mattis
vulputate. Sed mauris urna, consectetur in justo eu, volutpat accumsan justo.
Phasellus aliquam lacus placerat convallis vestibulum. Curabitur maximus at
ante eget fringilla. @tagthree and also @tagone
""" """
Scenario: Printing a journal that has multiline entries Examples: configs
Given we use the config "multiline.yaml" | config |
When we run "jrnl -n 1" | basic_onefile |
Then we should get no error | basic_encrypted |
And the output should be | basic_folder |
""" # | basic_dayone | @todo
2013-06-09 15:39 Multiple line entry.
| This is the first line.
| This line doesn't have any ending punctuation
|
| There is a blank line above this.
"""
Scenario: Exporting dayone to json
Given we use the config "dayone.yaml"
When we run "jrnl --export json"
Then we should get no error
And the output should be parsable as json
And the json output should contain entries.0.uuid = "4BB1F46946AD439996C9B59DE7C4DDC1"
Scenario: Empty DayOne entry bodies should not error Scenario: Empty DayOne entry bodies should not error
# https://github.com/jrnl-org/jrnl/issues/780 # https://github.com/jrnl-org/jrnl/issues/780
@ -252,13 +490,28 @@ Feature: Custom formats
When we run "jrnl --short" When we run "jrnl --short"
Then we should get no error Then we should get no error
Scenario: --short displays the short version of entries (only the title) Scenario Outline: --short displays the short version of entries (only the title)
Given we use the config "simple.yaml" Given we use the config "<config>.yaml"
When we run "jrnl -on 2013-06-10 --short" And we use the password "test" if prompted
Then the output should be "2013-06-10 15:40 Life is good." When we run "jrnl -on 2020-08-31 --short"
Then the output should be "2020-08-31 14:32 A second entry in what I hope to be a long series."
Scenario: -s displays the short version of entries (only the title) Examples: configs
Given we use the config "simple.yaml" | config |
When we run "jrnl -on 2013-06-10 -s" | basic_onefile |
Then the output should be "2013-06-10 15:40 Life is good." | basic_encrypted |
| basic_folder |
| basic_dayone |
Scenario Outline: -s displays the short version of entries (only the title)
Given we use the config "<config>.yaml"
And we use the password "test" if prompted
When we run "jrnl -on 2020-08-31 -s"
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 |
| basic_onefile |
| basic_encrypted |
| basic_folder |
| basic_dayone |

View file

@ -177,13 +177,20 @@ def open_editor_and_enter(context, method, text=""):
return tmpfile return tmpfile
if "password" in context:
password = context.password
else:
password = ""
# fmt: off # fmt: off
# see: https://github.com/psf/black/issues/664 # see: https://github.com/psf/black/issues/664
with \ with \
patch("subprocess.call", side_effect=_mock_editor) as mock_editor, \ patch("subprocess.call", side_effect=_mock_editor) as mock_editor, \
patch("getpass.getpass", side_effect=_mock_getpass(password)) as mock_getpass, \
patch("sys.stdin.isatty", return_value=True) \ patch("sys.stdin.isatty", return_value=True) \
: :
context.editor = mock_editor context.editor = mock_editor
context.getpass = mock_getpass
cli(["--edit"]) cli(["--edit"])
# fmt: on # fmt: on