Files
dolt/integration-tests/bats/push.bats
2024-03-27 16:54:46 -07:00

271 lines
6.7 KiB
Bash
Executable File

#!/usr/bin/env bats
load $BATS_TEST_DIRNAME/helper/common.bash
setup() {
# See pull.bats. Can't use common remote server setup since we have multiple databases.
setup_no_dolt_init
TESTDIRS=$(pwd)/testdirs
mkdir -p $TESTDIRS/{rem1,repo1}
# repo1 -> rem1 -> repo2
cd $TESTDIRS/repo1
dolt init
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 remote add test-remote file://../rem1
# table and comits 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"
cd $TESTDIRS
}
teardown() {
teardown_common
rm -rf $TESTDIRS
}
@test "push: push origin" {
cd repo1
setup_remote_server
dolt push origin main
cd ../repo2
dolt pull origin
run dolt sql -q "show tables" -r csv
[ "$status" -eq 0 ]
[ "${#lines[@]}" -eq 2 ]
[[ "$output" =~ "Table" ]] || false
[[ "$output" =~ "t1" ]] || false
}
@test "push: push custom remote" {
cd repo1
setup_remote_server
dolt push test-remote main
cd ../repo2
dolt pull origin
run dolt sql -q "show tables" -r csv
[ "$status" -eq 0 ]
[ "${#lines[@]}" -eq 2 ]
[[ "$output" =~ "Table" ]] || false
[[ "$output" =~ "t1" ]] || false
}
@test "push: push without repository defined throws error" {
cd repo1
setup_remote_server
run dolt push main # should push to origin
[ "$status" -eq 1 ]
[[ "$output" =~ "fatal: remote 'main' not found." ]] || false
run dolt push origin # should not push to current branch since its upstream is not set
[ "$status" -eq 1 ]
[[ "$output" =~ "fatal: The current branch main has no upstream branch." ]] || false
dolt push origin main
cd ../repo2
dolt pull origin
run dolt sql -q "show tables" -r csv
[ "$status" -eq 0 ]
[ "${#lines[@]}" -eq 2 ]
[[ "$output" =~ "Table" ]] || false
[[ "$output" =~ "t1" ]] || false
}
@test "push: push active branch" {
skip "upstream state lost between sessions"
cd repo1
dolt push origin
cd ../repo2
dolt pull origin
run dolt sql -q "show tables" -r csv
[ "$status" -eq 0 ]
[ "${#lines[@]}" -eq 2 ]
[[ "$output" =~ "Table" ]] || false
[[ "$output" =~ "t1" ]] || false
}
@test "push: push feature branch" {
cd repo1
dolt checkout -b feature
setup_remote_server
dolt push origin feature
cd ../repo2
dolt fetch origin feature
dolt checkout feature
run dolt sql -q "show tables" -r csv
[ "$status" -eq 0 ]
[ "${#lines[@]}" -eq 2 ]
[[ "$output" =~ "Table" ]] || false
[[ "$output" =~ "t1" ]] || false
}
@test "push: can set upstream branch with different name" {
cd repo1
dolt checkout -b other
setup_remote_server
dolt push -u origin other:remote-other
run dolt branch -r
[ "$status" -eq 0 ]
[[ "$output" =~ "remote-other" ]] || false
}
@test "push: push aborts if nothing specified, upstream has different name" {
cd repo1
dolt checkout -b other
setup_remote_server
dolt push -u origin other:remote-other
run dolt push
[ "$status" -eq 1 ]
[[ "$output" =~ "the upstream branch of your current branch does not match the name of your current branch" ]] || false
}
@test "push: push --set-upstream persists" {
cd repo1
dolt checkout -b other
setup_remote_server
run dolt push
[ "$status" -eq 1 ]
[[ "$output" =~ "The current branch other has no upstream branch." ]] || false
dolt push -u origin other
# upstream should be set still
run dolt push
[ "$status" -eq 0 ]
[[ "$output" =~ "Everything up-to-date" ]] || false
[[ ! "$output" =~ "The current branch main has no upstream branch." ]] || false
}
@test "push: push without --set-upstream persists when push.autoSetupRemote is set to true" {
if [ "$SQL_ENGINE" = "remote-engine" ]; then
skip "local config change required for test"
fi
cd repo1
dolt checkout -b other
run dolt push
[ "$status" -eq 1 ]
[[ "$output" =~ "The current branch other has no upstream branch." ]] || false
dolt config --local --add push.autoSetUpRemote true
dolt push
# upstream should be set still
run dolt push
[ "$status" -eq 0 ]
[[ "$output" =~ "Everything up-to-date" ]] || false
[[ ! "$output" =~ "The current branch main has no upstream branch." ]] || false
}
@test "push: push without --set-upstream persists when push.autoSetupRemote is set to all capital TRUE" {
if [ "$SQL_ENGINE" = "remote-engine" ]; then
skip "local config change required for test"
fi
cd repo1
dolt checkout -b other
run dolt push
[ "$status" -eq 1 ]
[[ "$output" =~ "The current branch other has no upstream branch." ]] || false
dolt config --local --add push.autoSetUpRemote TRUE
dolt push
# upstream should be set still
run dolt push
[ "$status" -eq 0 ]
[[ "$output" =~ "Everything up-to-date" ]] || false
[[ ! "$output" =~ "The current branch main has no upstream branch." ]] || false
}
@test "push: push --force flag" {
cd repo2
dolt sql -q "create table t2 (a int)"
dolt add .
dolt commit -am "commit to override"
dolt push origin main
cd ../repo1
setup_remote_server
run dolt push origin main
[ "$status" -eq 1 ]
[[ "$output" =~ "hint: Updates were rejected because the tip of your current branch is behind" ]] || false
dolt push --force origin main
}
@test "push: push to unknown remote" {
cd repo1
setup_remote_server
run dolt push unknown main
[ "$status" -eq 1 ]
[[ "$output" =~ "fatal: remote 'unknown' not found" ]] || false
}
@test "push: push unknown branch" {
cd repo1
setup_remote_server
run dolt push origin unknown
[ "$status" -eq 1 ]
[[ "$output" =~ "refspec not found: 'unknown'" ]] || false
}
@test "push: not specifying a branch throws an error" {
cd repo1
setup_remote_server
run dolt push -u origin
[ "$status" -eq 1 ]
[[ "$output" =~ "fatal: The current branch main has no upstream branch." ]] || false
}
@test "push: pushing empty branch does not panic" {
cd repo1
setup_remote_server
run dolt push origin ''
[ "$status" -eq 1 ]
[[ "$output" =~ "invalid ref spec: ''" ]] || false
}
@test "push: --silent suppresses progress message" {
cd repo1
setup_remote_server
run dolt push origin main --silent
[ "$status" -eq 0 ]
! [[ "$output" =~ "Uploading..." ]] || false
}