#![cfg(feature = "test-git-remote")]
use {
gluesql_core::prelude::Glue,
gluesql_git_storage::{CommandExt, GitStorage, StorageType},
std::{
env,
fs::{create_dir, remove_dir_all},
process::Command,
},
uuid::Uuid,
};
#[tokio::test]
async fn pull_and_push() {
let remote = env::var("GIT_REMOTE").unwrap_or("git@github.com:gluesql/gluesql.git".to_owned());
let path = ".tmp/gluesql/";
let _ = remove_dir_all(path);
let _ = create_dir(".tmp");
Command::new("git")
.current_dir(".tmp")
.arg("clone")
.arg(&remote)
.execute()
.unwrap();
let branch = format!("test-{}", Uuid::now_v7());
Command::new("git")
.current_dir(path)
.arg("checkout")
.arg("-b")
.arg(&branch)
.execute()
.unwrap();
let mut storage = GitStorage::open(path, StorageType::Json).unwrap();
storage.set_remote(remote.clone());
storage.set_branch(branch.clone());
let mut glue = Glue::new(storage);
glue.execute("CREATE TABLE Foo (id INTEGER);")
.await
.unwrap();
glue.execute("INSERT INTO Foo VALUES (1), (2), (3);")
.await
.unwrap();
let _ = glue.storage.push();
let _ = glue.storage.pull();
let _ = Command::new("git")
.current_dir(path)
.arg("push")
.arg(remote)
.arg("-d")
.arg(branch)
.execute();
}