diff --git a/features/configs/encrypted.json b/features/configs/encrypted.json new file mode 100644 index 00000000..a498974b --- /dev/null +++ b/features/configs/encrypted.json @@ -0,0 +1,14 @@ +{ + "default_hour": 9, + "timeformat": "%Y-%m-%d %H:%M", + "linewrap": 80, + "encrypt": true, + "editor": "", + "default_minute": 0, + "highlight": true, + "password": "", + "journals": { + "default": "features/journals/encrypted.journal" + }, + "tagsymbols": "@" +} diff --git a/features/encryption.feature b/features/encryption.feature new file mode 100644 index 00000000..c7f94d62 --- /dev/null +++ b/features/encryption.feature @@ -0,0 +1,24 @@ + Feature: Multiple journals + + Scenario: Loading an encrypted journal + Given we use the config "encrypted.json" + When we run "jrnl -n 1" and enter "bad doggie no biscuit" + Then we should see the message "Password" + and the output should contain "2013-06-10 15:40 Life is good" + + Scenario: Decrypting a journal + Given we use the config "encrypted.json" + When we run "jrnl --decrypt" and enter "bad doggie no biscuit" + Then we should see the message "Journal decrypted" + and the journal should have 2 entries + and the config should have "encrypt" set to "bool:False" + + Scenario: Encrypting a journal + Given we use the config "basic.json" + When we run "jrnl --encrypt" and enter "swordfish" + Then we should see the message "Journal encrypted" + and the config should have "encrypt" set to "bool:True" + When we run "jrnl -n 1" and enter "swordish" + Then we should see the message "Password" + and the output should contain "2013-06-10 15:40 Life is good" + diff --git a/features/environment.py b/features/environment.py index bebc2150..a25d2fff 100644 --- a/features/environment.py +++ b/features/environment.py @@ -11,6 +11,7 @@ def before_scenario(context, scenario): """Before each scenario, backup all config and journal test data.""" context.messages = StringIO() jrnl.util.STDERR = context.messages + jrnl.util.TEST = True for folder in ("configs", "journals"): original = os.path.join("features", folder) backup = os.path.join("features", folder+"_backup") diff --git a/features/journals/encrypted.journal b/features/journals/encrypted.journal new file mode 100644 index 00000000..1c40a799 --- /dev/null +++ b/features/journals/encrypted.journal @@ -0,0 +1,3 @@ +~ƒ|Ó5‘Ç\<«‰É +hq²ªFÛC’Z[\óÖÏE¨Lùx¼y¹ +e©êowW(Žã³ ¯O4š;¨µpÀÏÜ÷[ˆfþD$K¤7ù 4õ•¡C›ó¡{&;duÑÿjÞàê|Z@“?WÀù·ÆG³þÝ•W ÷ÇÓÛâ,z2Í \ No newline at end of file diff --git a/features/steps/core.py b/features/steps/core.py index bab0ee96..531410aa 100644 --- a/features/steps/core.py +++ b/features/steps/core.py @@ -79,6 +79,20 @@ def journal_doesnt_exist(context, journal_name="default"): journal_path = config['journals'][journal_name] assert not os.path.exists(journal_path) +@then('the config should have "{key}" set to "{value}"') +def config_var(context, key, value): + t, value = value.split(":") + value = { + "bool": lambda v: v.lower() == "true", + "int": int, + "str": str + }[t](value) + with open(jrnl.CONFIG_PATH) as config_file: + config = json.load(config_file) + assert key in config + print key, config[key], type(config[key]), value, type(value) + assert config[key] == value + @then('the journal should have {number:d} entries') @then('the journal should have {number:d} entry') @then('journal "{journal_name}" should have {number:d} entries')