Skip to content

Commit 99ecdc2

Browse files
committed
use a modern test script
1 parent 3e7e49e commit 99ecdc2

2 files changed

Lines changed: 69 additions & 30 deletions

File tree

script/test

Lines changed: 54 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
1-
#!/bin/bash
1+
#! /usr/bin/env bash
22

33
# run script/test -h for help
44

5+
# COLORS
6+
OFF='\033[0m'
7+
RED='\033[0;31m'
8+
GREEN='\033[0;32m'
9+
BLUE='\033[0;34m'
10+
511
set -e
612

713
function usage()
814
{
915
echo -e "\t ================== script/test usage =================="
1016
echo -e "\t-h --help : displays help message"
17+
echo -e "\t-k --no-linter : disables linting tests"
1118
echo -e "\t-d --disable-bootstrap : disables bootstrap"
12-
echo -e "\n\t Suggested flags for development: script/test -d"
19+
echo -e "\n\t Suggested flags for development: script/test -d -s"
1320
}
1421

1522
while [ "$1" != "" ]; do
@@ -35,42 +42,64 @@ while [ "$1" != "" ]; do
3542
shift
3643
done
3744

38-
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )"
39-
40-
export PATH=/usr/share/rbenv/shims:$PATH
41-
export RBENV_VERSION="$(cat "${DIR}/.ruby-version")"
42-
43-
TRASHDIR=$(mktemp -d /tmp/cibuild.XXXXXXXXXXXXXXXXXX)
44-
cleanup() {
45-
rm -rf "$TRASHDIR"
46-
}
47-
trap cleanup EXIT
48-
49-
cd "$DIR"
50-
. "${DIR}/script/lib/fold.sh"
45+
# setup
46+
export DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )"
47+
[ -z "$RBENV_VERSION" ] && export RBENV_VERSION=$(cat "$DIR/.ruby-version")
5148

5249
if [[ -z $no_bootstrap ]]; then
5350
# bootstrap
54-
begin_fold "Bootstrapping"
55-
./script/bootstrap
56-
end_fold
51+
echo -e "\n🥾 ${BLUE}Bootstrapping: $(date "+%H:%M:%S")${OFF}\n"
52+
echo "%%%FOLD {bootstrap}%%%"
53+
cd "$DIR"
54+
script/bootstrap
55+
echo "%%%END FOLD%%%"
5756
else
58-
echo -e "\nBypass Bootstrap"
57+
echo -e "\n⏩ ${BLUE}Skipping Bootstrap${OFF}"
5958
fi
6059

61-
bundle exec rspec spec/unit && rspec_exit=$? || rspec_exit=$?
60+
# Run Rubocop
61+
if [[ -z $no_linter ]]; then
62+
echo -e "\n🤖 ${BLUE}Running Rubocop: $(date "+%H:%M:%S")${OFF}\n"
63+
bundle exec bin/rubocop
64+
else
65+
echo -e "\n⏩ ${BLUE}Skipping Rubocop${OFF}"
66+
fi
67+
68+
# run tests
69+
echo -e "\n🧪 ${BLUE}Running tests: $(date "+%H:%M:%S")${OFF}\n"
70+
cd "$(dirname $0)/.."
6271

63-
cat "$DIR/coverage/coverage.txt"
64-
grep -q "You're all set, friend" "$DIR/coverage/coverage.txt" && cov_exit=0 || cov_exit=1
72+
bundle exec bin/rspec spec/unit && rspec_exit=$? || rspec_exit=$?
73+
74+
total_coverage=$(cat "$DIR/coverage/total-coverage.txt")
75+
76+
if grep -q "100.0" "$DIR/coverage/total-coverage.txt"; then
77+
cov_exit=0
78+
echo -e "\n✅ Total Coverage: ${GREEN}$total_coverage${OFF}"
79+
else
80+
cov_exit=1
81+
echo -e "\n❌ Total Coverage: ${RED}$total_coverage${OFF}"
82+
fi
6583

6684
echo ""
6785
echo "---------------------------------------"
68-
echo "Summary Results"
86+
echo "📊 Summary Results"
6987
echo "---------------------------------------"
7088
echo ""
71-
echo "rspec: exitcode=${rspec_exit}"
72-
echo "coverage: exitcode=${cov_exit}"
89+
90+
if [[ $rspec_exit == 0 ]]; then
91+
echo -e "${GREEN}rspec: exitcode=${rspec_exit}${OFF}"
92+
else
93+
echo -e "${RED}rspec: exitcode=${rspec_exit}${OFF}"
94+
fi
95+
96+
if [[ $cov_exit == 0 ]]; then
97+
echo -e "✅ \033[0;32mcoverage: exitcode=${cov_exit}\033[0m"
98+
else
99+
echo -e "❌ \033[0;31mcoverage: exitcode=${cov_exit}\033[0m"
100+
fi
73101

74102
[ $rspec_exit -gt 0 ] && exit 1
75103
[ $cov_exit -gt 0 ] && exit 1
104+
76105
exit 0

spec/unit/spec_helper.rb

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,26 @@
2121
require "vcr"
2222
require "webmock/rspec"
2323

24+
COV_DIR = File.expand_path("../../coverage", File.dirname(__FILE__))
25+
26+
SimpleCov.root File.expand_path("..", File.dirname(__FILE__))
27+
SimpleCov.coverage_dir COV_DIR
28+
2429
SimpleCov.formatters = [
2530
SimpleCov::Formatter::HTMLFormatter,
2631
SimpleCov::Formatter::ERBFormatter
2732
]
28-
SimpleCov.start do
29-
# don't show specs as missing coverage for themselves
30-
add_filter "/spec/"
3133

32-
# don't analyze coverage for gems
33-
add_filter "/vendor/gems/"
34+
SimpleCov.minimum_coverage 100
35+
36+
SimpleCov.at_exit do
37+
File.write("#{COV_DIR}/total-coverage.txt", SimpleCov.result.covered_percent)
38+
SimpleCov.result.format!
39+
end
40+
41+
SimpleCov.start do
42+
add_filter "spec/"
43+
add_filter "vendor/gems/"
3444
end
3545

3646
require_relative "../../lib/entitlements"

0 commit comments

Comments
 (0)