Skip to content

Commit

Permalink
test(git-alias): add its unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
vanpipy committed Sep 21, 2023
1 parent d2dde69 commit 53394bf
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 15 deletions.
27 changes: 21 additions & 6 deletions bin/git-alias
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
#!/usr/bin/env bash

options=""

usage() {
cat <<HERE
usage: git alias # list all aliases
or: git alias <search-pattern> # show aliases matching pattern
or: git alias <alias-name> <command> # alias a command
usage: git alias [options] # list all aliases
or: git alias [options] <search-pattern> # show aliases matching pattern
or: git alias [options] <alias-name> <command> # alias a command
options:
--global
For writing options: write to global ~/.gitconfig file
For reading options: read only from global ~/.gitconfig
--local
For writing options: write to the repository .git/config file
For reading options: read only from the repository .git/config
HERE
}

if [[ "$1" == "--local" || "$1" == "--global" ]]; then
options=$1
shift
fi

case $# in
0) git config --get-regexp 'alias.*' | sed 's/^alias\.//' | sed 's/[ ]/ = /' | sort ;;
1) git alias | grep -e "$1" ;;
2) git config --global alias."$1" "$2" ;;
0) git config $options --get-regexp 'alias.*' | sed 's/^alias\.//' | sed 's/[ ]/ = /' | sort ;;
1) git config $options --get-regexp 'alias.*' | sed 's/^alias\.//' | sed 's/[ ]/ = /' | sort | grep -e "$1" ;;
2) git config $options alias."$1" "$2" ;;
*) >&2 echo "error: too many arguments." && usage && exit 1 ;;
esac
57 changes: 54 additions & 3 deletions man/git-alias.1
Original file line number Diff line number Diff line change
@@ -1,58 +1,109 @@
.\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
.TH "GIT\-ALIAS" "1" "August 2021" "" "Git Extras"
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "GIT\-ALIAS" "1" "September 2023" "" "Git Extras"
.
.SH "NAME"
\fBgit\-alias\fR \- Define, search and show aliases
.
.SH "SYNOPSIS"
\fBgit\-alias\fR
.
.br
\fBgit\-alias\fR <search\-pattern>
.
.br
\fBgit\-alias\fR <alias\-name> <command>
.
.br
\fBgit\-alias\fR \-\-global <alias\-name> <command>
.
.br
\fBgit\-alias\fR \-\-local <alias\-name> <command>
.
.SH "DESCRIPTION"
List all aliases, show one alias, or set one (global) alias\.
.
.SH "OPTIONS"
<\-\-global>
.
.P
write and read the config from ~/\.gitconfig file only\.
.
.P
<\-\-local>
.
.P
write and read the config from \.git/config file only\.
.
.P
<search\-pattern>
.
.P
The pattern used to search aliases\.
.
.P
<alias\-name>
.
.P
The name of the alias to create\.
.
.P
<command>
.
.P
The command for which you are creating an alias\.
.
.SH "EXAMPLES"
Defining a new alias:
.
.IP "" 4
.
.nf

$ git alias last "cat\-file commit HEAD"
.
.fi
.
.IP "" 0
.
.P
Providing only one argument, \fBgit\-alias\fR searches for aliases matching the given value:
.
.IP "" 4
.
.nf

$ git alias ^la
last = cat\-file commit HEAD
.
.fi
.
.IP "" 0
.
.P
\fBgit\-alias\fR will show all aliases if no argument is given:
.
.IP "" 4
.
.nf

$ git alias
s = status
amend = commit \-\-amend
rank = shortlog \-sn \-\-no\-merges
whatis = show \-s \-\-pretty=\'tformat:%h (%s, %ad)\' \-\-date=short
whois = !sh \-c \'git log \-i \-1 \-\-pretty="format:%an <%ae>
.
.fi
.
.IP "" 0
.
.SH "AUTHOR"
Written by Jonhnny Weslley <\fIjw@jonhnnyweslley\.net\fR>
.
.SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR>
14 changes: 12 additions & 2 deletions man/git-alias.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions man/git-alias.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,23 @@ git-alias(1) -- Define, search and show aliases
`git-alias`
`git-alias` &lt;search-pattern&gt;
`git-alias` &lt;alias-name&gt; &lt;command&gt;
`git-alias` --global &lt;alias-name&gt; &lt;command&gt;
`git-alias` --local &lt;alias-name&gt; &lt;command&gt;

## DESCRIPTION

List all aliases, show one alias, or set one (global) alias.

## OPTIONS

&lt;--global&gt;

write and read the config from ~/.gitconfig file only.

&lt;--local&gt;

write and read the config from .git/config file only.

&lt;search-pattern&gt;

The pattern used to search aliases.
Expand Down
10 changes: 6 additions & 4 deletions tests/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import tempfile
import git

def invoke_git_extras_command(name):
def invoke_git_extras_command(name, *params):
current_dir = os.path.dirname(os.path.abspath(__file__))
git_extras_bin = os.path.join(current_dir, "..", "bin")
return subprocess.run(os.path.join(git_extras_bin, name), capture_output=True)
script = [os.path.join(git_extras_bin, name), *params]
print(f"Run the script \"{script}\"")
return subprocess.run(script, capture_output=True)

class TempRepository:
def __init__(self, repo_work_dir = None):
Expand Down Expand Up @@ -60,7 +62,7 @@ def teardown(self):
shutil.rmtree(self._cwd, ignore_errors=True)
print(f"The temp directory {self._cwd} has been removed")

def invoke_extras_command(self, name):
def invoke_extras_command(self, name, *params):
command = "git-" + name
print(f"Invoke the git-extras command - {command}")
return invoke_git_extras_command(command)
return invoke_git_extras_command(command, *params)
70 changes: 70 additions & 0 deletions tests/test_git_alias.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
class TestGitAlias:
def test_init(self, temp_repo):
git = temp_repo.get_repo_git()
git.config("--global", "alias.globalalias", "status")
git.config("--global", "alias.x", "status")
git.config("--local", "alias.localalias", "status")
git.config("--local", "alias.y", "status")

def test_list_all(self, temp_repo):
actual = temp_repo.invoke_extras_command("alias")
actual = actual.stdout.decode()
assert "globalalias = status" in actual
assert "x = status" in actual
assert "localalias = status" in actual
assert "y = status" in actual

def test_list_all_globally(self, temp_repo):
actual = temp_repo.invoke_extras_command("alias", "--global")
actual = actual.stdout.decode()
assert "globalalias = status" in actual

def test_list_all_locally(self, temp_repo):
actual = temp_repo.invoke_extras_command("alias", "--local")
actual = actual.stdout.decode()
assert "localalias = status" in actual

def test_search_globally(self, temp_repo):
actual = temp_repo.invoke_extras_command("alias", "--global", "global")
actual = actual.stdout.decode()
assert "globalalias = status" in actual
actual = temp_repo.invoke_extras_command("alias", "--global", "local")
actual = actual.stdout.decode()
assert "" == actual

def test_search_locally(self, temp_repo):
actual = temp_repo.invoke_extras_command("alias", "--local", "local")
actual = actual.stdout.decode()
assert "localalias = status" in actual
actual = temp_repo.invoke_extras_command("alias", "--local", "global")
actual = actual.stdout.decode()
assert "" == actual

def test_get_alias_globally_and_defaultly(self, temp_repo):
actual = temp_repo.invoke_extras_command("alias", "globalalias")
actual = actual.stdout.decode()
assert "globalalias = status" in actual

def test_set_alias_globally_and_defaultly(self, temp_repo):
temp_repo.invoke_extras_command("alias", "globalalias", "diff")
actual = temp_repo.invoke_extras_command("alias")
actual = actual.stdout.decode()
assert "globalalias = diff" in actual

def test_get_alias_locally(self, temp_repo):
actual = temp_repo.invoke_extras_command("alias", "--local", "localalias")
actual = actual.stdout.decode()
assert "localalias = status" in actual

def test_set_alias_locally(self, temp_repo):
temp_repo.invoke_extras_command("alias", "--local", "localalias", "diff")
actual = temp_repo.invoke_extras_command("alias")
actual = actual.stdout.decode()
assert "localalias = diff" in actual

def test_teardown(self, temp_repo):
git = temp_repo.get_repo_git()
git.config("--global", "--unset", "alias.globalalias")
git.config("--global", "--unset", "alias.x")
git.config("--local", "--unset", "alias.localalias")
git.config("--local", "--unset", "alias.y")

0 comments on commit 53394bf

Please sign in to comment.