# 🧪 SEO Skills - Complete Testing Plan

**Purpose:** Single comprehensive testing guide for all SEO skills  
**Created:** 2026-03-08  
**Tester:** AI Agent (automated testing with user's .env credentials)

---

## 📋 TESTING OVERVIEW

| Phase | Features | Tests | Time | Status |
|-------|----------|-------|------|--------|
| **Phase 1:** Core Features | Content generation, Thai analysis, Context | 6 tests | 30 min | ⏳ Pending |
| **Phase 2:** Image Features | Image generation/editing | 3 tests | 20 min | ⏳ Pending |
| **Phase 3:** Umami Integration | Auto-setup, tracking | 3 tests | 20 min | ⏳ Pending |
| **Phase 4:** Analytics | Umami, GA4, GSC, DataForSEO | 4 tests | 30 min | ⏳ Pending |
| **Phase 5:** Auto-Publish | Direct write to website | 2 tests | 15 min | ⏳ Pending |
| **Phase 6:** Full Workflow | End-to-end test | 1 test | 30 min | ⏳ Pending |

**Total:** 19 tests, ~2.5 hours

---

## 🔧 PRE-TEST CHECKLIST

### **1. Verify .env File Exists**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill
ls -la .env
```

**Expected:** File exists (not .env.example)

---

### **2. Check Available Credentials**

Run this check script:

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill

python3 << 'EOF'
import os
from dotenv import load_dotenv
load_dotenv('.env')

print("\n🔑 Available Credentials:\n")

checks = {
    'CHUTES_API_TOKEN': 'Image generation',
    'UMAMI_URL': 'Umami Analytics',
    'UMAMI_USERNAME': 'Umami username',
    'UMAMI_PASSWORD': 'Umami password',
    'GA4_PROPERTY_ID': 'Google Analytics',
    'GSC_SITE_URL': 'Google Search Console',
    'DATAFORSEO_LOGIN': 'DataForSEO',
    'GIT_USERNAME': 'Git/Gitea',
    'GIT_TOKEN': 'Git token'
}

available = []
missing = []

for key, desc in checks.items():
    value = os.getenv(key, '')
    if value and value != 'your-token-here':
        available.append(f"✓ {key} ({desc})")
    else:
        missing.append(f"✗ {key} ({desc})")

print("AVAILABLE:")
for item in available:
    print(f"  {item}")

print("\nMISSING/EMPTY:")
for item in missing:
    print(f"  {item}")

print(f"\n📊 Summary: {len(available)} available, {len(missing)} missing")
EOF
```

**Expected Output:**
```
🔑 Available Credentials:

AVAILABLE:
  ✓ CHUTES_API_TOKEN (Image generation)
  ✓ UMAMI_URL (Umami Analytics)
  ✓ UMAMI_USERNAME (Umami username)
  ✓ UMAMI_PASSWORD (Umami password)
  ✓ GIT_USERNAME (Git/Gitea)

MISSING/EMPTY:
  ✗ GA4_PROPERTY_ID (Google Analytics)
  ✗ GSC_SITE_URL (Google Search Console)
  ✗ DATAFORSEO_LOGIN (DataForSEO)

📊 Summary: 5 available, 3 missing
```

---

### **3. Install Dependencies**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills

# Install all SEO skill dependencies
pip install pythainlp pyyaml python-dotenv pandas tqdm rich \
  markdown python-frontmatter GitPython Pillow requests

# Verify installation
python3 -c "from pythainlp import word_tokenize; print('PyThaiNLP OK')"
python3 -c "import yaml; print('YAML OK')"
python3 -c "import requests; print('Requests OK')"
```

---

## 🧪 PHASE 1: Core Features (No Credentials Required)

### **Test 1.1: Facebook Content Generation**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-multi-channel/scripts

python3 generate_content.py \
  --topic "บริการ podcast hosting" \
  --channels facebook \
  --language th
```

**Expected:**
- ✅ 5 Facebook variations generated
- ✅ Output saved to `output/บริการ-podcast-hosting/results.json`
- ✅ Thai language detected

**Verify:**
```bash
cat output/บริการ-podcast-hosting/results.json | python3 -m json.tool | head -50
```

---

### **Test 1.2: Multi-Channel Generation**

```bash
python3 generate_content.py \
  --topic "บริการ podcast hosting" \
  --channels facebook google_ads blog \
  --language th
```

**Expected:**
- ✅ 3 channels generated
- ✅ 13 total variations (5+3+5)
- ✅ Blog has markdown with frontmatter

---

### **Test 1.3: Thai Keyword Analysis**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-analyzers/scripts

python3 thai_keyword_analyzer.py \
  --text "บทความเกี่ยวกับบริการ podcast hosting ที่ดีที่สุด" \
  --keyword "บริการ podcast" \
  --language th
```

**Expected:**
- ✅ Thai word count accurate
- ✅ Density calculated
- ✅ Thai recommendations

---

### **Test 1.4: Thai Readability Analysis**

```bash
python3 thai_readability.py \
  --text "มาเริ่ม podcast กันเลย! ไม่ต้องรอให้พร้อม 100%" \
  --output text
```

**Expected:**
- ✅ Sentences counted
- ✅ Formality detected
- ✅ Grade level in Thai format

---

### **Test 1.5: Content Quality Scoring**

```bash
python3 content_quality_scorer.py \
  --text "# คู่มือ Podcast\n\nบทความนี้เกี่ยวกับ..." \
  --keyword "podcast" \
  --output text
```

**Expected:**
- ✅ Score 0-100
- ✅ 4 category breakdowns
- ✅ Recommendations

---

### **Test 1.6: Context File Creation**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-context/scripts

python3 context_manager.py \
  --create \
  --project "/tmp/test-website" \
  --industry "podcast"
```

**Expected:**
- ✅ 6 context files created
- ✅ Thai templates used
- ✅ Location: `/tmp/test-website/context/`

**Verify:**
```bash
ls -la /tmp/test-website/context/
```

---

## 🧪 PHASE 2: Image Features (Needs CHUTES_API_TOKEN)

### **Test 2.1: Image Generation**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-multi-channel/scripts

python3 image_integration.py \
  --action generate \
  --topic "test-image" \
  --channel facebook \
  --output-dir ./test-images
```

**Expected:**
- ✅ Image generated
- ✅ Saved to `test-images/test-image/facebook/`

---

### **Test 2.2: Find Product Images**

```bash
# Create test structure
mkdir -p /tmp/test-website/public/images/products
cp /path/to/any-image.jpg /tmp/test-website/public/images/products/test-product.jpg

python3 image_integration.py \
  --action find \
  --product-name "test-product" \
  --website-repo "/tmp/test-website"
```

**Expected:**
- ✅ Found 1 image
- ✅ Full path returned

---

### **Test 2.3: Product Image Edit**

```bash
python3 image_integration.py \
  --action edit \
  --product-name "test-product" \
  --website-repo "/tmp/test-website" \
  --prompt "Enhance product" \
  --topic "test-product" \
  --channel facebook_ads
```

**Expected:**
- ✅ Image edited
- ✅ Saved to channel folder

---

## 🧪 PHASE 3: Umami Integration (Needs UMAMI_* credentials)

### **Test 3.1: Standalone Umami Website Creation**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/umami/scripts

python3 umami_client.py \
  --action create-website \
  --umami-url "$UMAMI_URL" \
  --username "$UMAMI_USERNAME" \
  --password "$UMAMI_PASSWORD" \
  --website-name "Test Website" \
  --website-domain "test.moreminimore.com"
```

**Expected:**
- ✅ Website created in Umami
- ✅ Website ID returned
- ✅ Tracking script generated

---

### **Test 3.2: Get Umami Tracking Code**

```bash
python3 umami_client.py \
  --action get-tracking \
  --umami-url "$UMAMI_URL" \
  --username "$UMAMI_USERNAME" \
  --password "$UMAMI_PASSWORD" \
  --website-id "WEBSITE_ID_FROM_TEST_3.1"
```

**Expected:**
- ✅ Script tag returned
- ✅ Correct Umami URL
- ✅ Correct website ID

---

### **Test 3.3: Get Umami Analytics**

```bash
python3 umami_client.py \
  --action get-stats \
  --umami-url "$UMAMI_URL" \
  --username "$UMAMI_USERNAME" \
  --password "$UMAMI_PASSWORD" \
  --website-id "WEBSITE_ID_FROM_TEST_3.1" \
  --days 30
```

**Expected:**
- ✅ Pageviews returned
- ✅ Uniques returned
- ✅ Bounce rate calculated

---

## 🧪 PHASE 4: Analytics Integration

### **Test 4.1: Umami Connector (SEO Skills)**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-data/scripts

python3 umami_connector.py \
  --umami-url "$UMAMI_URL" \
  --username "$UMAMI_USERNAME" \
  --password "$UMAMI_PASSWORD" \
  --website-id "WEBSITE_ID" \
  --days 30
```

**Expected:**
- ✅ Connection successful
- ✅ Stats returned

---

### **Test 4.2: Data Aggregator**

```bash
# Create test context
mkdir -p /tmp/test-context
cat > /tmp/test-context/data-services.json << 'EOF'
{
  "umami": {
    "enabled": true,
    "api_url": "$UMAMI_URL",
    "username": "$UMAMI_USERNAME",
    "password": "$UMAMI_PASSWORD",
    "website_id": "WEBSITE_ID"
  }
}
EOF

python3 data_aggregator.py \
  --context "/tmp/test-context" \
  --action performance \
  --url "https://test.com/page"
```

**Expected:**
- ✅ Umami initialized
- ✅ Data fetched

---

### **Test 4.3: GA4 Connector (If Available)**

```bash
python3 ga4_connector.py \
  --property-id "$GA4_PROPERTY_ID" \
  --credentials "$GA4_CREDENTIALS_PATH" \
  --url "/test-page" \
  --days 30
```

**Expected:** (if credentials available)
- ✅ Connected to GA4
- ✅ Stats returned

---

### **Test 4.4: GSC Connector (If Available)**

```bash
python3 gsc_connector.py \
  --site-url "$GSC_SITE_URL" \
  --credentials "$GSC_CREDENTIALS_PATH" \
  --quick-wins
```

**Expected:** (if credentials available)
- ✅ Connected to GSC
- ✅ Quick wins returned

---

## 🧪 PHASE 5: Auto-Publish (Direct Write)

### **Test 5.1: Publish Thai Blog Post**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-multi-channel/scripts

# Create test blog
cat > /tmp/test-blog-th.md << 'EOF'
---
title: "คู่มือ Podcast Hosting 2026"
description: "เปรียบเทียบบริการ podcast hosting"
keywords: ["podcast hosting", "บริการ podcast"]
slug: podcast-hosting-2026
lang: th
category: guides
created: 2026-03-08
---

# คู่มือ Podcast Hosting 2026

บทความนี้จะเปรียบเทียบ...
EOF

# Create test website
mkdir -p /tmp/my-website/src/content/blog/\(th\)
mkdir -p /tmp/my-website/public/images/blog

# Publish (direct write, no git)
python3 auto_publish.py \
  --file /tmp/test-blog-th.md \
  --website-repo /tmp/my-website
```

**Expected:**
- ✅ Saved to `src/content/blog/(th)/podcast-hosting-2026.md`
- ✅ Direct write (no git)
- ✅ Language detected as Thai

---

### **Test 5.2: Publish English Blog Post**

```bash
cat > /tmp/test-blog-en.md << 'EOF'
---
title: "Best Podcast Hosting 2026"
description: "Compare podcast hosting services"
slug: best-podcast-hosting-2026
lang: en
---

# Best Podcast Hosting 2026

This article compares...
EOF

python3 auto_publish.py \
  --file /tmp/test-blog-en.md \
  --website-repo /tmp/my-website
```

**Expected:**
- ✅ Saved to `src/content/blog/(en)/best-podcast-hosting-2026.md`
- ✅ Language detected as English

---

## 🧪 PHASE 6: Full End-to-End Workflow

### **Test 6.1: Complete Website Creation with Umami**

```bash
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/website-creator/scripts

python3 create_astro_website.py \
  --name "Test Podcast Site" \
  --type "blog" \
  --languages "th,en" \
  --output "/tmp/test-podcast-website"
```

**Expected:**
- ✅ Website structure created
- ✅ Umami website auto-created (if credentials available)
- ✅ Tracking added to Astro layout
- ✅ Umami ID saved to website .env
- ✅ Git repo initialized

**Verify:**
```bash
# Check website structure
ls -la /tmp/test-podcast-website/

# Check Umami in layout
grep -n "script.js" /tmp/test-podcast-website/src/layouts/BaseHead.astro

# Check .env has Umami ID
grep "UMAMI_WEBSITE_ID" /tmp/test-podcast-website/.env

# Check Umami dashboard (manual)
# Login to Umami and verify website was created
```

---

## 📊 TEST RESULTS TRACKING

Create this file after testing:

```bash
cat > /Users/kunthawatgreethong/Gitea/opencode-skill/TEST_RESULTS_$(date +%Y%m%d).md << 'EOF'
# Test Results - $(date +%Y-%m-%d)

**Tester:** AI Agent
**Environment:** macOS, Python 3.x

## Phase 1: Core Features
- [ ] Test 1.1: Facebook generation
- [ ] Test 1.2: Multi-channel
- [ ] Test 1.3: Keyword analysis
- [ ] Test 1.4: Readability
- [ ] Test 1.5: Quality score
- [ ] Test 1.6: Context creation

## Phase 2: Image Features
- [ ] Test 2.1: Image generation
- [ ] Test 2.2: Find products
- [ ] Test 2.3: Image edit

## Phase 3: Umami
- [ ] Test 3.1: Create website
- [ ] Test 3.2: Get tracking
- [ ] Test 3.3: Get stats

## Phase 4: Analytics
- [ ] Test 4.1: Umami connector
- [ ] Test 4.2: Data aggregator
- [ ] Test 4.3: GA4 (if available)
- [ ] Test 4.4: GSC (if available)

## Phase 5: Auto-Publish
- [ ] Test 5.1: Thai blog
- [ ] Test 5.2: English blog

## Phase 6: Full Workflow
- [ ] Test 6.1: Complete website

## Bugs Found:
1. [Description]
2. [Description]

## Overall Status: PASS/FAIL/NEEDS_FIXES
EOF
```

---

## 🚀 AUTOMATED TESTING SCRIPT

I'll run this script to test everything automatically:

```bash
#!/bin/bash
# test_all_seo_skills.sh

set -e

echo "🧪 Starting SEO Skills Testing..."
echo "Date: $(date)"
echo ""

# Check .env
echo "📋 Step 1: Checking .env..."
if [ ! -f ".env" ]; then
    echo "✗ .env not found!"
    exit 1
fi
echo "✓ .env found"

# Run Phase 1 tests
echo ""
echo "📝 Phase 1: Core Features"
echo "========================"
cd seo-multi-channel/scripts
python3 generate_content.py --topic "test" --channels facebook --language th
echo "✓ Test 1.1: Facebook generation"

# Run Phase 3 tests (if Umami configured)
if [ -n "$UMAMI_URL" ] && [ -n "$UMAMI_USERNAME" ] && [ -n "$UMAMI_PASSWORD" ]; then
    echo ""
    echo "📈 Phase 3: Umami Integration"
    echo "=============================="
    cd ../../umami/scripts
    python3 umami_client.py --action create-website \
        --umami-url "$UMAMI_URL" \
        --username "$UMAMI_USERNAME" \
        --password "$UMAMI_PASSWORD" \
        --website-name "Auto Test" \
        --website-domain "test.moreminimore.com"
    echo "✓ Test 3.1: Umami website created"
else
    echo ""
    echo "⏭️  Skipping Phase 3 (Umami credentials not configured)"
fi

echo ""
echo "✅ Testing Complete!"
```

---

## ✅ READY TO TEST

All tests are documented. I'll now proceed with automated testing using your .env credentials.

**Next:** I'll run the tests automatically and report results.
