Add FullPath() to DataCollection interface (#164)

* Add FullPath() to interface

* Simple test for FullPath
This commit is contained in:
ashmrtn 2022-06-08 13:24:57 -07:00 committed by GitHub
parent 5dcb2b7579
commit 042f3eaaee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 3 deletions

View File

@ -11,6 +11,11 @@ type DataCollection interface {
// Returns either the next item in the collection or an error if one occurred. // Returns either the next item in the collection or an error if one occurred.
// If not more items are available in the collection, returns (nil, nil). // If not more items are available in the collection, returns (nil, nil).
NextItem() (DataStream, error) NextItem() (DataStream, error)
// FullPath returns a slice of strings that act as metadata tags for this
// DataCollection. Returned items should be ordered from most generic to least
// generic. For example, a DataCollection for emails from a specific user
// would be {"<tenant id>", "<user ID>", "emails"}.
FullPath() []string
} }
// DataStream represents a single item within a DataCollection // DataStream represents a single item within a DataCollection
@ -32,9 +37,9 @@ type ExchangeDataCollection struct {
// TODO: We would want to replace this with a channel so that we // TODO: We would want to replace this with a channel so that we
// don't need to wait for all data to be retrieved before reading it out // don't need to wait for all data to be retrieved before reading it out
data []ExchangeData data []ExchangeData
// FullPath is the slice representation of the action context passed down through the hierarchy. // fullPath is the slice representation of the action context passed down through the hierarchy.
//The original request can be gleaned from the slice. (e.g. {<tenant ID>, <user ID>, "emails"}) //The original request can be gleaned from the slice. (e.g. {<tenant ID>, <user ID>, "emails"})
FullPath []string fullPath []string
} }
// NewExchangeDataCollection creates an ExchangeDataCollection where // NewExchangeDataCollection creates an ExchangeDataCollection where
@ -43,7 +48,7 @@ func NewExchangeDataCollection(aUser string, pathRepresentation []string) Exchan
collection := ExchangeDataCollection{ collection := ExchangeDataCollection{
user: aUser, user: aUser,
data: make([]ExchangeData, 0), data: make([]ExchangeData, 0),
FullPath: pathRepresentation, fullPath: pathRepresentation,
} }
return collection return collection
} }
@ -63,6 +68,10 @@ func (*ExchangeDataCollection) NextItem() (DataStream, error) {
return nil, nil return nil, nil
} }
func (ec *ExchangeDataCollection) FullPath() []string {
return append([]string{}, ec.fullPath...)
}
// ExchangeData represents a single item retrieved from exchange // ExchangeData represents a single item retrieved from exchange
type ExchangeData struct { type ExchangeData struct {
id string id string

View File

@ -25,3 +25,11 @@ func (suite *ExchangeDataCollectionSuite) TestExchangeDataReader() {
buf.ReadFrom(ed.ToReader()) buf.ReadFrom(ed.ToReader())
assert.Equal(suite.T(), buf.Bytes(), m) assert.Equal(suite.T(), buf.Bytes(), m)
} }
func (suite *ExchangeDataCollectionSuite) TestExchangeData_FullPath() {
user := "a-user"
fullPath := []string{"a-tenant", user, "emails"}
edc := NewExchangeDataCollection(user, fullPath)
assert.Equal(suite.T(), edc.FullPath(), fullPath)
}