diff --git a/features/exporting.feature b/features/exporting.feature index 26a0f7b4..7f58876f 100644 --- a/features/exporting.feature +++ b/features/exporting.feature @@ -4,49 +4,19 @@ Feature: Expoting a Journal Given we use the config "tags.json" When we run "jrnl --export json" Then we should get no error - and the output should be - """ - { - "entries": [ - { - "body": "(1) write a command line @journal software\n(2) ???\n(3) PROFIT!", - "date": "2013-04-09", - "time": "15:39", - "title": "I have an @idea:" - }, - { - "body": "As alway's he shared his latest @idea on how to rule the world with me.", - "date": "2013-06-10", - "time": "15:40", - "title": "I met with @dan." - } - ], - "tags": { - "@idea": 2, - "@journal": 1, - "@dan": 1 - } - } - """ + and the output should be parsable as json + and "entries" in the json output should have 2 elements + 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" Scenario: Exporting using filters should only export parts of the journal Given we use the config "tags.json" When we run "jrnl -to 'may 2013' --export json" - Then we should get no error - and the output should be - """ - { - "entries": [ - { - "body": "(1) write a command line @journal software\n(2) ???\n(3) PROFIT!", - "date": "2013-04-09", - "time": "15:39", - "title": "I have an @idea:" - } - ], - "tags": { - "@idea": 1, - "@journal": 1 - } - } - """ + # Then we should get no error + Then the output should be parsable as json + and "entries" in the json output should have 1 element + 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 not contain "@dan" + diff --git a/features/steps/core.py b/features/steps/core.py index fc9e15ff..bceab051 100644 --- a/features/steps/core.py +++ b/features/steps/core.py @@ -63,6 +63,33 @@ def run(context, command): def no_error(context): assert context.failed is False +@then('the output should be parsable as json') +def check_output_json(context): + out = context.stdout_capture.getvalue() + assert json.loads(out) + +@then('"{field}" in the json output should have {number:d} elements') +@then('"{field}" in the json output should have 1 element') +def check_output_field(context, field, number=1): + out = context.stdout_capture.getvalue() + out_json = json.loads(out) + assert field in out_json + assert len(out_json[field]) == number + +@then('"{field}" in the json output should not contain "{key}"') +def check_output_field_not_key(context, field, key): + out = context.stdout_capture.getvalue() + out_json = json.loads(out) + assert field in out_json + assert key not in out_json[field] + +@then('"{field}" in the json output should contain "{key}"') +def check_output_field_key(context, field, key): + out = context.stdout_capture.getvalue() + out_json = json.loads(out) + assert field in out_json + assert key in out_json[field] + @then('the output should be') def check_output(context): text = context.text.strip().splitlines()