From 50f802f0c8172e9c50ac54274778588a93247fce Mon Sep 17 00:00:00 2001 From: Yaw Anokwa Date: Sun, 17 Sep 2023 10:01:06 -0700 Subject: [PATCH] Fix tests --- .github/workflows/publish.yml | 5 ++++- .github/workflows/test.yml | 6 +++++- README.md | 38 ++--------------------------------- test.sh | 19 ++++++++++++------ 4 files changed, 24 insertions(+), 44 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 350b3d9..d87828a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,8 +13,11 @@ jobs: contents: read steps: - name: Check out the repo - uses: actions/checkout@v2 + uses: actions/checkout@v4 + - name: Run tests + run: bash test.sh + - name: Log in to Docker Hub uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6d7e834..dd53bd8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,4 +4,8 @@ on: [push, pull_request] jobs: test: - - run: bash test.sh \ No newline at end of file + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run tests + run: bash test.sh \ No newline at end of file diff --git a/README.md b/README.md index 7f381f4..80a9892 100644 --- a/README.md +++ b/README.md @@ -19,42 +19,8 @@ docker run --detach --publish 5001:80 pyxform-http # Test forms -A form that converts successfully (with chunked encoding!) ``` -curl --request POST --header "X-XlsForm-FormId-Fallback: pyxform-clean" --header 'Transfer-Encoding: chunked' --data-binary @test/pyxform-clean.xlsx http://127.0.0.1:5001/api/v1/convert +bash test.sh ``` -A form that fails to convert and returns a pyxform error -``` -curl --request POST --header "X-XlsForm-FormId-Fallback: pyxform-error" --data-binary @test/pyxform-error.xlsx http://127.0.0.1:5001/api/v1/convert -``` - -A form that converts successfully and also returns pyxform warnings -``` -curl --request POST --header "X-XlsForm-FormId-Fallback: pyxform-warning" --data-binary @test/pyxform-warning.xlsx http://127.0.0.1:5001/api/v1/convert -``` - -A form that passes pyxform's internal checks, but fails ODK Validate's checks -``` -curl --request POST --header "X-XlsForm-FormId-Fallback: validate-error" --data-binary @test/validate-error.xlsx http://127.0.0.1:5001/api/v1/convert -``` - -A form that converts successfully (with external choices) -``` -curl --request POST --header "X-XlsForm-FormId-Fallback: external-choices" --data-binary @test/external-choices.xlsx http://127.0.0.1:5001/api/v1/convert -``` - -A form that converts successfully (with no id) -``` -curl --request POST --data-binary @test/pyxform-clean.xlsx http://127.0.0.1:5001/api/v1/convert -``` - -A form that converts successfully (with percent encoded id) -``` -curl --request POST --header "X-XlsForm-FormId-Fallback: example%40example.org" --data-binary @test/pyxform-clean.xlsx http://127.0.0.1:5001/api/v1/convert -``` - -A form that converts successfully (with no id, in XLS format) -``` -curl --request POST --data-binary @test/pyxform-clean.xls http://127.0.0.1:5001/api/v1/convert -``` +The test builds, runs, stops, and removes a pyxform-http-tester container \ No newline at end of file diff --git a/test.sh b/test.sh index db25132..00f8fcf 100755 --- a/test.sh +++ b/test.sh @@ -1,12 +1,16 @@ #!/bin/bash +set -o errexit +set -o nounset +set -o pipefail + docker build --quiet --tag pyxform-http . >/dev/null -docker run --detach --publish 5001:80 --name pyxform-http pyxform-http >/dev/null +docker run --detach --publish 5001:80 --name pyxform-http-tester pyxform-http >/dev/null # wait for docker container to come up sleep 1 -test_failed=true +test_failed="false" test_1_actual=$(curl --silent --request POST --header "X-XlsForm-FormId-Fallback: pyxform-clean" --header 'Transfer-Encoding: chunked' --data-binary @test/pyxform-clean.xlsx http://127.0.0.1:5001/api/v1/convert) test_1_expected='{"error":null,"itemsets":null,"result":"pyxform-clean","status":200,"warnings":[]}' @@ -38,27 +42,30 @@ if [ "$test_5_actual" != "$test_5_expected" ]; then echo "test 5 failed: form that converts (with external choices)" fi +# test removes uuid from actual and expected test_6_actual=$(curl --silent --request POST --data-binary @test/pyxform-clean.xlsx http://127.0.0.1:5001/api/v1/convert | sed 's/[0-9a-f-]\{36\}//g') test_6_expected=$(echo '{"error":null,"itemsets":null,"result":"pyxform-clean","status":200,"warnings":[]}' | sed 's/[0-9a-f-]\{36\}//g') if [ "$test_6_actual" != "$test_6_expected" ]; then echo "test 6 failed: form that converts (with no id)" fi +# test removes uuid from actual and expected test_7_actual=$(curl --silent --request POST --header "X-XlsForm-FormId-Fallback: example%40example.org" --data-binary @test/pyxform-clean.xlsx http://127.0.0.1:5001/api/v1/convert | sed 's/[0-9a-f-]\{36\}//g') -test_7_expected=$(echo '{"error":null,"itemsets":null,"result":"pyxform-clean","status":200,"warnings":[]}' | sed 's/[0-9a-f-]\{36\}//g') +test_7_expected=$(echo '{"error":null,"itemsets":null,"result":"pyxform-clean","status":200,"warnings":[]}' | sed 's/[0-9a-f-]\{36\}//g') if [ "$test_7_actual" != "$test_7_expected" ]; then echo "test 7 failed: form that converts (with percent encoded id)" fi +# test removes uuid from actual and expected test_8_actual=$(curl --silent --request POST --data-binary @test/pyxform-clean.xls http://127.0.0.1:5001/api/v1/convert | sed 's/[0-9a-f-]\{36\}//g') test_8_expected=$(echo '{"error":null,"itemsets":null,"result":"pyxform-clean","status":200,"warnings":[]}' | sed 's/[0-9a-f-]\{36\}//g') if [ "$test_8_actual" != "$test_8_expected" ]; then echo "test 8 failed: form that converts (with no id, in XLS format)" fi -docker container stop pyxform-http >/dev/null -docker container rm pyxform-http >/dev/null +docker container stop pyxform-http-tester >/dev/null +docker container rm pyxform-http-tester >/dev/null -if [ "$test_failed" = true ] ; then +if [ "$test_failed" == "true" ] ; then exit 1 fi \ No newline at end of file