Corso: Exchange: Mail: Backup Details to include recipients --JSON ONLY (#2689)

<!-- Insert PR description-->
#### Adds  Email recipients to the backup details for Exchange Mail. If the recipients are of length greater than one, the list of individuals is included and separated by a `,`

---

#### Does this PR need a docs update or release note?
- [x]  No

#### Type of change

<!--- Please check the type of change your PR introduces: --->
- [x] 🌻 Feature


#### Issue(s)

<!-- Can reference multiple issues. Use one of the following "magic words" - "closes, fixes" to auto-close the Github issue. -->
* closes  #2687<issue>

#### Test Plan

<!-- How will this be tested prior to merging.-->
- [x]  Unit test
This commit is contained in:
Danny 2023-03-06 18:32:38 -08:00 committed by GitHub
parent 3f3d47a54a
commit 030147ddcb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 76 additions and 34 deletions

View File

@ -357,22 +357,31 @@ func (c Mail) Serialize(
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
func MailInfo(msg models.Messageable) *details.ExchangeInfo { func MailInfo(msg models.Messageable) *details.ExchangeInfo {
sender := "" var (
subject := ptr.Val(msg.GetSubject()) sender = graph.UnwrapEmailAddress(msg.GetSender())
received := ptr.Val(msg.GetReceivedDateTime()) subject = ptr.Val(msg.GetSubject())
created := ptr.Val(msg.GetCreatedDateTime()) received = ptr.Val(msg.GetReceivedDateTime())
created = ptr.Val(msg.GetCreatedDateTime())
recipients = make([]string, 0)
)
if msg.GetSender() != nil && if msg.GetToRecipients() != nil {
msg.GetSender().GetEmailAddress() != nil { ppl := msg.GetToRecipients()
sender = ptr.Val(msg.GetSender().GetEmailAddress().GetAddress()) for _, entry := range ppl {
temp := graph.UnwrapEmailAddress(entry)
if len(temp) > 0 {
recipients = append(recipients, temp)
}
}
} }
return &details.ExchangeInfo{ return &details.ExchangeInfo{
ItemType: details.ExchangeMail, ItemType: details.ExchangeMail,
Sender: sender, Sender: sender,
Subject: subject, Recipient: recipients,
Received: received, Subject: subject,
Created: created, Received: received,
Modified: ptr.OrNow(msg.GetLastModifiedDateTime()), Created: created,
Modified: ptr.OrNow(msg.GetLastModifiedDateTime()),
} }
} }

View File

@ -35,9 +35,10 @@ func (suite *MailAPIUnitSuite) TestMailInfo() {
msg.SetLastModifiedDateTime(&initial) msg.SetLastModifiedDateTime(&initial)
i := &details.ExchangeInfo{ i := &details.ExchangeInfo{
ItemType: details.ExchangeMail, ItemType: details.ExchangeMail,
Created: initial, Recipient: []string{},
Modified: initial, Created: initial,
Modified: initial,
} }
return msg, i return msg, i
}, },
@ -55,10 +56,11 @@ func (suite *MailAPIUnitSuite) TestMailInfo() {
msg.SetLastModifiedDateTime(&initial) msg.SetLastModifiedDateTime(&initial)
msg.SetSender(sr) msg.SetSender(sr)
i := &details.ExchangeInfo{ i := &details.ExchangeInfo{
ItemType: details.ExchangeMail, ItemType: details.ExchangeMail,
Sender: sender, Recipient: []string{},
Created: initial, Sender: sender,
Modified: initial, Created: initial,
Modified: initial,
} }
return msg, i return msg, i
}, },
@ -72,10 +74,11 @@ func (suite *MailAPIUnitSuite) TestMailInfo() {
msg.SetCreatedDateTime(&initial) msg.SetCreatedDateTime(&initial)
msg.SetLastModifiedDateTime(&initial) msg.SetLastModifiedDateTime(&initial)
i := &details.ExchangeInfo{ i := &details.ExchangeInfo{
ItemType: details.ExchangeMail, ItemType: details.ExchangeMail,
Subject: subject, Subject: subject,
Created: initial, Created: initial,
Modified: initial, Recipient: []string{},
Modified: initial,
} }
return msg, i return msg, i
}, },
@ -89,10 +92,11 @@ func (suite *MailAPIUnitSuite) TestMailInfo() {
msg.SetLastModifiedDateTime(&initial) msg.SetLastModifiedDateTime(&initial)
msg.SetReceivedDateTime(&now) msg.SetReceivedDateTime(&now)
i := &details.ExchangeInfo{ i := &details.ExchangeInfo{
ItemType: details.ExchangeMail, ItemType: details.ExchangeMail,
Received: now, Recipient: []string{},
Created: initial, Received: now,
Modified: initial, Created: initial,
Modified: initial,
} }
return msg, i return msg, i
}, },
@ -101,25 +105,34 @@ func (suite *MailAPIUnitSuite) TestMailInfo() {
name: "All fields", name: "All fields",
msgAndRP: func() (models.Messageable, *details.ExchangeInfo) { msgAndRP: func() (models.Messageable, *details.ExchangeInfo) {
sender := "foo@bar.com" sender := "foo@bar.com"
receiver := "foofoo@bar.com"
subject := "Hello world" subject := "Hello world"
now := time.Now() now := time.Now()
sr := models.NewRecipient() sr := models.NewRecipient()
sea := models.NewEmailAddress() sea := models.NewEmailAddress()
recv := models.NewRecipient()
req := models.NewEmailAddress()
recvs := make([]models.Recipientable, 0)
msg := models.NewMessage() msg := models.NewMessage()
msg.SetCreatedDateTime(&initial) msg.SetCreatedDateTime(&initial)
msg.SetLastModifiedDateTime(&initial) msg.SetLastModifiedDateTime(&initial)
sea.SetAddress(&sender) sea.SetAddress(&sender)
sr.SetEmailAddress(sea) sr.SetEmailAddress(sea)
msg.SetSender(sr) msg.SetSender(sr)
req.SetAddress(&receiver)
recv.SetEmailAddress(req)
msg.SetSubject(&subject) msg.SetSubject(&subject)
msg.SetReceivedDateTime(&now) msg.SetReceivedDateTime(&now)
recvs = append(recvs, recv, sr)
msg.SetToRecipients(recvs)
i := &details.ExchangeInfo{ i := &details.ExchangeInfo{
ItemType: details.ExchangeMail, ItemType: details.ExchangeMail,
Sender: sender, Sender: sender,
Subject: subject, Subject: subject,
Received: now, Recipient: []string{receiver, sender},
Created: initial, Received: now,
Modified: initial, Created: initial,
Modified: initial,
} }
return msg, i return msg, i
}, },

View File

@ -0,0 +1,18 @@
package graph
// Contains helper methods that are common across multiple
// Microsoft Graph Applications.
import (
"github.com/alcionai/corso/src/internal/common/ptr"
"github.com/microsoftgraph/msgraph-sdk-go/models"
)
func UnwrapEmailAddress(contact models.Recipientable) string {
var empty string
if contact == nil || contact.GetEmailAddress() == nil {
return empty
}
return ptr.Val(contact.GetEmailAddress().GetAddress())
}

View File

@ -516,6 +516,7 @@ type ExchangeInfo struct {
ItemType ItemType `json:"itemType,omitempty"` ItemType ItemType `json:"itemType,omitempty"`
Sender string `json:"sender,omitempty"` Sender string `json:"sender,omitempty"`
Subject string `json:"subject,omitempty"` Subject string `json:"subject,omitempty"`
Recipient []string `json:"recipient,omitempty"`
ParentPath string `json:"parentPath,omitempty"` ParentPath string `json:"parentPath,omitempty"`
Received time.Time `json:"received,omitempty"` Received time.Time `json:"received,omitempty"`
EventStart time.Time `json:"eventStart,omitempty"` EventStart time.Time `json:"eventStart,omitempty"`

View File

@ -94,6 +94,7 @@ func (suite *DetailsUnitSuite) TestDetailsEntry_HeadersValues() {
ItemType: ExchangeMail, ItemType: ExchangeMail,
Sender: "sender", Sender: "sender",
ParentPath: "Parent", ParentPath: "Parent",
Recipient: []string{"receiver"},
Subject: "subject", Subject: "subject",
Received: now, Received: now,
}, },