6
7
helper_test store
8
9
+test_expect_success 'when xdg file does not exist, xdg file not created' '
10
+ test_path_is_missing "$HOME/.config/git/credentials" &&
11
+ test -s "$HOME/.git-credentials"
12
+'
13
+
14
+test_expect_success 'setup xdg file' '
15
+ rm -f "$HOME/.git-credentials" &&
16
+ mkdir -p "$HOME/.config/git" &&
17
+ >"$HOME/.config/git/credentials"
18
+'
19
+
20
+helper_test store
21
+
22
+test_expect_success 'when xdg file exists, home file not created' '
23
+ test -s "$HOME/.config/git/credentials" &&
24
+ test_path_is_missing "$HOME/.git-credentials"
25
+'
26
+
27
+test_expect_success 'setup custom xdg file' '
28
+ rm -f "$HOME/.git-credentials" &&
29
+ rm -f "$HOME/.config/git/credentials" &&
30
+ mkdir -p "$HOME/xdg/git" &&
31
+ >"$HOME/xdg/git/credentials"
32
+'
33
+
34
+XDG_CONFIG_HOME="$HOME/xdg"
35
+export XDG_CONFIG_HOME
36
+helper_test store
37
+unset XDG_CONFIG_HOME
38
+
39
+test_expect_success 'if custom xdg file exists, home and xdg files not created' '
40
+ test_when_finished "rm -f $HOME/xdg/git/credentials" &&
41
+ test -s "$HOME/xdg/git/credentials" &&
42
+ test_path_is_missing "$HOME/.git-credentials" &&
43
+ test_path_is_missing "$HOME/.config/git/credentials"
44
+'
45
+
46
+test_expect_success 'get: use home file if both home and xdg files have matches' '
47
+ echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
48
+ mkdir -p "$HOME/.config/git" &&
49
+ echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
50
+ check fill store <<-\EOF
51
+ protocol=https
52
+ host=example.com
53
+ --
54
+ protocol=https
55
+ host=example.com
56
+ username=home-user
57
+ password=home-pass
58
+ --
59
+ EOF
60
+'
61
+
62
+test_expect_success 'get: use xdg file if home file has no matches' '
63
+ >"$HOME/.git-credentials" &&
64
+ mkdir -p "$HOME/.config/git" &&
65
+ echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
66
+ check fill store <<-\EOF
67
+ protocol=https
68
+ host=example.com
69
+ --
70
+ protocol=https
71
+ host=example.com
72
+ username=xdg-user
73
+ password=xdg-pass
74
+ --
75
+ EOF
76
+'
77
+
78
+test_expect_success 'get: use xdg file if home file is unreadable' '
79
+ echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
80
+ chmod -r "$HOME/.git-credentials" &&
81
+ mkdir -p "$HOME/.config/git" &&
82
+ echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
83
+ check fill store <<-\EOF
84
+ protocol=https
85
+ host=example.com
86
+ --
87
+ protocol=https
88
+ host=example.com
89
+ username=xdg-user
90
+ password=xdg-pass
91
+ --
92
+ EOF
93
+'
94
+
95
+test_expect_success 'store: if both xdg and home files exist, only store in home file' '
96
+ >"$HOME/.git-credentials" &&
97
+ mkdir -p "$HOME/.config/git" &&
98
+ >"$HOME/.config/git/credentials" &&
99
+ check approve store <<-\EOF &&
100
+ protocol=https
101
+ host=example.com
102
+ username=store-user
103
+ password=store-pass
104
+ EOF
105
+ echo "https://store-user:store-pass@example.com" >expected &&
106
+ test_cmp expected "$HOME/.git-credentials" &&
107
+ test_must_be_empty "$HOME/.config/git/credentials"
108
+'
109
+
110
+
111
+test_expect_success 'erase: erase matching credentials from both xdg and home files' '
112
+ echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
113
+ mkdir -p "$HOME/.config/git" &&
114
+ echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
115
+ check reject store <<-\EOF &&
116
+ protocol=https
117
+ host=example.com
118
+ EOF
119
+ test_must_be_empty "$HOME/.git-credentials" &&
120
+ test_must_be_empty "$HOME/.config/git/credentials"
121
+'
122
+
123
test_done