Files
opencode-skill/SINGLE_TESTING_GUIDE.md
2026-03-08 23:03:19 +07:00

14 KiB

🧪 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

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

Expected: File exists (not .env.example)


2. Check Available Credentials

Run this check script:

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

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

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:

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

Test 1.2: Multi-Channel Generation

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

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

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

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

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:

ls -la /tmp/test-website/context/

🧪 PHASE 2: Image Features (Needs CHUTES_API_TOKEN)

Test 2.1: Image Generation

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

# 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

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

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

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

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)

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

# 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)

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)

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

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

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

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:

# 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:

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:

#!/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.