commit 43d20962461e09de50a620493edb2c730b675b60
parent bbdbad0d0a9020e452b15a701a4c8bd86370cd9c
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date: Mon, 21 Oct 2024 17:23:27 +0000
Pass-like handling of unencrypted files is tested
Diffstat:
M | spec/pass_spec.sh | | | 131 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- |
1 file changed, 125 insertions(+), 6 deletions(-)
diff --git a/spec/pass_spec.sh b/spec/pass_spec.sh
@@ -80,7 +80,8 @@ Describe 'Pass-like command'
#| stale.gpg | 3 +++
#| subdir/file.age | 2 ++
#| subdir/file.gpg | 2 ++
- #| 21 files changed, 55 insertions(+)
+ #| y.txt | 3 +++
+ #| 22 files changed, 58 insertions(+)
}
setup_id() {
@@ -138,6 +139,10 @@ Describe 'Pass-like command'
%text | setup_secret '-g'
#|Recipient:myself
#|:--
+ %text >"${PREFIX}/y.txt"
+ #|Unencrypted line 1
+ #|Unencrypted line 2
+ #|Unencrypted line 3
@git -C "${PREFIX}" add .
@git -C "${PREFIX}" commit -m 'Initial setup' >/dev/null
@@ -546,6 +551,11 @@ Describe 'Pass-like command'
The line 20 of output should include 'subdir'
The line 21 of output should include 'file'
The line 22 of output should include 'file'
+ if [ $2 = pashage ]; then
+ The lines of output should equal 22
+ else
+ The line 23 of output should include 'y.txt'
+ fi
End
It 'does not list a file masquerading as a directory'
@@ -714,6 +724,23 @@ Describe 'Pass-like command'
The error should start with "$(expected_err)"
End
+ It 'fails to show a non-existent file'
+ Skip if 'pass(age) needs bash' check_skip $2
+ When run script $1 non-existent
+ The status should equal 1
+ The output should be blank
+ The error should equal \
+ 'Error: non-existent is not in the password store.'
+ End
+
+ It 'does not show an unencrypted file in the store'
+ Skip if 'pass(age) needs bash' check_skip $2
+ When run script $1 show y.txt
+ The status should equal 1
+ The output should be blank
+ The error should equal 'Error: y.txt is not in the password store.'
+ End
+
It 'rejects a path containing ..'
Skip if 'pass(age) needs bash' check_skip $2
When run script $1 subdir/../fluff/one
@@ -745,13 +772,11 @@ Describe 'Pass-like command'
The output should be blank
End
- It 'fails to show a non-existent file'
+ It 'does not look into unencrypted files in the store'
Skip if 'pass(age) needs bash' check_skip $2
- When run script $1 non-existent
- The status should equal 1
+ When run script $1 grep Unencrypted
+ The status should be success
The output should be blank
- The error should equal \
- 'Error: non-existent is not in the password store.'
End
End
@@ -1042,6 +1067,34 @@ Describe 'Pass-like command'
The contents of file "${GITLOG}" should equal "$(expected_log $3)"
End
+ It 'creates a secret file named like an unencrypted file'
+ EDITOR='ed -c'
+ Skip if 'pass(age) needs bash' check_skip $2
+ Data
+ #|a
+ #|New password in a new file
+ #|.
+ #|wq
+ End
+ When run script $1 edit y.txt
+ The file "${PREFIX}/y.txt.$3" should be exist
+ expected_file() { %text:expand
+ #|$1Recipient:myself
+ #|$1:New password in a new file
+ }
+ The contents of file "${PREFIX}/y.txt.$3" should \
+ equal "$(expected_file "$3")"
+ expected_log() { %text:expand
+ #|Add password for y.txt using ed -c.
+ #|
+ #| y.txt.$1 | 2 ++
+ #| 1 file changed, 2 insertions(+)
+ setup_log
+ }
+ The result of function git_log should be successful
+ The contents of file "${GITLOG}" should equal "$(expected_log $3)"
+ End
+
It 'updates a file using EDITOR'
Skip if 'pass(age) needs bash' check_skip $2
Data
@@ -1508,6 +1561,17 @@ Describe 'Pass-like command'
The contents of file "${GITLOG}" should equal "$(setup_log)"
End
+ It 'does not remove an unencrypted file in the store'
+ Skip if 'pass(age) needs bash' check_skip $2
+ When run script $1 rm -f y.txt
+ The status should equal 1
+ The output should be blank
+ The error should include 'y.txt'
+ The file "${PREFIX}/y.txt" should be exist
+ The result of function git_log should be successful
+ The contents of file "${GITLOG}" should equal "$(setup_log)"
+ End
+
It 'rejects a path containing ..'
Skip if 'pass(age) needs bash' check_skip $2
When run script $1 delete subdir/../fluff/one
@@ -1614,6 +1678,34 @@ Describe 'Pass-like command'
The contents of file "${GITLOG}" should equal "$(expected_log $3 $2)"
End
+ It 'moves an unencrypted file without reencrypting it'
+ Skip if 'pass(age) needs bash' check_skip $2
+ When run script $1 mv y.txt shared
+ The error should be blank
+ The file "${PREFIX}/y.txt" should not be exist
+ file_contents() { %text
+ #|Unencrypted line 1
+ #|Unencrypted line 2
+ #|Unencrypted line 3
+ }
+ The contents of file "${PREFIX}/shared/y.txt" \
+ should equal "$(file_contents)"
+ expected_log() {
+ if [ "$2" = pashage ]; then
+ %putsn 'Move y.txt to shared/y.txt'
+ else
+ %putsn 'Rename y.txt to shared.'
+ fi
+ %text
+ #|
+ #| y.txt => shared/y.txt | 0
+ #| 1 file changed, 0 insertions(+), 0 deletions(-)
+ setup_log
+ }
+ The result of function git_log should be successful
+ The contents of file "${GITLOG}" should equal "$(expected_log $3 $2)"
+ End
+
It 'reencrypts relevant files in a moved directory'
Skip if 'pass(age) needs bash' check_skip $2
When run script $1 mv subdir shared/
@@ -1992,6 +2084,33 @@ Describe 'Pass-like command'
The contents of file "${GITLOG}" should equal "$(expected_log $3 $2)"
End
+ It 'copies an unencrypted file without reencrypting it'
+ Skip if 'pass(age) needs bash' check_skip $2
+ When run script $1 cp y.txt shared
+ The error should be blank
+ file_contents() { %text
+ #|Unencrypted line 1
+ #|Unencrypted line 2
+ #|Unencrypted line 3
+ }
+ The contents of file "${PREFIX}/shared/y.txt" \
+ should equal "$(file_contents)"
+ expected_log() {
+ if [ "$2" = pashage ]; then
+ %putsn 'Copy y.txt to shared/y.txt'
+ else
+ %putsn 'Copy y.txt to shared.'
+ fi
+ %text
+ #|
+ #| shared/y.txt | 3 +++
+ #| 1 file changed, 3 insertions(+)
+ setup_log
+ }
+ The result of function git_log should be successful
+ The contents of file "${GITLOG}" should equal "$(expected_log $3 $2)"
+ End
+
It 'reencrypts relevant files in a copied directory'
Skip if 'pass(age) needs bash' check_skip $2
When run script $1 cp subdir shared/