docs: add comprehensive testing guide for v1.26.0
Some checks failed
Build and Release / Build Binaries (amd64, darwin) (push) Blocked by required conditions
Build and Release / Build Binaries (amd64, linux) (push) Blocked by required conditions
Build and Release / Build Binaries (amd64, windows) (push) Blocked by required conditions
Build and Release / Build Binaries (arm64, darwin) (push) Blocked by required conditions
Build and Release / Build Binaries (arm64, linux) (push) Blocked by required conditions
Build and Release / Build Docker Image (push) Blocked by required conditions
Build and Release / Create Release (push) Blocked by required conditions
Build and Release / Lint and Test (push) Has been cancelled

Includes:
- Docker and local test environment setup
- Automated test examples
- Manual testing checklists for all new features
- Regression testing for critical paths
- Load testing guidance
- Database migration verification
- Staging deployment process
- Rollback plan
- Quick smoke test script

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
David H. Friedel Jr. 2026-01-09 15:21:04 -05:00
parent 2af5c1990e
commit 076f142b7d

508
docs/testing-guide-v1.26.md Normal file
View File

@ -0,0 +1,508 @@
# Testing Guide for Gitea v1.26.0
## Overview
This guide covers testing the new features in v1.26.0 before production deployment:
- Phase 3: Organization Public Profile
- Phase 4: Gitea Pages
- Phase 5: Wiki V2 API
---
## 1. Test Environment Setup
### Option A: Docker Test Instance
```bash
# Create isolated test environment
mkdir gitea-test && cd gitea-test
# Create docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: "3"
services:
gitea:
image: gitea/gitea:1.26.0
container_name: gitea-test
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
- GITEA__server__ROOT_URL=http://localhost:3000/
volumes:
- ./gitea-data:/data
ports:
- "3000:3000"
- "2222:22"
EOF
# Start test instance
docker-compose up -d
# View logs
docker-compose logs -f gitea
```
### Option B: Local Binary Test
```bash
# Build with test tags
make build TAGS="bindata sqlite sqlite_unlock_notify"
# Create test directory
mkdir -p /tmp/gitea-test/{data,repos,log}
# Run with test config
./gitea web --config /tmp/gitea-test/app.ini
```
### Test Database
For testing, use SQLite to avoid affecting production databases:
```ini
# /tmp/gitea-test/app.ini
[database]
DB_TYPE = sqlite3
PATH = /tmp/gitea-test/data/gitea.db
```
---
## 2. Automated Tests
### Run Existing Test Suite
```bash
# Unit tests
make test
# Integration tests (requires test database)
make test-sqlite
# Specific package tests
go test -v ./services/wiki/...
go test -v ./models/repo/...
go test -v ./routers/api/v2/...
```
### New Test Files to Create
#### Wiki V2 API Tests
```go
// routers/api/v2/wiki_test.go
package v2
import (
"net/http"
"testing"
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/tests"
)
func TestWikiV2API(t *testing.T) {
defer tests.PrepareTestEnv(t)()
// Test list pages
t.Run("ListPages", func(t *testing.T) {
req := NewRequest(t, "GET", "/api/v2/repos/user2/repo1/wiki/pages")
resp := MakeRequest(t, req, http.StatusOK)
// Assert response structure
})
// Test create page
t.Run("CreatePage", func(t *testing.T) {
req := NewRequestWithJSON(t, "POST", "/api/v2/repos/user2/repo1/wiki/pages", map[string]string{
"name": "Test-Page",
"content": "# Test\n\nThis is a test page.",
})
AddTokenAuth(req, "user2")
resp := MakeRequest(t, req, http.StatusOK)
// Assert page created
})
// Test search
t.Run("Search", func(t *testing.T) {
req := NewRequest(t, "GET", "/api/v2/repos/user2/repo1/wiki/search?q=test")
resp := MakeRequest(t, req, http.StatusOK)
// Assert search results
})
}
```
---
## 3. Manual Testing Checklist
### Phase 3: Organization Profile
#### Setup
- [ ] Create test organization: `test-org`
- [ ] Create 5+ test repositories in the organization
- [ ] Add 3+ members with different roles (Owner, Admin, Member)
#### Pinned Repositories
- [ ] Pin a repository via API: `POST /api/v1/orgs/test-org/pinned`
- [ ] Verify pinned repo appears on org profile page
- [ ] Create a pinned group: `POST /api/v1/orgs/test-org/pinned/groups`
- [ ] Add repos to the group
- [ ] Reorder pinned repos via API
- [ ] Unpin a repository
- [ ] Delete a pinned group
#### Public Members
- [ ] Set member as public via API
- [ ] Verify member appears on org profile
- [ ] Check role display (Owner/Admin/Member)
- [ ] Remove public visibility
- [ ] Verify "and X more" overflow works
### Phase 4: Gitea Pages
#### Setup
- [ ] Create test repository: `test-org/pages-test`
- [ ] Add `.gitea/landing.yaml` configuration file
- [ ] Add README.md with content
#### Templates
- [ ] Test Simple template
- [ ] Test Documentation template (add `/docs` folder)
- [ ] Test Product template (add features config)
- [ ] Test Portfolio template (add `/gallery` folder)
#### Settings UI
- [ ] Navigate to repo Settings → Pages
- [ ] Enable pages
- [ ] Select different templates
- [ ] Verify landing page renders at `/{owner}/{repo}/pages`
#### Custom Domains (if configured)
- [ ] Add custom domain via API
- [ ] Check verification token generated
- [ ] Test domain verification flow
### Phase 5: Wiki V2 API
#### Setup
- [ ] Create test repository with wiki enabled
- [ ] Create initial wiki pages via web UI
#### CRUD Operations
```bash
# Set variables
TOKEN="your-test-token"
BASE="http://localhost:3000/api/v2/repos/test-org/test-repo/wiki"
# List pages
curl -H "Authorization: token $TOKEN" "$BASE/pages"
# Get single page
curl -H "Authorization: token $TOKEN" "$BASE/pages/Home"
# Create page
curl -X POST -H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Test-Page","content":"# Test\n\nContent here."}' \
"$BASE/pages"
# Update page
curl -X PUT -H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"# Updated\n\nNew content."}' \
"$BASE/pages/Test-Page"
# Delete page
curl -X DELETE -H "Authorization: token $TOKEN" "$BASE/pages/Test-Page"
```
#### Search
```bash
# Search wiki
curl -H "Authorization: token $TOKEN" "$BASE/search?q=installation"
```
#### Graph & Stats
```bash
# Get link graph
curl -H "Authorization: token $TOKEN" "$BASE/graph"
# Get statistics
curl -H "Authorization: token $TOKEN" "$BASE/stats"
```
#### Verify Response Structure
- [ ] `content` field contains raw markdown
- [ ] `content_html` field contains rendered HTML
- [ ] `links_out` contains outgoing wiki links
- [ ] `links_in` contains incoming links
- [ ] `word_count` is accurate
- [ ] `last_commit` has correct author info
---
## 4. Regression Testing
### Critical Paths to Verify
These existing features MUST still work:
#### Repository Operations
- [ ] Clone repository (HTTP and SSH)
- [ ] Push commits
- [ ] Create branches
- [ ] Create tags
- [ ] Pull requests work
- [ ] Merge operations work
#### Wiki (V1 - Existing)
- [ ] Existing wiki pages load
- [ ] Create page via web UI
- [ ] Edit page via web UI
- [ ] Delete page via web UI
- [ ] V1 API endpoints still work:
- `GET /api/v1/repos/{owner}/{repo}/wiki/pages`
- `GET /api/v1/repos/{owner}/{repo}/wiki/page/{pageName}`
#### Organizations
- [ ] Create organization
- [ ] Add/remove members
- [ ] Team management
- [ ] Repository creation in org
#### User Operations
- [ ] Login/logout
- [ ] Profile settings
- [ ] SSH key management
- [ ] Access tokens
---
## 5. Load Testing
### Wiki Search Performance
```bash
# Install hey (HTTP load generator)
go install github.com/rakyll/hey@latest
# Test search endpoint under load
hey -n 1000 -c 50 -H "Authorization: token $TOKEN" \
"http://localhost:3000/api/v2/repos/test-org/test-repo/wiki/search?q=test"
```
### Expected Performance
- Search: < 500ms for wikis with < 100 pages
- List pages: < 200ms
- Get single page: < 100ms
- Graph generation: < 1s for wikis with < 100 pages
---
## 6. Database Migration Testing
### Test Migration Rollback
```bash
# Backup before testing
cp gitea.db gitea.db.backup
# Run migrations
./gitea migrate
# Verify tables created
sqlite3 gitea.db ".tables" | grep -E "(wiki_index|pages_|org_pinned)"
# Check table structure
sqlite3 gitea.db ".schema wiki_index"
sqlite3 gitea.db ".schema pages_config"
sqlite3 gitea.db ".schema org_pinned_repo"
```
### Verify Data Integrity
```sql
-- Check no orphaned records
SELECT COUNT(*) FROM wiki_index WHERE repo_id NOT IN (SELECT id FROM repository);
SELECT COUNT(*) FROM pages_config WHERE repo_id NOT IN (SELECT id FROM repository);
SELECT COUNT(*) FROM org_pinned_repo WHERE org_id NOT IN (SELECT id FROM user WHERE type=1);
```
---
## 7. Staging Deployment
### Recommended Staging Process
1. **Clone Production Data** (sanitized)
```bash
# Create sanitized copy of production DB
pg_dump production_db | psql staging_db
# Remove sensitive data
UPDATE user SET passwd = 'disabled', salt = 'disabled' WHERE id > 1;
DELETE FROM access_token;
DELETE FROM oauth2_authorization_code;
```
2. **Deploy to Staging**
```bash
# Deploy v1.26.0 to staging
docker pull gitea/gitea:1.26.0
docker-compose -f docker-compose.staging.yml up -d
```
3. **Run Test Suite Against Staging**
```bash
# Point tests at staging
export GITEA_URL=https://staging.gitea.example.com
export GITEA_TOKEN=staging-test-token
# Run integration tests
go test -v ./tests/integration/...
```
4. **Soak Test** (24-48 hours)
- Monitor error logs
- Check memory usage
- Verify no database locks
- Test with real (internal) users
---
## 8. Rollback Plan
### If Issues Found
1. **Immediate Rollback**
```bash
# Stop new version
docker-compose down
# Restore previous version
docker pull gitea/gitea:1.25.3
docker-compose up -d
```
2. **Database Rollback** (if needed)
```bash
# Restore from backup
pg_restore -d gitea gitea_backup.sql
# Or for SQLite
cp gitea.db.backup gitea.db
```
3. **New Tables Are Safe**
- Migration 326-328 only ADD tables
- No existing tables modified
- Rollback doesn't require table drops
- Old version simply ignores new tables
---
## 9. Production Deployment Checklist
### Pre-Deployment
- [ ] All automated tests passing
- [ ] Manual testing completed
- [ ] Staging deployment successful
- [ ] Database backup created
- [ ] Rollback procedure documented
- [ ] Maintenance window scheduled
- [ ] Users notified of downtime
### Deployment
- [ ] Stop Gitea service
- [ ] Backup database
- [ ] Deploy new binary/container
- [ ] Run migrations
- [ ] Start Gitea service
- [ ] Verify health check endpoints
- [ ] Spot check critical features
### Post-Deployment
- [ ] Monitor error logs for 1 hour
- [ ] Verify wiki search working
- [ ] Verify pages rendering
- [ ] Verify org profiles
- [ ] Check performance metrics
- [ ] Confirm with team leads
---
## 10. Quick Smoke Test Script
Save this as `smoke-test.sh`:
```bash
#!/bin/bash
set -e
BASE_URL="${GITEA_URL:-http://localhost:3000}"
TOKEN="${GITEA_TOKEN:-your-token}"
OWNER="test-org"
REPO="test-repo"
echo "=== Gitea v1.26.0 Smoke Tests ==="
# Health check
echo -n "Health check... "
curl -sf "$BASE_URL/api/v1/version" > /dev/null && echo "OK" || echo "FAIL"
# Wiki V2 - List pages
echo -n "Wiki V2 - List pages... "
curl -sf -H "Authorization: token $TOKEN" \
"$BASE_URL/api/v2/repos/$OWNER/$REPO/wiki/pages" > /dev/null && echo "OK" || echo "FAIL"
# Wiki V2 - Search
echo -n "Wiki V2 - Search... "
curl -sf -H "Authorization: token $TOKEN" \
"$BASE_URL/api/v2/repos/$OWNER/$REPO/wiki/search?q=test" > /dev/null && echo "OK" || echo "FAIL"
# Wiki V2 - Stats
echo -n "Wiki V2 - Stats... "
curl -sf -H "Authorization: token $TOKEN" \
"$BASE_URL/api/v2/repos/$OWNER/$REPO/wiki/stats" > /dev/null && echo "OK" || echo "FAIL"
# Wiki V2 - Graph
echo -n "Wiki V2 - Graph... "
curl -sf -H "Authorization: token $TOKEN" \
"$BASE_URL/api/v2/repos/$OWNER/$REPO/wiki/graph" > /dev/null && echo "OK" || echo "FAIL"
# Org pinned repos
echo -n "Org pinned repos... "
curl -sf -H "Authorization: token $TOKEN" \
"$BASE_URL/api/v1/orgs/$OWNER/pinned" > /dev/null && echo "OK" || echo "FAIL"
# Pages config
echo -n "Pages config... "
curl -sf -H "Authorization: token $TOKEN" \
"$BASE_URL/api/v1/repos/$OWNER/$REPO/pages" > /dev/null && echo "OK" || echo "FAIL"
echo "=== Smoke Tests Complete ==="
```
Run with:
```bash
chmod +x smoke-test.sh
GITEA_URL=http://localhost:3000 GITEA_TOKEN=your-token ./smoke-test.sh
```
---
## Summary
**Minimum Testing Before Production:**
1. Run automated test suite (`make test`)
2. Complete manual checklist for new features
3. Verify regression tests pass
4. Deploy to staging for 24+ hours
5. Run smoke tests after production deployment
**The new features are isolated:**
- V2 Wiki API is separate from V1 (won't break existing integrations)
- New database tables don't modify existing schema
- Pages feature is opt-in per repository
- Org pinned repos don't affect existing org functionality