package imap import ( "database/sql" "testing" "time" "postern/internal/model" "github.com/emersion/go-imap/v2" ) func TestSearchDate(t *testing.T) { intDate := time.Now().UTC() envDate := time.Now().UTC() m := model.Message{ UID: 123, InternalDate: intDate.Format(time.RFC3339), EnvelopeDate: sql.NullString{ String: envDate.Format(time.RFC3339), Valid: true, }, } // internal criteria := &imap.SearchCriteria{ Before: intDate.Add(-time.Hour * 24), } if evalSearchDates(criteria, m) { t.Error("expected BEFORE not to find given message") } criteria.Before = criteria.Before.Add(time.Hour * 24 * 2) if !evalSearchDates(criteria, m) { t.Error("expected BEFORE to find given message") } criteria = &imap.SearchCriteria{Since: time.Now().UTC()} if !evalSearchDates(criteria, m) { t.Error("expected SINCE to find given message") } criteria.Since = criteria.Since.Add(time.Hour * 24) if evalSearchDates(criteria, m) { t.Error("expected SINCE not to find given message") } // envelope date criteria = &imap.SearchCriteria{ SentBefore: intDate.Add(-time.Hour * 24), } if evalSearchDates(criteria, m) { t.Error("expected SENTBEFORE not to find given message") } criteria.SentBefore = criteria.SentBefore.Add(time.Hour * 24 * 2) if !evalSearchDates(criteria, m) { t.Error("expected SENTBEFORE to find given message") } criteria = &imap.SearchCriteria{ SentSince: time.Now().UTC(), } if !evalSearchDates(criteria, m) { t.Error("expected SENTSINCE to find given message") } criteria.SentSince = time.Now().UTC().Add(time.Hour * 24) if evalSearchDates(criteria, m) { t.Error("expected SENTSINCE not to find given message") } // missing envelope date will not result in any findings m = model.Message{ UID: 123, InternalDate: intDate.Format(time.RFC3339), EnvelopeDate: sql.NullString{}, } criteria = &imap.SearchCriteria{ SentBefore: intDate.Add(time.Hour * 24), } if evalSearchDates(criteria, m) { t.Error("expected SENTBEFORE not to find given message with missing envelope Date") } }