"""Unit tests: copy_perms""" import os import pytest OCTAL = '7654' NON_OCTAL = '9876' @pytest.mark.parametrize( 'stat_broken', [True, False], ids=['normal', 'stat broken']) def test_copy_perms(runner, yadm, tmpdir, stat_broken): """Test function copy_perms""" src_mode = 0o754 dst_mode = 0o644 source = tmpdir.join('source') source.write('test', ensure=True) source.chmod(src_mode) dest = tmpdir.join('dest') dest.write('test', ensure=True) dest.chmod(dst_mode) override_stat = '' if stat_broken: override_stat = 'function stat() { echo broken; }' script = f""" YADM_TEST=1 source {yadm} {override_stat} copy_perms "{source}" "{dest}" """ run = runner(command=['bash'], inp=script) assert run.success assert run.err == '' assert run.out == '' expected = dst_mode if stat_broken else src_mode assert oct(os.stat(dest).st_mode)[-3:] == oct(expected)[-3:] @pytest.mark.parametrize( 'stat_output', [OCTAL, NON_OCTAL], ids=['octal', 'non-octal']) def test_get_mode(runner, yadm, stat_output): """Test function get_mode""" script = f""" YADM_TEST=1 source {yadm} function stat() {{ echo {stat_output}; }} mode=$(get_mode abc) echo "MODE:$mode" """ run = runner(command=['bash'], inp=script) assert run.success assert run.err == '' expected = OCTAL if stat_output == OCTAL else "" assert f'MODE:{expected}\n' in run.out