import os import subprocess import unittest 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): super(TestGitPlugin, self).setUp() # Backup environment variables and set git author self.env_backup = os.environ.copy() os.environ['GIT_AUTHOR_NAME'] = "Pubs test" os.environ['GIT_AUTHOR_EMAIL'] = "unittest@pubs.org" # Setup pubs repository 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 tearDown(self): super().tearDown() os.environ = self.env_backup 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): print(self.default_pubs_dir) 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()