Release Please / Release Please (push) Skipped
Release / GoReleaser (push) Skipped
Tests / Secret scan (gitleaks) (push) Skipped
Tests / Test (Go 1.25) (push) Skipped
Tests / Test (Go stable) (push) Skipped
Tests / Secret scan (gitleaks) (pull_request) Successful in 4s
Tests / Test (Go 1.25) (pull_request) Successful in 59s
Tests / Test (Go stable) (pull_request) Successful in 1m7s
Showroom-safe: the tree no longer carries internal hosts, IPs, ports, personal names, client domains or client file names. Behaviour is unchanged and now supplied per deployment. - catalog: hardcoded mail-org / project classifiers become a YAML-driven Classifier (OO_CATALOG_CONFIG or --config); neutral default classifies nothing as work. New catalog/classify.go + example + tests. - storage_fallback: drop the baked-in MinIO endpoint IP; require MINIO_ENDPOINT (+ keys) from the env. - kontolink: build DocEditor links from $ONLYOFFICE_URL instead of a hardcoded portal host; kontoblatt: no client file id in the output name. - oo: load .env CLI-wide (bootstrap.LoadEnv in execute) so non-authenticating commands (catalog scans) also see config. - genericize comments/docs/fixtures (AGENTS, README, .env.example, crm-associations, catalog tests, ES/pdfattach tests, mails).
68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package catalog
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseMboxHeaderEmails(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "INBOX")
|
|
body := `From - Mon Jul 1 00:00:00 2016
|
|
From: Alice Smith <alice.smith@acme.example>
|
|
To: Bob Jones <bob.jones@acme.example>
|
|
Cc: noreply@example.com, client@stadt-example.de
|
|
Subject: test
|
|
|
|
Body line ignored
|
|
From - Mon Jul 2 00:00:00 2016
|
|
From: Someone <paul.schmidt@acme.example>
|
|
To: list@acme.example
|
|
|
|
more body
|
|
`
|
|
if err := os.WriteFile(path, []byte(body), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
ents, err := parseMboxHeaderEmails(path, DefaultClassifier())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got := map[string]bool{}
|
|
for _, e := range ents {
|
|
if len(e.Emails) > 0 {
|
|
got[e.Emails[0]] = true
|
|
}
|
|
}
|
|
if !got["alice.smith@acme.example"] || !got["bob.jones@acme.example"] {
|
|
t.Fatalf("%v", got)
|
|
}
|
|
if got["noreply@example.com"] {
|
|
t.Fatal("noreply should be filtered")
|
|
}
|
|
if !got["client@stadt-example.de"] {
|
|
t.Fatal("missing client")
|
|
}
|
|
}
|
|
|
|
func TestScanThunderbirdRootOptsMbox(t *testing.T) {
|
|
root := t.TempDir()
|
|
imap := filepath.Join(root, "ImapMail", "mail.example.com")
|
|
if err := os.MkdirAll(imap, 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(imap, "INBOX"), []byte(
|
|
"From - x\nFrom: a@acme.example\nTo: b@acme.example\n\nbody\n",
|
|
), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
doc, err := ScanThunderbirdRootOpts(root, ScanOptions{MboxHeaders: true})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(doc.Entries) < 2 {
|
|
t.Fatalf("%+v", doc.Entries)
|
|
}
|
|
}
|