|
| 1 | +#!/bin/bash |
| 2 | +set -e |
| 3 | +SPEC_FILE=$1 |
| 4 | +OUTPUT_DIR=$2 |
| 5 | +if [ -z "$SPEC_FILE" ] || [ -z "$OUTPUT_DIR" ]; then exit 1; fi |
| 6 | +export DOCKER_HOST="unix:///Users/samuel/.colima/default/docker.sock" |
| 7 | +PORT=`python3 -c "import random; print(random.randint(8000, 9000))"` |
| 8 | +CONTAINER_NAME="python-mock-$PORT" |
| 9 | +cleanup() { /opt/homebrew/bin/docker rm -f $CONTAINER_NAME >/dev/null 2>&1 || true; rm -f $PWD/mock_server_$PORT.py; } |
| 10 | +trap cleanup EXIT |
| 11 | +cat << "PYEOF" > $PWD/mock_server_$PORT.py |
| 12 | +from http.server import HTTPServer, BaseHTTPRequestHandler |
| 13 | +import sys |
| 14 | +port = int(sys.argv[1]) |
| 15 | +class MockHandler(BaseHTTPRequestHandler): |
| 16 | + def log_message(self, format, *args): pass |
| 17 | + def do_GET(self): self.mock() |
| 18 | + def do_POST(self): self.mock() |
| 19 | + def do_PUT(self): self.mock() |
| 20 | + def do_DELETE(self): self.mock() |
| 21 | + def mock(self): |
| 22 | + self.send_response(200) |
| 23 | + self.send_header("Content-Type", "application/json") |
| 24 | + self.end_headers() |
| 25 | + path = self.path |
| 26 | + if "findByStatus" in path or "findByTags" in path or "createWithList" in path or "createWithArray" in path: |
| 27 | + if "pet" in path: self.wfile.write(b"[{\"name\": \"mocked\", \"photoUrls\": []}]") |
| 28 | + else: self.wfile.write(b"[]") |
| 29 | + else: |
| 30 | + if "pet" in path: self.wfile.write(b"{\"name\": \"mocked\", \"photoUrls\": []}") |
| 31 | + elif "user/login" in path: self.wfile.write(b"\"token\"") |
| 32 | + else: self.wfile.write(b"{}") |
| 33 | +if __name__ == "__main__": HTTPServer(("", port), MockHandler).serve_forever() |
| 34 | +PYEOF |
| 35 | +/opt/homebrew/bin/docker run -d --name $CONTAINER_NAME -p $PORT:$PORT -v "$PWD/mock_server_$PORT.py:/mock_server.py" python:3 python /mock_server.py $PORT >/dev/null |
| 36 | +sleep 3 |
| 37 | +rm -rf $OUTPUT_DIR |
| 38 | +cargo run -p cdd-cli -- from_openapi to_sdk -i $SPEC_FILE -o $OUTPUT_DIR --target client-reqwest --tests >/dev/null 2>&1 |
| 39 | +echo "[workspace]" >> $OUTPUT_DIR/Cargo.toml |
| 40 | +sed -i "" "s/localhost:8080/localhost:$PORT/g" $OUTPUT_DIR/tests/api_contracts.rs |
| 41 | +cd $OUTPUT_DIR |
| 42 | +if ! cargo test >/dev/null 2>&1; then echo "Test failed for $SPEC_FILE"; cargo test; exit 1; fi |
| 43 | +cd - >/dev/null |
0 commit comments