Monorepo for Aesthetic.Computer
aesthetic.computer
1#!/bin/bash
2#
3# Keeps Contract Test Suite
4#
5# Tests all contract entrypoints on Ghostnet
6#
7
8CONTRACT_ADDRESS=$(cat contract-address.txt 2>/dev/null)
9
10if [ -z "$CONTRACT_ADDRESS" ]; then
11 echo "❌ No contract address found. Run: node keeps.mjs deploy"
12 exit 1
13fi
14
15echo "╔══════════════════════════════════════════════════════════════╗"
16echo "║ 🧪 Keeps Contract Test Suite ║"
17echo "╚══════════════════════════════════════════════════════════════╝"
18echo ""
19echo "📍 Contract: $CONTRACT_ADDRESS"
20echo "🌐 Network: Ghostnet"
21echo ""
22
23PASSED=0
24FAILED=0
25SKIPPED=0
26
27test_step() {
28 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
29 echo "🔬 Test: $1"
30 echo ""
31}
32
33pass() {
34 echo "✅ PASS: $1"
35 echo ""
36 ((PASSED++))
37}
38
39fail() {
40 echo "❌ FAIL: $1"
41 echo ""
42 ((FAILED++))
43}
44
45skip() {
46 echo "⚠️ SKIP: $1"
47 echo ""
48 ((SKIPPED++))
49}
50
51# ============================================================================
52# Test 1: Contract Status
53# ============================================================================
54test_step "Contract Status Query"
55
56if node keeps.mjs status > /tmp/test-status.txt 2>&1; then
57 pass "Contract status retrieved successfully"
58 grep -E "Next Token ID|Administrator|Balance" /tmp/test-status.txt || true
59else
60 fail "Failed to get contract status"
61fi
62
63# ============================================================================
64# Test 2: Check Balance
65# ============================================================================
66test_step "Wallet Balance Query"
67
68if node keeps.mjs balance > /tmp/test-balance.txt 2>&1; then
69 pass "Wallet balance retrieved"
70 grep -E "Balance|Address" /tmp/test-balance.txt || true
71else
72 fail "Failed to get wallet balance"
73fi
74
75# ============================================================================
76# Test 3: List Tokens
77# ============================================================================
78test_step "Token Listing Query"
79
80if node keeps.mjs tokens > /tmp/test-tokens.txt 2>&1; then
81 pass "Token list retrieved"
82 tail -5 /tmp/test-tokens.txt || true
83else
84 fail "Failed to list tokens"
85fi
86
87# ============================================================================
88# Test 4: Fee Query (expected to show N/A on current contract)
89# ============================================================================
90test_step "Check Current Fee"
91
92if node keeps.mjs fee > /tmp/test-fee.txt 2>&1; then
93 pass "Fee retrieved"
94 grep -E "Fee|Contract" /tmp/test-fee.txt || true
95else
96 echo " Expected behavior: fee command not implemented or contract lacks fee storage"
97 skip "Fee system check (requires entrypoints)"
98fi
99
100# ============================================================================
101# Test 5: TzKT API - Contract Storage
102# ============================================================================
103test_step "TzKT API - Contract Storage"
104
105if curl -s "https://api.ghostnet.tzkt.io/v1/contracts/$CONTRACT_ADDRESS/storage" > /tmp/test-tzkt-storage.json 2>&1; then
106 if command -v jq &> /dev/null; then
107 pass "TzKT storage query successful"
108 jq -r '. | "Next ID: \(.next_token_id), Admin: \(.administrator)"' /tmp/test-tzkt-storage.json || cat /tmp/test-tzkt-storage.json
109 else
110 pass "TzKT storage query successful (install jq for formatted output)"
111 cat /tmp/test-tzkt-storage.json
112 fi
113else
114 fail "TzKT API query failed"
115fi
116
117# ============================================================================
118# Test 6: TzKT API - Contract Entrypoints
119# ============================================================================
120test_step "TzKT API - Contract Entrypoints"
121
122if curl -s "https://api.ghostnet.tzkt.io/v1/contracts/$CONTRACT_ADDRESS/entrypoints" > /tmp/test-tzkt-entrypoints.json 2>&1; then
123 pass "Entrypoints retrieved"
124 echo " Available entrypoints:"
125 if command -v jq &> /dev/null; then
126 jq -r '.[].name' /tmp/test-tzkt-entrypoints.json | sed 's/^/ - /' || true
127 echo ""
128
129 # Check for fee entrypoints
130 if jq -e '.[] | select(.name == "set_keep_fee")' /tmp/test-tzkt-entrypoints.json > /dev/null 2>&1; then
131 pass "Fee entrypoints present ✓"
132 else
133 echo " ⚠️ Fee entrypoints missing (expected for current contract)"
134 echo ""
135 fi
136 else
137 cat /tmp/test-tzkt-entrypoints.json
138 fi
139else
140 fail "Failed to fetch entrypoints"
141fi
142
143# ============================================================================
144# Test 7: TzKT API - Token Metadata
145# ============================================================================
146test_step "Token Metadata Query"
147
148if curl -s "https://api.ghostnet.tzkt.io/v1/tokens?contract=$CONTRACT_ADDRESS&limit=3" > /tmp/test-tokens.json 2>&1; then
149 if command -v jq &> /dev/null; then
150 TOKEN_COUNT=$(jq 'length' /tmp/test-tokens.json)
151
152 if [ "$TOKEN_COUNT" -gt 0 ]; then
153 pass "Token metadata retrieved (found $TOKEN_COUNT tokens)"
154 jq -r '.[] | "Token #\(.tokenId): \(.metadata.name // "unnamed")"' /tmp/test-tokens.json || true
155 echo ""
156 else
157 skip "No tokens minted yet"
158 fi
159 else
160 pass "Tokens queried (install jq for formatted output)"
161 fi
162else
163 fail "Failed to query tokens"
164fi
165
166# ============================================================================
167# Test 8: Contract Balance
168# ============================================================================
169test_step "Contract Balance Check"
170
171if curl -s "https://api.ghostnet.tzkt.io/v1/contracts/$CONTRACT_ADDRESS" > /tmp/test-contract-info.json 2>&1; then
172 if command -v jq &> /dev/null; then
173 BALANCE=$(jq -r '.balance' /tmp/test-contract-info.json)
174 BALANCE_XTZ=$(echo "scale=6; $BALANCE / 1000000" | bc)
175 pass "Contract balance: $BALANCE_XTZ XTZ"
176 else
177 pass "Contract info retrieved"
178 fi
179else
180 fail "Failed to get contract info"
181fi
182
183# ============================================================================
184# Summary
185# ============================================================================
186echo ""
187echo "╔══════════════════════════════════════════════════════════════╗"
188echo "║ 📊 Test Summary ║"
189echo "╚══════════════════════════════════════════════════════════════╝"
190echo ""
191echo " ✅ Passed: $PASSED"
192echo " ❌ Failed: $FAILED"
193echo " ⚠️ Skipped: $SKIPPED"
194echo ""
195
196if [ $FAILED -eq 0 ]; then
197 echo " 🎉 All non-skipped tests passed!"
198 exit 0
199else
200 echo " ⚠️ Some tests failed"
201 exit 1
202fi