#!/bin/bash
# LOG376 の試験：ダミーの X・LinkedIn（mock.py）と、GitHub の代わりの bare リポジトリで、sns_autopost.py を動かす
set -u
S=$(cd "$(dirname "$0")" && pwd); cd "$S"
python3 mock.py 8765 & MOCK=$!; sleep 1
rm -rf t remote.git log.txt; git clone -q --bare /home/claude/r2r2r-content remote.git; git clone -q remote.git t
python3 - <<'PY'
import json
src=json.load(open('t/sns/LOG375_sns_posts.json')); src['meta']['url']='http://127.0.0.1:8765/article'
json.dump(src,open('t/sns/TEST_sns_posts.json','w'),ensure_ascii=False)
json.dump({'posts':[
 {'id':'T-x','source':'sns/TEST_sns_posts.json','platform':'x','post_at':'2026-10-24T21:00:00+09:00'},
 {'id':'T-li','source':'sns/TEST_sns_posts.json','platform':'linkedin','post_at':'2026-10-24T21:05:00+09:00'},
 {'id':'T-old','source':'sns/TEST_sns_posts.json','platform':'x','post_at':'2026-10-23T05:00:00+09:00'},
 {'id':'T-future','source':'sns/TEST_sns_posts.json','platform':'x','post_at':'2026-10-26T08:00:00+09:00'}]},open('t/sns/schedule.json','w'),ensure_ascii=False)
json.dump({},open('t/sns/posted.json','w'))
PY
cd t; git -c user.name=t -c user.email=t@t add sns; git -c user.name=t -c user.email=t@t commit -qm test; git push -q origin HEAD
export X_API_BASE=http://127.0.0.1:8765 LINKEDIN_API_BASE=http://127.0.0.1:8765 X_API_KEY=k X_API_SECRET=s X_ACCESS_TOKEN=t X_ACCESS_SECRET=ts LINKEDIN_ACCESS_TOKEN=lt AUTOPOST_GIT=1 GIT_AUTHOR_NAME=a GIT_AUTHOR_EMAIL=a@a GIT_COMMITTER_NAME=a GIT_COMMITTER_EMAIL=a@a
export AUTOPOST_NOW=2026-10-24T21:40:00+09:00
echo "== 1. 試し（送らない）"; python3 tools/sns_autopost.py run --dry-run | grep '^\['
echo "== 2. 投稿する"; python3 tools/sns_autopost.py run; echo "exit=$?"
echo "== 3. もう一度動かす（二重投稿しないか）"; python3 tools/sns_autopost.py run; echo "exit=$?"
echo "== posted.json"; cat sns/posted.json
echo "== GitHub の代わりの置き場に残った記録"; git --git-dir=../remote.git log --format='%s' | head -7
echo "== ダミーのサーバーが受け取ったもの"; cat ../log.txt
export AUTOPOST_NOW=2026-10-26T08:10:00+09:00
python3 - <<'PY'
import json;p='sns/TEST_sns_posts.json';d=json.load(open(p));d['posts']['x']='FAIL test';json.dump(d,open(p,'w'),ensure_ascii=False)
PY
echo "== 4. X に断られたとき（403）"; python3 tools/sns_autopost.py run; echo "exit=$?"; python3 -c "import json;print(json.load(open('sns/posted.json'))['T-future'])"
python3 - <<'PY'
import json;p='sns/schedule.json';d=json.load(open(p));d['posts'].append({'id':'T-lock','source':'sns/TEST_sns_posts.json','platform':'x','post_at':'2026-10-26T08:00:00+09:00'});json.dump(d,open(p,'w'),ensure_ascii=False)
PY
printf '#!/bin/sh\nexit 1\n' > ../remote.git/hooks/pre-receive; chmod +x ../remote.git/hooks/pre-receive; : > ../log.txt
echo "== 5. 記録の push が断られたとき"; python3 tools/sns_autopost.py run; echo "exit=$?"; echo "ダミーのサーバーへの送信: $(wc -l < ../log.txt) 回"
rm ../remote.git/hooks/pre-receive
python3 - <<'PY'
import json;p='sns/schedule.json';d=json.load(open(p));d['posts'].append({'id':'T-bad','source':'sns/nope.json','platform':'fb','post_at':'2026-10-26 08:00'});json.dump(d,open(p,'w'),ensure_ascii=False)
PY
echo "== 6. 予定表の書き方が間違っているとき"; python3 tools/sns_autopost.py check; echo "exit=$?"
kill $MOCK
