From 80301a2fd928b87fc38ab70818527cb6f6e45bc2 Mon Sep 17 00:00:00 2001
From: Egor Tensin <Egor.Tensin@gmail.com>
Date: Sat, 31 Jul 2021 18:36:09 +0300
Subject: tests/integration: add example to test examples/cgitize.toml

---
 .github/workflows/ci.yml         |   6 +-
 test/integration/example/test.sh | 137 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 141 insertions(+), 2 deletions(-)
 create mode 100755 test/integration/example/test.sh

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index feb74f2..c4d1aed 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -25,8 +25,10 @@ jobs:
           git config --global user.email 'John.Doe@example.com'
       - name: Install dependencies
         run: pip install -r requirements.txt
-      - name: Integration tests
+      - name: Integration test (local)
         run: ./test/integration/local/test.sh
+      - name: Integration test (example config)
+        run: ./test/integration/example/test.sh
       - name: Unit tests
         run: python -m unittest --buffer
 
@@ -36,7 +38,7 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@v2
-      - name: Integration tests
+      - name: Integration test (Docker)
         run: ./test/integration/docker/test.sh
 
   publish_docker:
diff --git a/test/integration/example/test.sh b/test/integration/example/test.sh
new file mode 100755
index 0000000..4d8ab3a
--- /dev/null
+++ b/test/integration/example/test.sh
@@ -0,0 +1,137 @@
+#!/usr/bin/env bash
+
+set -o errexit -o nounset -o pipefail
+
+script_dir="$( dirname -- "${BASH_SOURCE[0]}" )"
+script_dir="$( cd -- "$script_dir" && pwd )"
+readonly script_dir
+
+readonly cgitize_toml_path="$script_dir/../../../examples/cgitize.toml"
+readonly output_dir='/tmp/cgitize'
+
+clone_via_ssh_true() {
+    sed -i -E -e 's/^clone_via_ssh = (true|false)$/clone_via_ssh = true/' -- "$cgitize_toml_path"
+}
+
+clone_via_ssh_false() {
+    sed -i -E -e 's/^clone_via_ssh = (true|false)$/clone_via_ssh = false/' -- "$cgitize_toml_path"
+}
+
+cleanup() {
+    echo
+    echo ----------------------------------------------------------------------
+    echo Cleaning up
+    echo ----------------------------------------------------------------------
+
+    echo "Removing output directory: $output_dir"
+    rm -rf -- "$output_dir"
+    echo "Reverting clone_via_ssh settings: $cgitize_toml_path"
+    clone_via_ssh_true
+}
+
+cgitize() {
+    echo
+    echo ----------------------------------------------------------------------
+    echo Running cgitize
+    echo ----------------------------------------------------------------------
+
+    python3 -m cgitize.main --config "$cgitize_toml_path"
+}
+
+setup_ssh() {
+    clone_via_ssh_true
+}
+
+setup_https() {
+    clone_via_ssh_false
+}
+
+verify_origin() {
+    if [ "$#" -ne 2 ]; then
+        echo "usage: ${FUNCNAME[0]} REPO URL" >&2
+        return 1
+    fi
+
+    local repo="$1"
+    local expected="$2"
+
+    echo
+    echo ----------------------------------------------------------------------
+    echo "Verifying origin: $repo"
+    echo ----------------------------------------------------------------------
+
+    local repo_dir="$output_dir/$repo"
+
+    local actual
+    actual="$( GIT_DIR="$repo_dir" git config --get remote.origin.url )"
+
+    if [ "$expected" = "$actual" ]; then
+        echo 'It matches.'
+    else
+        echo "It doesn't match!"
+        echo "    Expected: $expected"
+        echo "    Actual:   $actual"
+        return 1
+    fi
+}
+
+verify_repos() {
+    local repo
+    for repo; do
+        echo
+        echo ----------------------------------------------------------------------
+        echo "Verifying repository: $repo"
+        echo ----------------------------------------------------------------------
+
+        local repo_dir="$output_dir/$repo"
+        GIT_DIR="$repo_dir" git rev-parse HEAD > /dev/null
+        echo 'HEAD is fine.'
+
+        if test -f "$repo_dir/info/web/last-modified"; then
+            echo 'last-modified is fine.'
+        else
+            echo 'last-modified is missing!'
+            return 1
+        fi
+    done
+}
+
+test_ssh() {
+    echo
+    echo ======================================================================
+    echo "${FUNCNAME[0]}"
+    echo ======================================================================
+
+    setup_ssh
+    cgitize
+    verify_repos lens cef wintun
+    verify_origin lens 'git@github.com:ekmett/lens.git'
+    verify_origin cef 'git@bitbucket.org:chromiumembedded/cef.git'
+    cleanup
+}
+
+test_https() {
+    echo
+    echo ======================================================================
+    echo "${FUNCNAME[0]}"
+    echo ======================================================================
+
+    setup_https
+    cgitize
+    verify_repos lens cef wintun
+    verify_origin lens 'https://github.com/ekmett/lens.git'
+    verify_origin cef 'https://bitbucket.org/chromiumembedded/cef.git'
+    cleanup
+}
+
+main() {
+    trap cleanup EXIT
+    if [ -z "${CI+y}" ]; then
+        # Skip this on CI; there're no SSH keys to authenticate against GitHub,
+        # etc. there.
+        test_ssh
+    fi
+    test_https
+}
+
+main
-- 
cgit v1.2.3