(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ <'credential-store tests'>)} spids: [4] ) ] ) (C {<.>} {<'./test-lib.sh'>}) (C {<.>} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) <'/lib-credential.sh'>}) (C {<helper_test>} {<store>}) (C {<test_expect_success>} {(SQ <'when xdg file does not exist, xdg file not created'>)} { (SQ <'\n'> <'\ttest_path_is_missing "$HOME/.config/git/credentials" &&\n'> <'\ttest -s "$HOME/.git-credentials"\n'> ) } ) (C {<test_expect_success>} {(SQ <'setup xdg file'>)} { (SQ <'\n'> <'\trm -f "$HOME/.git-credentials" &&\n'> <'\tmkdir -p "$HOME/.config/git" &&\n'> <'\t>"$HOME/.config/git/credentials"\n'> ) } ) (C {<helper_test>} {<store>}) (C {<test_expect_success>} {(SQ <'when xdg file exists, home file not created'>)} { (SQ <'\n'> <'\ttest -s "$HOME/.config/git/credentials" &&\n'> <'\ttest_path_is_missing "$HOME/.git-credentials"\n'> ) } ) (C {<test_expect_success>} {(SQ <'setup custom xdg file'>)} { (SQ <'\n'> <'\trm -f "$HOME/.git-credentials" &&\n'> <'\trm -f "$HOME/.config/git/credentials" &&\n'> <'\tmkdir -p "$HOME/xdg/git" &&\n'> <'\t>"$HOME/xdg/git/credentials"\n'> ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:XDG_CONFIG_HOME) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$HOME') <'/xdg'>)} spids: [86] ) ] ) (C {<export>} {<XDG_CONFIG_HOME>}) (C {<helper_test>} {<store>}) (C {<unset>} {<XDG_CONFIG_HOME>}) (C {<test_expect_success>} {(SQ <'if custom xdg file exists, home and xdg files not created'>)} { (SQ <'\n'> <'\ttest_when_finished "rm -f $HOME/xdg/git/credentials" &&\n'> <'\ttest -s "$HOME/xdg/git/credentials" &&\n'> <'\ttest_path_is_missing "$HOME/.git-credentials" &&\n'> <'\ttest_path_is_missing "$HOME/.config/git/credentials"\n'> ) } ) (C {<test_expect_success>} {(SQ <'get: use home file if both home and xdg files have matches'>)} { (SQ <'\n'> <'\techo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&\n'> <'\tmkdir -p "$HOME/.config/git" &&\n'> <'\techo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&\n'> <'\tcheck fill store <<-\\EOF\n'> <'\tprotocol=https\n'> <'\thost=example.com\n'> <'\t--\n'> <'\tprotocol=https\n'> <'\thost=example.com\n'> <'\tusername=home-user\n'> <'\tpassword=home-pass\n'> <'\t--\n'> <'\tEOF\n'> ) } ) (C {<test_expect_success>} {(SQ <'get: use xdg file if home file has no matches'>)} { (SQ <'\n'> <'\t>"$HOME/.git-credentials" &&\n'> <'\tmkdir -p "$HOME/.config/git" &&\n'> <'\techo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&\n'> <'\tcheck fill store <<-\\EOF\n'> <'\tprotocol=https\n'> <'\thost=example.com\n'> <'\t--\n'> <'\tprotocol=https\n'> <'\thost=example.com\n'> <'\tusername=xdg-user\n'> <'\tpassword=xdg-pass\n'> <'\t--\n'> <'\tEOF\n'> ) } ) (C {<test_expect_success>} {<POSIXPERM> <Id.Lit_Comma ','> <SANITY>} {(SQ <'get: use xdg file if home file is unreadable'>)} { (SQ <'\n'> <'\techo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&\n'> <'\tchmod -r "$HOME/.git-credentials" &&\n'> <'\tmkdir -p "$HOME/.config/git" &&\n'> <'\techo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&\n'> <'\tcheck fill store <<-\\EOF\n'> <'\tprotocol=https\n'> <'\thost=example.com\n'> <'\t--\n'> <'\tprotocol=https\n'> <'\thost=example.com\n'> <'\tusername=xdg-user\n'> <'\tpassword=xdg-pass\n'> <'\t--\n'> <'\tEOF\n'> ) } ) (C {<test_expect_success>} {(SQ <'store: if both xdg and home files exist, only store in home file'>)} { (SQ <'\n'> <'\t>"$HOME/.git-credentials" &&\n'> <'\tmkdir -p "$HOME/.config/git" &&\n'> <'\t>"$HOME/.config/git/credentials" &&\n'> <'\tcheck approve store <<-\\EOF &&\n'> <'\tprotocol=https\n'> <'\thost=example.com\n'> <'\tusername=store-user\n'> <'\tpassword=store-pass\n'> <'\tEOF\n'> <'\techo "https://store-user:store-pass@example.com" >expected &&\n'> <'\ttest_cmp expected "$HOME/.git-credentials" &&\n'> <'\ttest_must_be_empty "$HOME/.config/git/credentials"\n'> ) } ) (C {<test_expect_success>} {(SQ <'erase: erase matching credentials from both xdg and home files'>)} { (SQ <'\n'> <'\techo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&\n'> <'\tmkdir -p "$HOME/.config/git" &&\n'> <'\techo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&\n'> <'\tcheck reject store <<-\\EOF &&\n'> <'\tprotocol=https\n'> <'\thost=example.com\n'> <'\tEOF\n'> <'\ttest_must_be_empty "$HOME/.git-credentials" &&\n'> <'\ttest_must_be_empty "$HOME/.config/git/credentials"\n'> ) } ) (C {<test_done>}) ] )