#!/usr/bin/env bats setup() { cd $WORKSPACE unset CI unset TRAVIS_PULL_REQUEST unset TRAVIS_BRANCH unset TRAVIS_BUILD_ID unset TRAVIS_JOB_NUMBER } setup_dirs() { if [ -f "_Cargo.toml" ]; then mv _Cargo.toml Cargo.toml fi if [ -d "_git" ]; then mv _git .git && git reset --hard master fi } @test "it runs" { run semantic-rs [ "$status" -eq 1 ] } @test "fails without Cargo.toml" { cd empty-dir run semantic-rs [ "$status" -eq 1 ] } @test "fails on non-git directories" { cd not-a-repo setup_dirs run semantic-rs [ "$status" -eq 1 ] } @test "fails with broken Cargo.toml" { cd broken-cargo-toml setup_dirs run semantic-rs [ "$status" -eq 1 ] } @test "Initializes to v1.0.0" { cd initial-release setup_dirs semantic-rs --write=yes --release=no grep -q 'version = "1.0.0"' Cargo.toml } @test "Bumps to next minor" { cd next-minor setup_dirs grep -q 'version = "1.0.0"' Cargo.toml semantic-rs --write=yes --release=no grep -q 'version = "1.1.0"' Cargo.toml run git log --oneline --format=format:%s [ "${lines[0]}" = "Bump version to 1.1.0" ] } @test "No bump when no new commits" { cd no-bump setup_dirs grep -q 'version = "1.1.0"' Cargo.toml run semantic-rs --write=yes --release=no [ "$status" -eq 0 ] [[ "$output" =~ "No version bump. Nothing to do" ]] grep -q 'version = "1.1.0"' Cargo.toml } @test "No crash with malformed tags" { cd malformed-tag setup_dirs semantic-rs } @test "It creates a new tag with message" { cd new-tag setup_dirs run git tag -l [ "$output" = "v1.0.0" ] semantic-rs --write=yes --release=no run git tag -l [ "${lines[0]}" = "v1.0.0" ] [ "${lines[1]}" = "v1.1.0" ] } @test "Runs a dry-run by default" { cd dry-run setup_dirs semantic-rs grep -q 'version = "0.1.0"' Cargo.toml } @test "Runs in write-mode with CI=true" { cd write-mode setup_dirs CI=true semantic-rs --release=no grep -q 'version = "1.0.0"' Cargo.toml } @test "Runs in dry-run-mode with CI=true but dry-run forced" { cd write-mode-disabled setup_dirs CI=true semantic-rs --write=no grep -q 'version = "0.1.0"' Cargo.toml } @test "Respects Git environment variables" { cd env-vars setup_dirs export GIT_COMMITTER_NAME=semantic-rs export GIT_COMMITTER_EMAIL=semantic@rs semantic-rs --write=yes --release=no run git log --oneline --format=format:'%an %ae' [ "${lines[0]}" = "semantic-rs semantic@rs" ] unset GIT_AUTHOR_NAME unset GIT_COMMITTER_EMAIL } @test "Does not run when on wrong branch" { cd wrong-branch setup_dirs run semantic-rs --branch=hamster --release=no [[ "$output" =~ "Current branch is 'master', releases are only done from branch 'hamster'" ]] } @test "Does not fail when project has no remote" { cd has-no-remote setup_dirs CARGO_TOKEN=1234 run semantic-rs --write=yes [ "$status" -eq 0 ] [[ "$output" =~ "semantic-rs can't push changes or create a release on GitHub" ]] }