mirror of
https://github.com/SamyRai/turash.git
synced 2025-12-26 23:01:33 +00:00
Repository Structure:
- Move files from cluttered root directory into organized structure
- Create archive/ for archived data and scraper results
- Create bugulma/ for the complete application (frontend + backend)
- Create data/ for sample datasets and reference materials
- Create docs/ for comprehensive documentation structure
- Create scripts/ for utility scripts and API tools
Backend Implementation:
- Implement 3 missing backend endpoints identified in gap analysis:
* GET /api/v1/organizations/{id}/matching/direct - Direct symbiosis matches
* GET /api/v1/users/me/organizations - User organizations
* POST /api/v1/proposals/{id}/status - Update proposal status
- Add complete proposal domain model, repository, and service layers
- Create database migration for proposals table
- Fix CLI server command registration issue
API Documentation:
- Add comprehensive proposals.md API documentation
- Update README.md with Users and Proposals API sections
- Document all request/response formats, error codes, and business rules
Code Quality:
- Follow existing Go backend architecture patterns
- Add proper error handling and validation
- Match frontend expected response schemas
- Maintain clean separation of concerns (handler -> service -> repository)
102 lines
2.0 KiB
Go
102 lines
2.0 KiB
Go
package graph
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestDefaultConfig(t *testing.T) {
|
|
config := DefaultConfig()
|
|
|
|
if config == nil {
|
|
t.Fatal("DefaultConfig() returned nil")
|
|
}
|
|
|
|
// Check default values
|
|
if config.MaxChainLength != 5 {
|
|
t.Errorf("MaxChainLength = %v, want 5", config.MaxChainLength)
|
|
}
|
|
|
|
if config.MaxPathHops != 4 {
|
|
t.Errorf("MaxPathHops = %v, want 4", config.MaxPathHops)
|
|
}
|
|
|
|
if config.MaxNetworkSize != 20 {
|
|
t.Errorf("MaxNetworkSize = %v, want 20", config.MaxNetworkSize)
|
|
}
|
|
|
|
if config.MinNetworkSize != 3 {
|
|
t.Errorf("MinNetworkSize = %v, want 3", config.MinNetworkSize)
|
|
}
|
|
|
|
if config.DefaultResultLimit != 50 {
|
|
t.Errorf("DefaultResultLimit = %v, want 50", config.DefaultResultLimit)
|
|
}
|
|
|
|
if config.MaxChainDistanceKm != 500.0 {
|
|
t.Errorf("MaxChainDistanceKm = %v, want 500.0", config.MaxChainDistanceKm)
|
|
}
|
|
|
|
if config.QueryTimeoutSeconds != 30 {
|
|
t.Errorf("QueryTimeoutSeconds = %v, want 30", config.QueryTimeoutSeconds)
|
|
}
|
|
}
|
|
|
|
func TestConfig_Validate(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
config *Config
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "Valid config",
|
|
config: DefaultConfig(),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Invalid MaxChainLength",
|
|
config: &Config{
|
|
MaxChainLength: 0,
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Invalid MaxPathHops",
|
|
config: &Config{
|
|
MaxChainLength: 5,
|
|
MaxPathHops: 0,
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Invalid MaxNetworkSize < MinNetworkSize",
|
|
config: &Config{
|
|
MaxChainLength: 5,
|
|
MaxPathHops: 4,
|
|
MaxNetworkSize: 2,
|
|
MinNetworkSize: 5,
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "Invalid DefaultResultLimit",
|
|
config: &Config{
|
|
MaxChainLength: 5,
|
|
MaxPathHops: 4,
|
|
MaxNetworkSize: 20,
|
|
MinNetworkSize: 3,
|
|
DefaultResultLimit: 0,
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := tt.config.Validate()
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("Config.Validate() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|