jrnl/tests/bdd/features/install.feature
Carl Smedstad 1530ad39a1
Update pytest-bdd to v8.0 (#1955)
* Encapsulate all multiline strings in triple-quotes in Gherkin files

Since pytest-bdd v8.0.0 uses the official Gherkin parser, multiline
strings must now be encapsulated by triple-quotes.

See:
- https://pytest-bdd.readthedocs.io/en/stable/#id2
- https://pytest-bdd.readthedocs.io/en/stable/#docstrings

* Remove comments in Gherkin files causing test breakage

These comments break the step matching.

* Fix compatibility of step-functions matching on multiple lines

In pytest-bdd v8.0.0 it is no longer possible to match based on multiple
lines, which breaks essentially all steps that support docstrings. Solve
this by adding a wrapper-function for each of these instances, that
matches the docstring step, and calls the original function.

So, what used to be:

    @then(parse("the output should match\n{regex}"))
    @then(parse('the output should match "{regex}"'))
    def output_should_match(regex, cli_run):
        ...

Is now:

    @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):
        ...

There is possibly a way around this that is much better than what I've
done here, but this is a start at least.

* Update version requirement of pytest-bdd to >=8.0

* Update tox config to match poetry config

---------

Co-authored-by: Micah Jerome Ellison <micah.jerome.ellison@gmail.com>
2025-02-24 20:16:54 -08:00

117 lines
4 KiB
Gherkin

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"
And the default journal "journal.txt" should be in the "." directory
And the config should contain "encrypt: false"
And the version in the config file should be up-to-date
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"
And the version in the config file should be up-to-date
Scenario: Install jrnl with custom expanded default journal path
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"
And the version in the config file should be up-to-date
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"
And the version in the config file should be up-to-date
When we run "jrnl"
Then we should be prompted for a password
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
"""
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"