1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
#!/usr/bin/env bash
# author: deadc0de6 (https://github.com/deadc0de6)
# Copyright (c) 2023, deadc0de6
#
# test compare in profile which includes another
#
## start-cookie
set -eu -o errtrace -o pipefail
cur=$(cd "$(dirname "${0}")" && pwd)
ddpath="${cur}/../"
PPATH="{PYTHONPATH:-}"
export PYTHONPATH="${ddpath}:${PPATH}"
altbin="python3 -m dotdrop.dotdrop"
if hash coverage 2>/dev/null; then
mkdir -p coverages/
altbin="coverage run -p --data-file coverages/coverage --source=dotdrop -m dotdrop.dotdrop"
fi
bin="${DT_BIN:-${altbin}}"
# shellcheck source=tests-ng/helpers
source "${cur}"/helpers
echo -e "$(tput setaf 6)==> RUNNING $(basename "${BASH_SOURCE[0]}") <==$(tput sgr0)"
## end-cookie
################################################################
# this is the test
################################################################
# the dotfile source
tmps=$(mktemp -d --suffix='-dotdrop-tests' || mktemp -d)
mkdir -p "${tmps}"/dotfiles
# the dotfile destination
tmpd=$(mktemp -d --suffix='-dotdrop-tests' || mktemp -d)
clear_on_exit "${tmps}"
clear_on_exit "${tmpd}"
# create the dotfiles already imported
echo "already in" > "${tmps}"/dotfiles/abc
cp "${tmps}"/dotfiles/abc "${tmpd}"/abc
# create the config file
cfg="${tmps}/config.yaml"
cat > "${cfg}" << _EOF
config:
backup: true
create: true
dotpath: dotfiles
dotfiles:
f_abc:
dst: ${tmpd}/abc
src: abc
profiles:
p0:
dotfiles:
include:
- p1
- p2
p1:
dotfiles:
variables:
somevar: somevalue
p2:
dotfiles:
- f_abc
_EOF
cat "${cfg}"
cd "${ddpath}" | ${bin} files -c "${cfg}" -p p0
cnt=$(cd "${ddpath}" | ${bin} files -c "${cfg}" -p p0 | grep '^f_' | wc -l)
[ "${cnt}" != "1" ] && echo "this is bad" && exit 1
# compare
cd "${ddpath}" | ${bin} compare -c "${cfg}" -p p0
echo "modifying"
echo 'modified' > "${tmpd}"/abc
# compare
set +e
cd "${ddpath}" | ${bin} compare -c "${cfg}" -p p0
ret=$?
[ "${ret}" = "0" ] && echo "compare should fail (returned ${ret})" && exit 1
set -e
# count
cnt=$(cd "${ddpath}" | ${bin} files -c "${cfg}" -p p0 -b | grep '^f_' | wc -l)
[ "${cnt}" != "2" ] && echo "not enough dotfile" exit 1
## without dotfiles: entry
# reset dotfile content
echo "already in" > "${tmps}"/dotfiles/abc
cp "${tmps}"/dotfiles/abc "${tmpd}"/abc
cat > "${cfg}" << _EOF
config:
backup: true
create: true
dotpath: dotfiles
dotfiles:
f_abc:
dst: ${tmpd}/abc
src: abc
profiles:
p0:
include:
- p1
- p2
p1:
variables:
somevar: somevalue
p2:
dotfiles:
- f_abc
_EOF
cat "${cfg}"
cd "${ddpath}" | ${bin} files -c "${cfg}" -p p0
cnt=$(cd "${ddpath}" | ${bin} files -c "${cfg}" -p p0 | grep '^f_' | wc -l)
[ "${cnt}" != "1" ] && echo "this is bad" && exit 1
# compare
cd "${ddpath}" | ${bin} compare -c "${cfg}" -p p0
echo "modifying"
echo 'modified' > "${tmpd}"/abc
# compare
set +e
cd "${ddpath}" | ${bin} compare -c "${cfg}" -p p0
ret=$?
[ "${ret}" = "0" ] && echo "compare should fail (returned ${ret})" && exit 1
set -e
# count
cnt=$(cd "${ddpath}" | ${bin} files -c "${cfg}" -p p0 -b | grep '^f_' | wc -l)
[ "${cnt}" != "2" ] && echo "not enough dotfile" exit 1
echo "OK"
exit 0
|