tdd - refactor mailer go

This commit is contained in:
Jonathan Martz
2025-01-12 12:20:51 +01:00
parent 007a87ee3c
commit 6d8c66321d

129
mailer.go
View File

@@ -1,20 +1,20 @@
package main package main
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "flag"
"log" "fmt"
"flag" "log"
"net/smtp" "net/smtp"
"os/exec" "os/exec"
"time" "time"
) )
func main() { func main() {
now := time.Now() now := time.Now()
// Define flags // Define flags
smtpPass := flag.String("password", "", "SMTP password") smtpPass := flag.String("password", "", "SMTP password")
sender := flag.String("sender", "", "SMTP sender") sender := flag.String("sender", "", "SMTP sender")
smtpUser := flag.String("user", "", "SMTP username") smtpUser := flag.String("user", "", "SMTP username")
@@ -22,68 +22,75 @@ func main() {
// Parse the flags // Parse the flags
flag.Parse() flag.Parse()
// Check if password is provided // Check if required flags are provided
if *smtpPass == "" { if *smtpPass == "" {
fmt.Println("Error: Password is required. Use -password flag.") log.Fatal("Error: Password is required. Use -password flag.")
return }
if *smtpUser == "" {
log.Fatal("Error: SMTP username is required. Use -user flag.")
}
if *sender == "" {
log.Fatal("Error: Sender email is required. Use -sender flag.")
} }
// Format the date as YYYY-MM-DD // Format the date as YYYY-MM-DD
currentDate := now.Format("01.02.2006") currentDate := now.Format("01-02-2006")
recipient := "support@jonathan-martz.de" recipient := "support@jonathan-martz.de"
subject := "PHPUnit - PocketBase PHP SDK -" + currentDate subject := "PHPUnit - PocketBase PHP SDK - " + currentDate
smtpHost := "smtps.udag.de" // Replace with your SMTP host smtpHost := "smtps.udag.de" // Replace with your SMTP host
smtpPort := "587" // Replace with your SMTP port smtpPort := "587" // Replace with your SMTP port
// Run PHPUnit with combined stdout and stderr // Run PHPUnit with combined stdout and stderr
cmd := exec.Command("php", "vendor/bin/phpunit") cmd := exec.Command("php", "vendor/bin/phpunit")
var output bytes.Buffer var output bytes.Buffer
cmd.Stdout = &output cmd.Stdout = &output
cmd.Stderr = &output cmd.Stderr = &output
if err := cmd.Run(); err != nil { if err := cmd.Run(); err != nil {
log.Printf("PHPUnit command failed: %v", err) log.Printf("PHPUnit command failed: %v", err)
} }
// Check if output is empty // Check if output is empty
if output.Len() == 0 { if output.Len() == 0 {
log.Fatal("PHPUnit output is empty. Please check your configuration.") log.Fatal("PHPUnit output is empty. Please check your configuration.")
} }
// Parse the JSON output // Parse the JSON output
var result map[string]interface{} var result map[string]interface{}
if err := json.Unmarshal(output.Bytes(), &result); err != nil { if err := json.Unmarshal(output.Bytes(), &result); err != nil {
log.Fatalf("Failed to parse JSON output: %v", err) log.Fatalf("Failed to parse JSON output: %v", err)
} }
// Extract the 'counts' field // Extract the 'counts' field
counts, ok := result["counts"].(map[string]interface{}) counts, ok := result["counts"].(map[string]interface{})
if !ok { if !ok {
log.Fatal("Counts field not found in PHPUnit output.") log.Fatal("Counts field not found in PHPUnit output.")
} }
// Serialize the counts field to JSON for the email body fmt.Println(output.String())
countsJSON, err := json.MarshalIndent(counts, "", " ")
if err != nil {
log.Fatalf("Failed to serialize counts to JSON: %v", err)
}
// Prepare the email body // Serialize the counts field to JSON for the email body
emailBody := fmt.Sprintf("Subject: %s\r\n\r\n%s", subject, string(countsJSON)) countsJSON, err := json.MarshalIndent(counts, "", " ")
if err != nil {
log.Fatalf("Failed to serialize counts to JSON: %v", err)
}
// Connect to the SMTP server // Prepare the email body
auth := smtp.PlainAuth("", *smtpUser, *smtpPass, smtpHost) emailBody := fmt.Sprintf("Subject: %s\r\n\r\n%s", subject, string(countsJSON))
err = smtp.SendMail(
smtpHost+":"+smtpPort,
auth,
*sender,
[]string{recipient},
[]byte(emailBody),
)
if err != nil {
log.Fatalf("Failed to send email: %v", err)
}
log.Println("Test results sent to", recipient) // Connect to the SMTP server
auth := smtp.PlainAuth("", *smtpUser, *smtpPass, smtpHost)
err = smtp.SendMail(
smtpHost+":"+smtpPort,
auth,
*sender,
[]string{recipient},
[]byte(emailBody),
)
if err != nil {
log.Fatalf("Failed to send email: %v", err)
}
log.Println("Test results sent to", recipient)
} }