#!/usr/bin/env bats load $BATS_TEST_DIRNAME/helper/common.bash setup() { # We don't use setup_common because we don't want the remote server to run in the top level test directory. # Using multiple databases is kind of inherant to these tests. # Instead, we manualy setup the remote server in the individual tests. setup_no_dolt_init TESTDIRS=$(pwd)/testdirs mkdir -p $TESTDIRS/{rem1,repo1} # repo1 -> rem1 -> repo2 cd $TESTDIRS/repo1 dolt init dolt branch feature dolt remote add origin file://../rem1 dolt remote add test-remote file://../rem1 dolt push origin main cd $TESTDIRS dolt clone file://rem1 repo2 cd $TESTDIRS/repo2 dolt log dolt branch feature dolt remote add test-remote file://../rem1 # table and commits only present on repo1, rem1 at start cd $TESTDIRS/repo1 dolt sql -q "create table t1 (a int primary key, b int)" dolt add . dolt commit -am "First commit" dolt sql -q "insert into t1 values (0,0)" dolt commit -am "Second commit" dolt push origin main cd $TESTDIRS } teardown() { teardown_common rm -rf $TESTDIRS } @test "pull: pull main" { cd repo2 setup_remote_server dolt pull origin run dolt sql -q "show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 2 ] [[ "$output" =~ "Table" ]] || false [[ "$output" =~ "t1" ]] || false run dolt log [ "$status" -eq 0 ] [[ "$output" =~ "First commit" ]] || false [[ "$output" =~ "Second commit" ]] || false } @test "pull: pull custom remote" { cd repo2 setup_remote_server dolt pull test-remote run dolt sql -q "show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 2 ] [[ "$output" =~ "Table" ]] || false [[ "$output" =~ "t1" ]] || false run dolt log [ "$status" -eq 0 ] [[ "$output" =~ "First commit" ]] || false [[ "$output" =~ "Second commit" ]] || false } @test "pull: pull default origin" { cd repo2 dolt remote remove test-remote setup_remote_server dolt pull run dolt sql -q "show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 2 ] [[ "$output" =~ "Table" ]] || false [[ "$output" =~ "t1" ]] || false run dolt log [ "$status" -eq 0 ] [[ "$output" =~ "First commit" ]] || false [[ "$output" =~ "Second commit" ]] || false } @test "pull: pull default custom remote" { cd repo2 dolt remote remove origin setup_remote_server dolt pull run dolt sql -q "show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 2 ] [[ "$output" =~ "Table" ]] || false [[ "$output" =~ "t1" ]] || false run dolt log [ "$status" -eq 0 ] [[ "$output" =~ "First commit" ]] || false [[ "$output" =~ "Second commit" ]] || false } @test "pull: pull up to date does not error" { cd repo2 setup_remote_server dolt pull origin run dolt pull origin [ "$status" -eq 0 ] [[ "$output" =~ "Everything up-to-date" ]] || false run dolt sql -q "show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 2 ] [[ "$output" =~ "Table" ]] || false [[ "$output" =~ "t1" ]] || false } @test "pull: pull unknown remote fails" { cd repo2 setup_remote_server run dolt pull unknown [ "$status" -eq 1 ] [[ "$output" =~ "fatal: remote 'unknown' not found" ]] || false [[ ! "$output" =~ "panic" ]] || false } @test "pull: pull unknown feature branch fails" { cd repo2 dolt checkout feature setup_remote_server run dolt pull origin [ "$status" -eq 1 ] [[ "$output" =~ "You asked to pull from the remote 'origin', but did not specify a branch" ]] || false [[ ! "$output" =~ "panic" ]] || false } @test "pull: pull feature branch" { cd repo1 dolt checkout feature dolt push --set-upstream origin feature cd ../repo2 dolt checkout feature dolt push --set-upstream origin feature cd ../repo1 dolt merge main dolt push cd ../repo2 setup_remote_server dolt pull origin run dolt sql -q "show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 2 ] [[ "$output" =~ "Table" ]] || false [[ "$output" =~ "t1" ]] || false run dolt log [ "$status" -eq 0 ] [[ "$output" =~ "First commit" ]] || false [[ "$output" =~ "Second commit" ]] || false } @test "pull: checkout after fetch a new feature branch" { cd repo1 dolt checkout -b feature2 dolt sql -q "create table t2 (i int primary key);" dolt sql -q "call dolt_add('.');" dolt sql -q "call dolt_commit('-am', 'create t2')" dolt push --set-upstream origin feature2 cd ../repo2 dolt fetch origin feature2 dolt checkout feature2 run dolt sql -q "show tables" -r csv [ "$status" -eq 0 ] [ "${#lines[@]}" -eq 3 ] [[ "$output" =~ "Table" ]] || false [[ "$output" =~ "t1" ]] || false [[ "$output" =~ "t2" ]] || false run dolt log [ "$status" -eq 0 ] [[ "$output" =~ "First commit" ]] || false [[ "$output" =~ "Second commit" ]] || false [[ "$output" =~ "create t2" ]] || false } @test "pull: pull force" { cd repo1 # disable foreign key checks to create merge conflicts dolt sql <