import os
from server import (
create_repo,
create_user,
get_api_key,
spawn_ragit_server,
)
import shutil
from utils import (
cargo_run,
goto_root,
mk_and_cd_tmp_dir,
rand_word,
write_string,
)
def pull():
goto_root()
server_process = None
try:
server_process = spawn_ragit_server()
create_user(id="test-user", password="password")
api_key = get_api_key(id="test-user", password="password")
create_repo(user="test-user", repo="test-repo", api_key=api_key)
mk_and_cd_tmp_dir()
os.mkdir("A")
os.chdir("A")
cargo_run(["init"])
shutil.copyfile("../../tests/images/empty.png", "sample.png")
write_string("sample1.md", "Hi! this is an image: ")
cargo_run(["add", "sample1.md"])
cargo_run(["config", "--set", "model", "dummy"])
cargo_run(["build"])
u1 = cargo_run(["uid"], stdout=True).strip()
cargo_run(["push", "--remote=http://127.0.0.1:41127/test-user/test-repo"])
assert "Everything up-to-date" in cargo_run(["push", "--remote=http://127.0.0.1:41127/test-user/test-repo"], stdout=True)
cargo_run(["meta", "--set", "key", "value"])
u2 = cargo_run(["uid"], stdout=True).strip()
assert "Everything up-to-date" not in cargo_run(["push", "--remote=http://127.0.0.1:41127/test-user/test-repo"], stdout=True)
os.chdir("..")
cargo_run(["clone", "http://127.0.0.1:41127/test-user/test-repo", "B"])
os.chdir("B")
u3 = cargo_run(["uid"], stdout=True).strip()
assert "Already up to date" in cargo_run(["pull"], stdout=True).strip()
u4 = cargo_run(["uid"], stdout=True).strip()
os.chdir("../A")
shutil.copyfile("../../tests/images/empty.jpg", "sample.jpg")
write_string("sample2.md", "Hi! this is an image: ")
cargo_run(["add", "sample2.md"])
cargo_run(["build"])
magic_word = rand_word()
cargo_run(["meta", "--set", "magic_word", magic_word])
u5 = cargo_run(["uid"], stdout=True).strip()
assert "Everything up-to-date" not in cargo_run(["push", "--remote=http://127.0.0.1:41127/test-user/test-repo"], stdout=True)
os.chdir("../B")
assert "Already up to date" not in cargo_run(["pull"], stdout=True).strip()
assert magic_word in cargo_run(["meta", "--get", "magic_word"], stdout=True)
assert cargo_run(["ii-status"], stdout=True).strip() == "complete"
cargo_run(["check"])
u6 = cargo_run(["uid"], stdout=True).strip()
assert u1 != u2
assert u2 == u3
assert u3 == u4
assert u4 != u5
assert u5 == u6
finally:
if server_process is not None:
server_process.kill()