You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
3.6 KiB

import unittest
import subprocess
import sand_env
from pubs import config
def git_hash(pubsdir):
"""Return the git revision"""
hash_cmd = ('git', '-C', pubsdir, 'rev-parse', 'HEAD')
return subprocess.check_output(hash_cmd)
class TestGitPlugin(sand_env.SandboxedCommandTestCase):
def setUp(self, nsec_stat=True):
super(TestGitPlugin, self).setUp()
self.execute_cmds([('pubs init',)])
conf = config.load_conf(path=self.default_conf_path)
conf['plugins']['active'] = ['git']
config.save_conf(conf, path=self.default_conf_path)
def test_git(self):
self.execute_cmds([('pubs add data/pagerank.bib',)])
hash_a = git_hash(self.default_pubs_dir)
self.execute_cmds([('pubs add data/pagerank.bib',)])
hash_b = git_hash(self.default_pubs_dir)
self.execute_cmds([('pubs rename Page99a ABC',)])
hash_c = git_hash(self.default_pubs_dir)
self.execute_cmds([('pubs remove ABC', ['y'])])
hash_d = git_hash(self.default_pubs_dir)
self.execute_cmds([('pubs doc add testrepo/doc/Page99.pdf Page99',)])
hash_e = git_hash(self.default_pubs_dir)
self.execute_cmds([('pubs doc remove Page99', ['y'])])
hash_f = git_hash(self.default_pubs_dir)
self.execute_cmds([('pubs tag Page99 bla+bli',)])
hash_g = git_hash(self.default_pubs_dir)
self.execute_cmds([('pubs list',)])
hash_h = git_hash(self.default_pubs_dir)
self.execute_cmds([('pubs edit Page99', ['@misc{Page99, title="TTT" author="X. YY"}', 'y',
'@misc{Page99, title="TTT", author="X. YY"}', ''])])
hash_i = git_hash(self.default_pubs_dir)
self.assertNotEqual(hash_a, hash_b)
self.assertNotEqual(hash_b, hash_c)
self.assertNotEqual(hash_c, hash_d)
self.assertNotEqual(hash_d, hash_e)
self.assertNotEqual(hash_e, hash_f)
self.assertNotEqual(hash_f, hash_g)
self.assertEqual(hash_g, hash_h)
self.assertNotEqual(hash_h, hash_i)
# # basically can't test that because each command is not completely independent in
# # SandoboxedCommands.
# # will work if we use subprocess.
# conf = config.load_conf(path=self.default_conf_path)
# conf['plugins']['active'] = []
# config.save_conf(conf, path=self.default_conf_path)
#
# self.execute_cmds([('pubs add data/pagerank.bib',)])
# hash_j = git_hash(self.default_pubs_dir)
#
# self.assertEqual(hash_i, hash_j)
def test_manual(self):
conf = config.load_conf(path=self.default_conf_path)
conf['plugins']['active'] = ['git']
conf['plugins']['git']['manual'] = True
config.save_conf(conf, path=self.default_conf_path)
# this three lines just to initialize the git HEAD
self.execute_cmds([('pubs add data/pagerank.bib',)])
self.execute_cmds([('pubs git add .',)])
self.execute_cmds([('pubs git commit -m "initial_commit"',)])
self.execute_cmds([('pubs add data/pagerank.bib',)])
hash_j = git_hash(self.default_pubs_dir)
self.execute_cmds([('pubs add data/pagerank.bib',)])
hash_k = git_hash(self.default_pubs_dir)
self.assertEqual(hash_j, hash_k)
self.execute_cmds([('pubs git add .',)])
hash_l = git_hash(self.default_pubs_dir)
self.assertEqual(hash_k, hash_l)
self.execute_cmds([('pubs git commit -m "abc"',)])
hash_m = git_hash(self.default_pubs_dir)
self.assertNotEqual(hash_l, hash_m)
if __name__ == '__main__':
unittest.main()