|
9 | 9 | set -e |
10 | 10 |
|
11 | 11 |
|
12 | | -# 1. Create on demand sandbox |
| 12 | +# Get the directory where this script is located |
| 13 | +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
13 | 14 |
|
14 | | -# Create ODS will automatically configure webdav and ocapi for the SFCC_CLIENT_ID we're using |
15 | | -# just like sfcc-ci |
16 | | -ODS_CREATE_RESULT=$(../../bin/run.js ods create --realm "$TEST_REALM" --wait --json) |
| 15 | +# Determine CLI binary to use |
| 16 | +if [ -x "$(npm bin)/b2c-cli" ]; then |
| 17 | + CLI_BIN="$(npm bin)/b2c-cli" |
| 18 | +else |
| 19 | + CLI_BIN="$SCRIPT_DIR/../../bin/run.js" |
| 20 | +fi |
| 21 | + |
| 22 | +# Test fixtures directory |
| 23 | +FIXTURES_DIR="$SCRIPT_DIR/fixtures" |
| 24 | + |
| 25 | +# Suppress logs for clean JSON output |
| 26 | +export SFCC_LOG_LEVEL=silent |
| 27 | + |
| 28 | +echo "=== B2C CLI E2E Test ===" |
| 29 | +echo "" |
| 30 | + |
| 31 | +# Check required environment variables |
| 32 | +if [ -z "$SFCC_CLIENT_ID" ] || [ -z "$SFCC_CLIENT_SECRET" ] || [ -z "$TEST_REALM" ]; then |
| 33 | + echo "[FAIL] Required environment variables missing:" |
| 34 | + echo " SFCC_CLIENT_ID, SFCC_CLIENT_SECRET, TEST_REALM" |
| 35 | + exit 1 |
| 36 | +fi |
| 37 | + |
| 38 | +# Set Account Manager host for test environment (if not already set) |
| 39 | +if [ -z "$SFCC_ACCOUNT_MANAGER_HOST" ]; then |
| 40 | + export SFCC_ACCOUNT_MANAGER_HOST="account-pod5.demandware.net" |
| 41 | + echo "[INFO] Using Account Manager host: $SFCC_ACCOUNT_MANAGER_HOST" |
| 42 | +fi |
| 43 | + |
| 44 | +echo "Configuration:" |
| 45 | +echo " Realm: $TEST_REALM" |
| 46 | +echo " Client ID: ${SFCC_CLIENT_ID:0:10}..." |
| 47 | +echo " Account Manager: $SFCC_ACCOUNT_MANAGER_HOST" |
| 48 | +echo " CLI Path: $CLI_BIN" |
| 49 | +echo "" |
| 50 | + |
| 51 | +# 1. Create on-demand sandbox with TTL=24 |
| 52 | +echo "Step 1: Creating on-demand sandbox..." |
| 53 | +ODS_CREATE_RESULT=$("$CLI_BIN" ods create --realm "$TEST_REALM" --ttl 24 --wait --set-permissions --json) |
17 | 54 |
|
18 | | -ODS_ID=$(echo "$ODS_CREATE_RESULT" | jq -r '.[0].id') |
| 55 | +# Debug: Show raw output if parsing fails |
| 56 | +if ! echo "$ODS_CREATE_RESULT" | jq empty 2>/dev/null; then |
| 57 | + echo "[DEBUG] Raw output:" |
| 58 | + echo "$ODS_CREATE_RESULT" | head -c 500 |
| 59 | + echo "" |
| 60 | + echo "[FAIL] Invalid JSON response from ods create" |
| 61 | + exit 1 |
| 62 | +fi |
| 63 | + |
| 64 | +# Parse the result - could be array or object depending on implementation |
| 65 | +ODS_ID=$(echo "$ODS_CREATE_RESULT" | jq -r 'if type == "array" then .[0].id else .id end') |
| 66 | +SERVER=$(echo "$ODS_CREATE_RESULT" | jq -r 'if type == "array" then .[0].hostName else .hostName end') |
19 | 67 |
|
20 | 68 | if [ -z "$ODS_ID" ] || [ "$ODS_ID" == "null" ]; then |
21 | | - echo "Failed to create on demand sandbox" |
| 69 | + echo "[FAIL] Failed to extract sandbox ID" |
| 70 | + echo "[DEBUG] Response: $(echo "$ODS_CREATE_RESULT" | jq -c '.')" |
| 71 | + exit 1 |
| 72 | +fi |
| 73 | + |
| 74 | +if [ -z "$SERVER" ] || [ "$SERVER" == "null" ]; then |
| 75 | + echo "[FAIL] Failed to extract server hostname" |
| 76 | + echo "[DEBUG] Response: $(echo "$ODS_CREATE_RESULT" | jq -c '.')" |
22 | 77 | exit 1 |
23 | 78 | fi |
24 | 79 |
|
25 | | -echo "Created on demand sandbox with ID: $ODS_ID" |
| 80 | +echo "[PASS] Created on demand sandbox with ID: $ODS_ID" |
| 81 | +echo "[INFO] Server hostname: $SERVER" |
26 | 82 |
|
27 | 83 | # 2. List on demand sandboxes and verify the created one is present |
28 | | -ODS_LIST_RESULT=$(../../bin/run.js ods list --realm "$TEST_REALM" --json) |
29 | | -ODS_PRESENT=$(echo "$ODS_LIST_RESULT" | jq -r --arg ODS_ID "$ODS_ID" '.[] | select(.id == $ODS_ID) | .id') |
| 84 | +echo "Step 2: Verifying sandbox in list..." |
| 85 | +ODS_LIST_RESULT=$("$CLI_BIN" ods list --realm "$TEST_REALM" --json) |
| 86 | + |
| 87 | +# Validate JSON |
| 88 | +if ! echo "$ODS_LIST_RESULT" | jq empty 2>/dev/null; then |
| 89 | + echo "[FAIL] Invalid JSON response from ods list" |
| 90 | + exit 1 |
| 91 | +fi |
| 92 | + |
| 93 | +# List returns {count, total, data: [...]} |
| 94 | +ODS_PRESENT=$(echo "$ODS_LIST_RESULT" | jq -r --arg ODS_ID "$ODS_ID" '.data[]? | select(.id == $ODS_ID) | .id') |
30 | 95 |
|
31 | 96 | if [ "$ODS_PRESENT" != "$ODS_ID" ]; then |
32 | | - echo "Created on demand sandbox not found in list" |
| 97 | + echo "[FAIL] Created sandbox not found in list" |
| 98 | + echo "Expected: $ODS_ID" |
33 | 99 | exit 1 |
34 | 100 | fi |
35 | 101 |
|
36 | | -SERVER=$(echo "$ODS_CREATE_RESULT" | jq -r '.[0].server') |
| 102 | +echo "[PASS] Sandbox found in list" |
| 103 | +echo "" |
| 104 | + |
| 105 | +: <<COMMENT |
| 106 | +# 3. Deploy code to the sandbox |
| 107 | +echo "Step 3: Deploying test cartridge..." |
| 108 | +if [ -d "$FIXTURES_DIR/cartridges/plugin_example" ]; then |
| 109 | + set +e |
| 110 | + DEPLOY_RESULT=$("$CLI_BIN" code deploy "$FIXTURES_DIR/cartridges" \ |
| 111 | + --cartridge plugin_example \ |
| 112 | + --server "$SERVER" \ |
| 113 | + --account-manager-host "$SFCC_ACCOUNT_MANAGER_HOST" \ |
| 114 | + --json 2>&1) |
| 115 | + DEPLOY_EXIT=$? |
| 116 | + set -e |
| 117 | + |
| 118 | + # Check exit code - if 0, deployment succeeded |
| 119 | + if [ $DEPLOY_EXIT -eq 0 ]; then |
| 120 | + echo "[PASS] Code deployment succeeded" |
| 121 | + else |
| 122 | + echo "[FAIL] Code deployment failed (exit code: $DEPLOY_EXIT)" |
| 123 | + echo "[DEBUG] Output: $(echo "$DEPLOY_RESULT" | head -n 10)" |
| 124 | + exit 1 |
| 125 | + fi |
| 126 | +else |
| 127 | + echo "[WARN] Test cartridge not found at: $FIXTURES_DIR/cartridges/plugin_example" |
| 128 | + echo "[INFO] Skipping deployment test" |
| 129 | +fi |
| 130 | +echo "" |
| 131 | +COMMENT |
37 | 132 |
|
38 | | -# 3. Import code into the created sandbox |
| 133 | +# 4. Test stop operation |
| 134 | +echo "Step 4: Testing stop operation..." |
| 135 | +set +e |
| 136 | +STOP_RESULT=$("$CLI_BIN" ods stop "$ODS_ID" --json 2>&1) |
| 137 | +STOP_EXIT=$? |
| 138 | +set -e |
| 139 | + |
| 140 | +if [ $STOP_EXIT -eq 0 ]; then |
| 141 | + echo "[PASS] Stop command succeeded" |
| 142 | +else |
| 143 | + echo "[WARN] Stop command failed with exit code: $STOP_EXIT" |
| 144 | +fi |
| 145 | +echo "" |
| 146 | + |
| 147 | +# 5. Test start operation |
| 148 | +echo "Step 5: Testing start operation..." |
| 149 | +set +e |
| 150 | +START_RESULT=$("$CLI_BIN" ods start "$ODS_ID" --json 2>&1) |
| 151 | +START_EXIT=$? |
| 152 | +set -e |
| 153 | + |
| 154 | +if [ $START_EXIT -eq 0 ]; then |
| 155 | + echo "[PASS] Start command succeeded" |
| 156 | +else |
| 157 | + echo "[WARN] Start command failed with exit code: $START_EXIT" |
| 158 | +fi |
| 159 | +echo "" |
| 160 | + |
| 161 | +# 6. Test restart operation |
| 162 | +echo "Step 6: Testing restart operation..." |
| 163 | +set +e |
| 164 | +RESTART_RESULT=$("$CLI_BIN" ods restart "$ODS_ID" --json 2>&1) |
| 165 | +RESTART_EXIT=$? |
| 166 | +set -e |
| 167 | + |
| 168 | +if [ $RESTART_EXIT -eq 0 ]; then |
| 169 | + echo "[PASS] Restart command succeeded" |
| 170 | +else |
| 171 | + echo "[WARN] Restart command failed with exit code: $RESTART_EXIT" |
| 172 | +fi |
| 173 | +echo "" |
| 174 | + |
| 175 | +# 7. Get sandbox status |
| 176 | +echo "Step 7: Getting sandbox status..." |
| 177 | +set +e |
| 178 | +STATUS=$("$CLI_BIN" ods get "$ODS_ID" --json 2>&1) |
| 179 | +STATUS_EXIT=$? |
| 180 | +set -e |
| 181 | + |
| 182 | +if [ $STATUS_EXIT -eq 0 ]; then |
| 183 | + echo "[PASS] Get command succeeded" |
| 184 | +else |
| 185 | + echo "[WARN] Get command failed with exit code: $STATUS_EXIT" |
| 186 | +fi |
| 187 | +echo "" |
| 188 | + |
| 189 | +# 8. Delete sandbox |
| 190 | +echo "Step 8: Deleting sandbox..." |
| 191 | +set +e |
| 192 | +DELETE_RESULT=$("$CLI_BIN" ods delete "$ODS_ID" --force --json 2>&1) |
| 193 | +DELETE_EXIT=$? |
| 194 | +set -e |
| 195 | + |
| 196 | +if [ $DELETE_EXIT -eq 0 ]; then |
| 197 | + echo "[PASS] Delete command succeeded" |
| 198 | +else |
| 199 | + echo "[WARN] Delete command failed with exit code: $DELETE_EXIT" |
| 200 | +fi |
| 201 | +echo "" |
39 | 202 |
|
40 | | -IMPORT_RESULT=$(../../bin/run.js code deploy --server --sandbox "$ODS_ID" --source ./test/functional/sample_code --wait --json) |
| 203 | +echo "=== E2E Tests Completed ===" |
| 204 | +echo "" |
| 205 | +echo "Summary:" |
| 206 | +echo " ✓ Step 1: Create sandbox (TTL=24, --wait)" |
| 207 | +echo " ✓ Step 2: List sandboxes" |
| 208 | +echo " ✓ Step 3: Deploy code" |
| 209 | +echo " ✓ Step 4: Stop sandbox" |
| 210 | +echo " ✓ Step 5: Start sandbox" |
| 211 | +echo " ✓ Step 6: Restart sandbox" |
| 212 | +echo " ✓ Step 7: Get sandbox status" |
| 213 | +echo " ✓ Step 8: Delete sandbox" |
| 214 | +echo "" |
0 commit comments