Files
vibn-frontend/test-backend-extraction.sh

168 lines
6.3 KiB
Bash
Executable File

#!/bin/bash
# Test Backend-Led Extraction Flow
# Tests the complete flow: create → collect → backend extract → review
set -e
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
BASE_URL="http://localhost:3000"
TOKEN="Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4MDI5MzRmZTBlZWM0NmE1ZWQwMDA2ZDE0YTFiYWIwMWUzNDUwODMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiTWFyayBIZW5kZXJzb24iLCJwaWN0dXJlIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzUzOTU0MjEzP3Y9NCIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS9nZW4tbGFuZy1jbGllbnQtMDk4MDA3OTQxMCIsImF1ZCI6Imdlbi1sYW5nLWNsaWVudC0wOTgwMDc5NDEwIiwiYXV0aF90aW1lIjoxNzYzMzI1MDEyLCJ1c2VyX2lkIjoiMmhDdmdXQzJaV2RJMGVlTm5SQVM3SWVKcmg1MiIsInN1YiI6IjJoQ3ZnV0MyWldkSTBlZU5uUkFTN0llSnJoNTIiLCJpYXQiOjE3NjM0MjI1NDUsImV4cCI6MTc2MzQyNjE0NSwiZW1haWwiOiJtYXJrQGdldGFjcXVpcmVkLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnaXRodWIuY29tIjpbIjUzOTU0MjEzIl0sImVtYWlsIjpbIm1hcmtAZ2V0YWNxdWlyZWQuY29tIl19LCJzaWduX2luX3Byb3ZpZGVyIjoiZ2l0aHViLmNvbSJ9fQ.TpMOORDnPUKkbLlg-KtYBmbarEjAijJ3W4vN8tWT6OslOfwaeDJAtPXIahyQk38UvKY4ZGognQG6t-laSATB8yIC8IdkYbD699axfPSGQqC8Lbux1P6YrFKOPLGDD2XemBtJ-Gb5Ql-nK_DbXKAmygLxIwz019XpLJEucGkBPAN_Rj2xC7125DVexkDSIb6ZnbLiDgCpR_IkImyQb08tqlOoBiHVUa-4VGDhraoBPACJfQXwPToJ1W3nhBiVtMvSq7s_Ekd8Otn8AB_1teu5lxC-rhLdgJuNrmlxO-H6xIMBFZ72bwq7wrvdWd_EijqFQCU99oEhphTNoISoJ3wK-g"
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} Backend Extraction Flow Test${NC}"
echo -e "${BLUE}========================================${NC}\n"
# Step 1: Create Project
echo -e "${YELLOW}[Step 1]${NC} Creating new project..."
RANDOM_ID=$RANDOM
PROJECT_NAME="Backend Extract Test ${RANDOM_ID}"
CREATE_RESPONSE=$(curl -s -X POST "${BASE_URL}/api/projects/create" \
-H "Authorization: ${TOKEN}" \
-H "Content-Type: application/json" \
-d "{
\"projectName\": \"${PROJECT_NAME}\",
\"projectType\": \"scratch\",
\"slug\": \"backend-extract-test-${RANDOM_ID}\",
\"product\": {
\"name\": \"${PROJECT_NAME}\"
}
}")
PROJECT_ID=$(echo "$CREATE_RESPONSE" | jq -r '.projectId // empty')
if [ -z "$PROJECT_ID" ]; then
echo -e "${RED}✗ Failed to create project${NC}"
echo "Response: $CREATE_RESPONSE"
exit 1
fi
echo -e "${GREEN}✓ Project created: ${PROJECT_ID}${NC}\n"
# Step 2: Upload a test document
echo -e "${YELLOW}[Step 2]${NC} Uploading test document..."
TEST_DOC_PATH="/tmp/test-doc-$RANDOM.md"
cat > "$TEST_DOC_PATH" << 'EOF'
# Product Requirements: TaskFlow
## Problem
Freelancers and small agencies struggle to manage multiple client projects simultaneously. They lose track of deadlines, forget client requests, and spend too much time on administrative work instead of billable hours.
## Target Users
- Freelance designers and developers
- Small creative agencies (2-10 people)
- Solo consultants managing multiple clients
## Core Features
1. **Client Dashboard**: One view per client showing all active projects
2. **Smart Task Capture**: Quickly log tasks from emails, calls, or chat
3. **Automated Reminders**: AI suggests when to follow up based on task age
4. **Time Tracking**: Simple timer integrated into task view
5. **Client Portal**: Clients can see progress without asking for updates
## Technical Constraints
- Must work offline (PWA)
- Mobile-first design
- Budget: $10k development budget
- Timeline: Launch MVP in 8 weeks
## Business Model
- $15/month per user
- 14-day free trial
- Annual plans at 20% discount
EOF
UPLOAD_RESPONSE=$(curl -s -X POST "${BASE_URL}/api/projects/${PROJECT_ID}/knowledge/upload-document" \
-H "Authorization: ${TOKEN}" \
-F "file=@${TEST_DOC_PATH}")
UPLOAD_SUCCESS=$(echo "$UPLOAD_RESPONSE" | jq -r '.success // false')
if [ "$UPLOAD_SUCCESS" != "true" ]; then
echo -e "${RED}✗ Document upload failed${NC}"
echo "Response: $UPLOAD_RESPONSE"
rm -f "$TEST_DOC_PATH"
exit 1
fi
echo -e "${GREEN}✓ Document uploaded${NC}"
rm -f "$TEST_DOC_PATH"
# Step 3: Tell AI about docs and confirm ready
echo -e "\n${YELLOW}[Step 3]${NC} Telling AI about documents..."
CHAT1=$(curl -s -X POST "${BASE_URL}/api/ai/chat" \
-H "Authorization: ${TOKEN}" \
-H "Content-Type: application/json" \
-d "{
\"projectId\": \"${PROJECT_ID}\",
\"message\": \"I uploaded a requirements document\"
}")
echo -e "${GREEN}✓ AI acknowledged${NC}"
# Step 4: Say "that's everything" to trigger extraction
echo -e "\n${YELLOW}[Step 4]${NC} Confirming ready for extraction..."
CHAT2=$(curl -s -X POST "${BASE_URL}/api/ai/chat" \
-H "Authorization: ${TOKEN}" \
-H "Content-Type: application/json" \
-d "{
\"projectId\": \"${PROJECT_ID}\",
\"message\": \"Yes, that's everything. Please analyze it.\"
}")
echo -e "${GREEN}✓ Extraction triggered${NC}"
echo -e "${YELLOW}⏳ Backend extraction running (this takes 10-30 seconds)...${NC}\n"
# Wait for extraction to complete
sleep 15
# Step 5: Check if extraction completed
echo -e "${YELLOW}[Step 5]${NC} Checking extraction results..."
# Send a message to see if AI presents results
CHAT3=$(curl -s -X POST "${BASE_URL}/api/ai/chat" \
-H "Authorization: ${TOKEN}" \
-H "Content-Type: application/json" \
-d "{
\"projectId\": \"${PROJECT_ID}\",
\"message\": \"What did you find?\"
}")
AI_REPLY=$(echo "$CHAT3" | jq -r '.reply // empty')
# Check if AI is still saying "processing"
if echo "$AI_REPLY" | grep -qi "processing\|synthesizing\|analyzing"; then
echo -e "${RED}✗ AI still says 'processing' - extraction may not have completed${NC}"
echo -e "\nAI Response:"
echo "$AI_REPLY"
echo -e "\n${YELLOW}Try waiting a bit longer, then check: ${BASE_URL}/default/project/${PROJECT_ID}/v_ai_chat${NC}"
exit 1
fi
# Check if AI is presenting results
if echo "$AI_REPLY" | grep -qi "found\|identified\|problems\|features\|users"; then
echo -e "${GREEN}✓ AI is presenting extraction results!${NC}"
echo -e "\n${BLUE}AI Response:${NC}"
echo "$AI_REPLY" | fold -w 80 -s
echo -e "\n${GREEN}========================================${NC}"
echo -e "${GREEN}✓ Backend extraction working!${NC}"
echo -e "${GREEN}========================================${NC}\n"
echo -e "View full chat: ${BASE_URL}/default/project/${PROJECT_ID}/v_ai_chat"
else
echo -e "${YELLOW}⚠ Unclear if extraction worked${NC}"
echo -e "\nAI Response:"
echo "$AI_REPLY"
echo -e "\n${YELLOW}Check manually: ${BASE_URL}/default/project/${PROJECT_ID}/v_ai_chat${NC}"
fi