Remove checks
This commit is contained in:
parent
954a9d705e
commit
0b4d32dada
28 changed files with 1656 additions and 3846 deletions
|
|
@ -24,7 +24,6 @@ package analyzer
|
|||
import (
|
||||
"net/mail"
|
||||
"net/textproto"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
|
@ -54,9 +53,6 @@ func TestNewReportGenerator(t *testing.T) {
|
|||
if gen.contentAnalyzer == nil {
|
||||
t.Error("contentAnalyzer should not be nil")
|
||||
}
|
||||
if gen.scorer == nil {
|
||||
t.Error("scorer should not be nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnalyzeEmail(t *testing.T) {
|
||||
|
|
@ -77,20 +73,6 @@ func TestAnalyzeEmail(t *testing.T) {
|
|||
if results.Authentication == nil {
|
||||
t.Error("Authentication should not be nil")
|
||||
}
|
||||
|
||||
// SpamAssassin might be nil if headers don't exist
|
||||
// DNS results should exist
|
||||
// RBL results should exist
|
||||
// Content results should exist
|
||||
|
||||
if results.Score == nil {
|
||||
t.Error("Score should not be nil")
|
||||
}
|
||||
|
||||
// Verify score is within bounds
|
||||
if results.Score.OverallScore < 0 || results.Score.OverallScore > 100 {
|
||||
t.Errorf("Overall score %v is out of bounds", results.Score.OverallScore)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGenerateReport(t *testing.T) {
|
||||
|
|
@ -125,10 +107,6 @@ func TestGenerateReport(t *testing.T) {
|
|||
t.Error("Summary should not be nil")
|
||||
}
|
||||
|
||||
if len(report.Checks) == 0 {
|
||||
t.Error("Checks should not be empty")
|
||||
}
|
||||
|
||||
// Verify score summary
|
||||
if report.Summary != nil {
|
||||
if report.Summary.AuthenticationScore < 0 || report.Summary.AuthenticationScore > 3 {
|
||||
|
|
@ -147,22 +125,6 @@ func TestGenerateReport(t *testing.T) {
|
|||
t.Errorf("HeaderScore %v is out of bounds", report.Summary.HeaderScore)
|
||||
}
|
||||
}
|
||||
|
||||
// Verify checks have required fields
|
||||
for i, check := range report.Checks {
|
||||
if string(check.Category) == "" {
|
||||
t.Errorf("Check %d: Category should not be empty", i)
|
||||
}
|
||||
if check.Name == "" {
|
||||
t.Errorf("Check %d: Name should not be empty", i)
|
||||
}
|
||||
if string(check.Status) == "" {
|
||||
t.Errorf("Check %d: Status should not be empty", i)
|
||||
}
|
||||
if check.Message == "" {
|
||||
t.Errorf("Check %d: Message should not be empty", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGenerateReportWithSpamAssassin(t *testing.T) {
|
||||
|
|
@ -190,9 +152,9 @@ func TestBuildDNSRecords(t *testing.T) {
|
|||
|
||||
tests := []struct {
|
||||
name string
|
||||
dns *DNSResults
|
||||
dns *api.DNSResults
|
||||
expectedCount int
|
||||
expectTypes []api.DNSRecordRecordType
|
||||
expectTypes []DNSRecordRecordType
|
||||
}{
|
||||
{
|
||||
name: "Nil DNS results",
|
||||
|
|
@ -201,25 +163,25 @@ func TestBuildDNSRecords(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "Complete DNS results",
|
||||
dns: &DNSResults{
|
||||
dns: &api.DNSResults{
|
||||
Domain: "example.com",
|
||||
MXRecords: []MXRecord{
|
||||
MxRecords: &[]api.MXRecord{
|
||||
{Host: "mail.example.com", Priority: 10, Valid: true},
|
||||
},
|
||||
SPFRecord: &SPFRecord{
|
||||
Record: "v=spf1 include:_spf.example.com -all",
|
||||
SpfRecord: &api.SPFRecord{
|
||||
Record: api.PtrTo("v=spf1 include:_spf.example.com -all"),
|
||||
Valid: true,
|
||||
},
|
||||
DKIMRecords: []DKIMRecord{
|
||||
DkimRecords: &[]api.DKIMRecord{
|
||||
{
|
||||
Selector: "default",
|
||||
Domain: "example.com",
|
||||
Record: "v=DKIM1; k=rsa; p=...",
|
||||
Record: api.PtrTo("v=DKIM1; k=rsa; p=..."),
|
||||
Valid: true,
|
||||
},
|
||||
},
|
||||
DMARCRecord: &DMARCRecord{
|
||||
Record: "v=DMARC1; p=quarantine",
|
||||
DmarcRecord: &api.DMARCRecord{
|
||||
Record: api.PtrTo("v=DMARC1; p=quarantine"),
|
||||
Valid: true,
|
||||
},
|
||||
},
|
||||
|
|
@ -319,135 +281,6 @@ func TestGenerateRawEmail(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestGetRecommendations(t *testing.T) {
|
||||
gen := NewReportGenerator(10*time.Second, 10*time.Second, DefaultRBLs)
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
results *AnalysisResults
|
||||
expectCount int
|
||||
}{
|
||||
{
|
||||
name: "Nil results",
|
||||
results: nil,
|
||||
expectCount: 0,
|
||||
},
|
||||
{
|
||||
name: "Results with score",
|
||||
results: &AnalysisResults{
|
||||
Score: &ScoringResult{
|
||||
OverallScore: 50,
|
||||
Grade: ScoreToReportGrade(50),
|
||||
AuthScore: 15,
|
||||
SpamScore: 10,
|
||||
BlacklistScore: 15,
|
||||
ContentScore: 5,
|
||||
HeaderScore: 5,
|
||||
Recommendations: []string{
|
||||
"Improve authentication",
|
||||
"Fix content issues",
|
||||
},
|
||||
},
|
||||
},
|
||||
expectCount: 2,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
recs := gen.GetRecommendations(tt.results)
|
||||
if len(recs) != tt.expectCount {
|
||||
t.Errorf("Got %d recommendations, want %d", len(recs), tt.expectCount)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetScoreSummaryText(t *testing.T) {
|
||||
gen := NewReportGenerator(10*time.Second, 10*time.Second, DefaultRBLs)
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
results *AnalysisResults
|
||||
expectEmpty bool
|
||||
expectString string
|
||||
}{
|
||||
{
|
||||
name: "Nil results",
|
||||
results: nil,
|
||||
expectEmpty: true,
|
||||
},
|
||||
{
|
||||
name: "Results with score",
|
||||
results: &AnalysisResults{
|
||||
Score: &ScoringResult{
|
||||
OverallScore: 85,
|
||||
Grade: ScoreToReportGrade(85),
|
||||
AuthScore: 25,
|
||||
SpamScore: 18,
|
||||
BlacklistScore: 20,
|
||||
ContentScore: 15,
|
||||
HeaderScore: 7,
|
||||
CategoryBreakdown: map[string]CategoryScore{
|
||||
"Authentication": {Score: 25, Status: "Pass"},
|
||||
"Spam Filters": {Score: 18, Status: "Pass"},
|
||||
"Blacklists": {Score: 20, Status: "Pass"},
|
||||
"Content Quality": {Score: 15, Status: "Warn"},
|
||||
"Email Structure": {Score: 7, Status: "Warn"},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectEmpty: false,
|
||||
expectString: "8.5/10",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
summary := gen.GetScoreSummaryText(tt.results)
|
||||
if tt.expectEmpty {
|
||||
if summary != "" {
|
||||
t.Errorf("Expected empty summary, got %q", summary)
|
||||
}
|
||||
} else {
|
||||
if summary == "" {
|
||||
t.Error("Expected non-empty summary")
|
||||
}
|
||||
if tt.expectString != "" && !strings.Contains(summary, tt.expectString) {
|
||||
t.Errorf("Summary should contain %q, got %q", tt.expectString, summary)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestReportCategories(t *testing.T) {
|
||||
gen := NewReportGenerator(10*time.Second, 10*time.Second, DefaultRBLs)
|
||||
testID := uuid.New()
|
||||
|
||||
email := createComprehensiveTestEmail()
|
||||
results := gen.AnalyzeEmail(email)
|
||||
report := gen.GenerateReport(testID, results)
|
||||
|
||||
// Verify all check categories are present
|
||||
categories := make(map[api.CheckCategory]bool)
|
||||
for _, check := range report.Checks {
|
||||
categories[check.Category] = true
|
||||
}
|
||||
|
||||
expectedCategories := []api.CheckCategory{
|
||||
api.Authentication,
|
||||
api.Dns,
|
||||
api.Headers,
|
||||
}
|
||||
|
||||
for _, cat := range expectedCategories {
|
||||
if !categories[cat] {
|
||||
t.Errorf("Expected category %s not found in checks", cat)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Helper functions
|
||||
|
||||
func createTestEmail() *EmailMessage {
|
||||
|
|
@ -484,21 +317,3 @@ func createTestEmailWithSpamAssassin() *EmailMessage {
|
|||
email.Header[textproto.CanonicalMIMEHeaderKey("X-Spam-Flag")] = []string{"NO"}
|
||||
return email
|
||||
}
|
||||
|
||||
func createComprehensiveTestEmail() *EmailMessage {
|
||||
email := createTestEmailWithSpamAssassin()
|
||||
|
||||
// Add authentication headers
|
||||
email.Header[textproto.CanonicalMIMEHeaderKey("Authentication-Results")] = []string{
|
||||
"example.com; spf=pass smtp.mailfrom=sender@example.com; dkim=pass header.d=example.com; dmarc=pass",
|
||||
}
|
||||
|
||||
// Add HTML content
|
||||
email.Parts = append(email.Parts, MessagePart{
|
||||
ContentType: "text/html",
|
||||
Content: "<html><body><p>Test</p><a href='https://example.com'>Link</a></body></html>",
|
||||
IsHTML: true,
|
||||
})
|
||||
|
||||
return email
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue