Skip to content

Commit

Permalink
test(git-archive-file): add unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
vanpipy committed Oct 14, 2023
1 parent bddb987 commit 40444d1
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 11 deletions.
52 changes: 41 additions & 11 deletions tests/helper.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import os
import subprocess
import shutil
import tempfile
import git
import os, subprocess, stat, shutil, tempfile, git

CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
GIT_EXTRAS_BIN = os.path.join(CURRENT_DIR, "..", "bin")
GIT_EXTRAS_HELPER = os.path.join(CURRENT_DIR, "..", "helper")

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")
script = [os.path.join(git_extras_bin, name), *params]
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):
if repo_work_dir == None:
repo_work_dir = tempfile.mkdtemp()
self._system_tmpdir = tempfile.gettempdir()
self._cwd = repo_work_dir
self._tempdirname = self._cwd[len(self._system_tmpdir) + 1:]
self._git_repo = git.Repo.init(repo_work_dir)
self._files = []

Expand All @@ -26,6 +26,9 @@ def switch_cwd_under_repo(self):
def get_cwd(self):
return self._cwd

def get_repo_dirname(self):
return self._tempdirname

def get_repo_git(self):
return self._git_repo.git

Expand Down Expand Up @@ -63,6 +66,33 @@ def teardown(self):
print(f"The temp directory {self._cwd} has been removed")

def invoke_extras_command(self, name, *params):
command = "git-" + name
print(f"Invoke the git-extras command - {command}")
return invoke_git_extras_command(command, *params)
command_name = "git-" + name
print(f"Invoke the git-extras command - {command_name}")
return invoke_git_extras_command(command_name, *params)

def invoke_installed_extras_command(self, name, *params):
command_name = "git-" + name
print(f"Invoke the git-extras command - {command_name}")
origin_extras_command = os.path.join(GIT_EXTRAS_BIN, command_name)
temp_extras_command = os.path.join(self._cwd, command_name)
helpers = [
os.path.join(GIT_EXTRAS_HELPER, "git-extra-utility"),
os.path.join(GIT_EXTRAS_HELPER, "is-git-repo")]

if not os.path.exists(temp_extras_command):
whole = []
with open(temp_extras_command, "w") as t:
for helper in helpers:
with open(helper) as h:
content = h.read()
whole.extend(content.splitlines())
with open(origin_extras_command) as o:
content = o.read()
first, *rest = content.splitlines()
whole.extend(rest)
whole.insert(0, first)
t.write("\n".join(whole))
print("Update file {temp_extras_command}:\n{t.read()}")
os.chmod(temp_extras_command, 0o775)

return subprocess.run([temp_extras_command, *params], capture_output=True)
40 changes: 40 additions & 0 deletions tests/test_archive_file.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import os

# Testcases issue https://github.com/tj/git-extras/issues/1081
class TestGitArchiveFile:
def test_init(self, temp_repo):
git = temp_repo.get_repo_git()
tmp_file = temp_repo.get_file(0)
temp_repo.writefile(tmp_file, "data")
git.add(".")
git.commit("-m", "test: add data")
git.tag("0.1.0", "-m", "bump: 0.1.0")

def test_archive_file_on_tags_branch(self, temp_repo):
git = temp_repo.get_repo_git()
git.checkout("-b", "tags0.1.0")
temp_repo.invoke_installed_extras_command("archive-file")
filename = "{0}.{1}.{2}".format(temp_repo.get_repo_dirname(), git.describe(), "zip")
assert filename in os.listdir()

def test_archive_file_on_any_not_tags_branch_without_default_branch(self, temp_repo):
git = temp_repo.get_repo_git()
git.checkout("-b", "not-tags-branch")
temp_repo.invoke_installed_extras_command("archive-file")
filename = "{0}.{1}.{2}.{3}".format(
temp_repo.get_repo_dirname(),
git.describe("--always", "--long"),
"not-tags-branch",
"zip")
assert filename in os.listdir()

def test_archive_file_on_any_not_tags_branch_with_default_branch(self, temp_repo):
git = temp_repo.get_repo_git()
git.checkout("master")
git.config("git-extras.default-branch", "master")
temp_repo.invoke_installed_extras_command("archive-file")
filename = "{0}.{1}.{2}".format(
temp_repo.get_repo_dirname(),
git.describe("--always", "--long"),
"zip")
assert filename in os.listdir()

0 comments on commit 40444d1

Please sign in to comment.