aboutsummaryrefslogtreecommitdiff
path: root/test/append.t
blob: bba3c601e3371c16f5b7b15ea97e62ecd1582b04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env bash

export test_description="Tests pass otp append commands"

. ./setup.sh

test_expect_success 'Reads non-terminal input' '
  existing="foo bar baz"
  uri="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Foo"

  test_pass_init &&
  "$PASS" insert -e passfile <<< "$existing" &&
  "$PASS" otp append -e passfile <<< "$uri" &&
  [[ $("$PASS" otp uri passfile) == "$uri" ]]
'

test_expect_success 'Reads terminal input in noecho mode' '
  existing="foo bar baz"
  uri="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example"

  test_pass_init &&
  "$PASS" insert -e passfile <<< "$existing" &&
  { expect -d <<EOD
    spawn "$PASS" otp append passfile
    expect {
      "Enter" {
        send "$uri\r"
        exp_continue
      }
      "Retype" {
        send "$uri\r"
        exp_continue
      }
      eof
    }
EOD
  } &&
  [[ $("$PASS" otp uri passfile) == "$uri" ]]
'

test_expect_success 'Reads terminal input in echo mode' '
  existing="foo bar baz"
  uri="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example"

  test_pass_init &&
  "$PASS" insert -e passfile <<< "$existing" &&
  {
    expect <<EOD
      spawn "$PASS" otp append -e passfile
      expect {
        "Enter" {
          send "$uri\r"
          exp_continue
        }
        eof
      }
EOD
  } &&
  [[ $("$PASS" otp uri passfile) == "$uri" ]]
'

test_expect_success 'Prompts before overwriting key URI' '
  existing="foo bar baz"
  uri1="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Foo"
  uri2="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Bar"

  test_pass_init &&
  "$PASS" insert -e passfile <<< "$existing" &&
  "$PASS" otp append -e passfile <<< "$uri1" &&
  {
    expect -d <<EOD
      spawn "$PASS" otp append -e passfile
      expect {
        "Enter" {
          send "$uri2\r"
          exp_continue
        }
        "An OTP secret already exists" {
          send "n\r"
          exp_continue
        }
        eof
      }
EOD
  } &&
  [[ $("$PASS" otp uri passfile) == "$uri1" ]]
'

test_expect_success 'Force overwrites key URI' '
  existing="foo bar baz"
  uri1="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Foo"
  uri2="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Bar"

  test_pass_init &&
  "$PASS" insert -e passfile <<< "$existing" &&
  "$PASS" otp append -e passfile <<< "$uri1" &&
  "$PASS" otp append -ef passfile <<< "$uri2" &&
  [[ $("$PASS" otp uri passfile) == "$uri2" ]]
'

test_expect_success 'Preserves multiline contents' '
  uri1="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Foo"
  uri2="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Bar"

  read -r -d "" existing <<EOF
foo bar baz
zab rab oof
$uri1
baz bar foo
EOF

  read -r -d "" expected <<EOF
foo bar baz
zab rab oof
$uri2
baz bar foo
EOF

  test_pass_init &&
  "$PASS" insert -mf passfile <<< "$existing" &&
  "$PASS" otp append -ef passfile <<< "$uri2" &&
  [[ $("$PASS" show passfile) == "$expected" ]]
'

test_done