From ed24477fd3e4eb7837a05d644052322b50ee2496 Mon Sep 17 00:00:00 2001 From: Andy Feller Date: Thu, 24 Oct 2024 10:19:50 -0400 Subject: [PATCH] Add comprehensive testscript for gh ext commandset Rather than multiple separate testscripts per `gh ext` subcommand, this commit adds a comprehensive test around `gh extension` commandset. --- acceptance/acceptance_test.go | 9 +++ .../testdata/extension/commandset.txtar | 66 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 acceptance/testdata/extension/commandset.txtar diff --git a/acceptance/acceptance_test.go b/acceptance/acceptance_test.go index 24cb083c9..b22929ed5 100644 --- a/acceptance/acceptance_test.go +++ b/acceptance/acceptance_test.go @@ -54,6 +54,15 @@ func TestGPGKeys(t *testing.T) { testscript.Run(t, testScriptParamsFor(tsEnv, "gpg-key")) } +func TestExtensions(t *testing.T) { + var tsEnv testScriptEnv + if err := tsEnv.fromEnv(); err != nil { + t.Fatal(err) + } + + testscript.Run(t, testScriptParamsFor(tsEnv, "extension")) +} + func TestIssues(t *testing.T) { var tsEnv testScriptEnv if err := tsEnv.fromEnv(); err != nil { diff --git a/acceptance/testdata/extension/commandset.txtar b/acceptance/testdata/extension/commandset.txtar new file mode 100644 index 000000000..e994ec3b0 --- /dev/null +++ b/acceptance/testdata/extension/commandset.txtar @@ -0,0 +1,66 @@ +# Setup environment variables used for testscript +env EXT_NAME=${SCRIPT_NAME}-${RANDOM_STRING} +env EXT_SCRIPT=gh-${EXT_NAME} +env REPO=gh-${EXT_NAME} + +# Use gh as a credential helper +exec gh auth setup-git + +# Create local repository for extension +exec gh extension create $EXT_NAME +cd $REPO + +# Setup v1 executable baseline for extension +mv ../v1.sh $EXT_SCRIPT +chmod 777 $EXT_SCRIPT +exec git add $EXT_SCRIPT +exec git commit -m 'Setup extension as v1' + +# Upload local extension repository +exec gh repo create $ORG/$REPO --private --source . --push + +# Defer repo cleanup +defer gh repo delete --yes $ORG/$REPO + +# Verify extension shows up in search, sleep for indexing +exec gh repo edit --add-topic gh-extension +sleep 10 +exec gh extension search --owner $ORG $EXT_NAME +stdout ${ORG}/${REPO} + +# Verify repository can be installed as extension +exec gh extension install $ORG/$REPO +exec gh extension list +stdout ${ORG}/${REPO} + +# Verify v1 extension behavior before upgrade +exec gh extension exec $EXT_NAME +stdout 'gh ext create v1' + +# Setup v2 executable upgrade for extension +mv ../v2.sh $EXT_SCRIPT +chmod 777 $EXT_SCRIPT +exec git add $EXT_SCRIPT +exec git commit -m 'Upgrade extension to v2' +exec git push -u origin + +# Verify v2 extension upgrade +exec gh extension upgrade $EXT_NAME +exec gh extension exec $EXT_NAME +stdout 'gh ext upgrade v2' + +# Verify extension can be removed +exec gh extension remove $EXT_NAME +! stdout ${ORG}/${REPO} + +-- v1.sh -- +#!/usr/bin/env bash +set -e + +echo "gh ext create v1" + +-- v2.sh -- +#!/usr/bin/env bash +set -e + +echo "gh ext upgrade v2"