Files
TashaSkyUp-EternalKernelPyt…/tests/test_git.py
T
Tasha Upchurch 4b55e7203b - Added initial implementation of Git-related functionality in git.py.
- Introduced widget definitions for Git-related operations in `bases.py`.

These changes lay the foundation for Git-related functionality in the codebase and provide widget definitions for interacting with Git repositories.
2023-07-07 18:44:00 -04:00

121 lines
3.9 KiB
Python

import unittest
from unittest.mock import patch, Mock
from git import Repo
from git.exc import GitCommandError
import os
os.putenv('UNIT_TEST', 'True')
from ..git import PublicGitRepo, CloneRepoNode, PullRepoNode, PushRepoNode, SendCommitNode, CreateRepoNode
repo_path = './tmp/test_repo'
commit_message = 'message'
token = 'token'
# use tashaskyups's repo on github for testing
repo_url = "https://github.com/TashaSkyUp/public_repo.git"
class BaseTestCase(unittest.TestCase):
pass
class TestPublicGitRepo(BaseTestCase):
def test_validate_git_repo_url(self):
repo = PublicGitRepo()
# Test with a valid URL
result = repo.validate_git_repo_url(repo_url=repo_url, token=token)
self.assertTrue(result)
# Test with an invalid URL
result = repo.validate_git_repo_url(repo_url='https://github.com', token=token)
self.assertFalse(result)
class TestCloneRepoNode(BaseTestCase):
# @patch.object(Repo, 'clone_from')
def test_clone_repo(self):
import shutil
# delete the repo if it exists first
if os.path.exists(repo_path):
# this fails so
# shutil.rmtree(repo_path)
# use this instead
os.system(f'rmdir "{repo_path}" /S /Q ')
node = CloneRepoNode()
node.clone_repo(repo_url=repo_url, path=repo_path, token=token)
# shutil.rmtree(repo_path)
# os.system(f'rmdir "{repo_path}" /S /Q ')
# mock_clone_from.assert_called_once_with(repo_url, repo_path,
# env={'GIT_ASKPASS': 'echo', 'GIT_USERNAME': 'token'})
class TestPullRepoNode(BaseTestCase):
# @patch.object(Repo, 'remotes')
# @patch.object(Repo, '__init__', return_value=None)
def test_pull_repo(self):
# mock_origin = Mock()
# mock_remotes.origin = mock_origin
node = PullRepoNode()
node.pull_repo(repo_path=repo_path, token=token)
# mock_origin.pull.assert_called_once()
class TestSendCommitNode(BaseTestCase):
# @patch.object(Repo, 'git')
# @patch.object(Repo, 'index')
# @patch.object(Repo, '__init__', return_value=None)
def test_send_commit(self):
import hashlib
data = hashlib.md5().hexdigest()
# write to a file
with open(f'{repo_path}/test.txt', 'w') as f:
f.write(data)
# now commit the file
node = SendCommitNode()
node.send_commit(repo_path=repo_path, commit_message=commit_message, token=token)
# mock_git.add.assert_called_once_with(A=True)
# mock_index.commit.assert_called_once_with(commit_message)
class TestPushRepoNode(BaseTestCase):
# @patch.object(Repo, 'remotes')
# @patch.object(Repo, '__init__', return_value=None)
def test_push_repo(self):
# mock_origin = Mock()
# mock_remotes.origin = mock_origin
node = PushRepoNode()
node.push_repo(repo_path=repo_path, token=token)
# mock_origin.push.assert_called_once()
class TestCreateRepoNode(BaseTestCase):
@patch.object(Repo, 'init')
def test_create_repo(self, mock_init):
node = CreateRepoNode()
node.create_repo(path=repo_path, token=token)
mock_init.assert_called_once_with(repo_path)
if __name__ == '__main__':
# run the tests one at a time in a n order that makes sense
runner = unittest.TextTestRunner()
suite = unittest.TestSuite()
suite.addTest(TestCloneRepoNode('test_clone_repo'))
runner.run(suite)
suite = unittest.TestSuite()
suite.addTest(TestSendCommitNode('test_send_commit'))
runner.run(suite)
suite = unittest.TestSuite()
suite.addTest(TestPushRepoNode('test_push_repo'))
runner.run(suite)
# suite.addTest(TestPublicGitRepo('test_validate_git_repo_url'))
# suite.addTest(TestCreateRepoNode('test_create_repo'))
# suite.addTest(TestPullRepoNode('test_pull_repo'))
# run all the tests
# unittest.main()