MetaData: Pages Backup Info Support (#2084)

## Description
SharePointInfo extended to include SitePageable objects. 
**NOTE:** Merge includes the beta graph package and will affect the compile time. 
<!-- Insert PR description-->

## 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  #2069<issue>
* related #2071

## Test Plan

- [x]  Unit test
This commit is contained in:
Danny 2023-01-18 23:06:30 -05:00 committed by GitHub
parent 1db101ca17
commit 70ebaa6b0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 306 additions and 6 deletions

View File

@ -21,32 +21,32 @@ func TestSharePointInfoSuite(t *testing.T) {
func (suite *SharePointInfoSuite) TestSharePointInfo() {
tests := []struct {
name string
listAndRP func() (models.Listable, *details.SharePointInfo)
listAndDeets func() (models.Listable, *details.SharePointInfo)
}{
{
name: "Empty List",
listAndRP: func() (models.Listable, *details.SharePointInfo) {
listAndDeets: func() (models.Listable, *details.SharePointInfo) {
i := &details.SharePointInfo{ItemType: details.SharePointItem}
return models.NewList(), i
},
}, {
name: "Only Name",
listAndRP: func() (models.Listable, *details.SharePointInfo) {
listAndDeets: func() (models.Listable, *details.SharePointInfo) {
aTitle := "Whole List"
listing := models.NewList()
listing.SetDisplayName(&aTitle)
i := &details.SharePointInfo{
ItemType: details.SharePointItem,
ItemName: aTitle,
Size: 10,
}
return listing, i
},
},
}
for _, test := range tests {
suite.T().Run(test.name, func(t *testing.T) {
list, expected := test.listAndRP()
list, expected := test.listAndDeets()
info := sharePointListInfo(list, 10)
assert.Equal(t, expected.ItemType, info.ItemType)
assert.Equal(t, expected.ItemName, info.ItemName)

View File

@ -0,0 +1,42 @@
package sharepoint
import (
"time"
"github.com/alcionai/corso/src/pkg/backup/details"
)
// sharePointPageInfo propagates metadata from the SharePoint Page data type
// into searchable content.
// Page Details: https://learn.microsoft.com/en-us/graph/api/resources/sitepage?view=graph-rest-beta
func sharePointPageInfo(page SitePageable, size int64) *details.SharePointInfo {
var (
name, webURL string
created, modified time.Time
)
if page.GetTitle() != nil {
name = *page.GetTitle()
}
if page.GetWebUrl() != nil {
webURL = *page.GetWebUrl()
}
if page.GetCreatedDateTime() != nil {
created = *page.GetCreatedDateTime()
}
if page.GetLastModifiedDateTime() != nil {
modified = *page.GetLastModifiedDateTime()
}
return &details.SharePointInfo{
ItemType: details.SharePointItem,
ItemName: name,
Created: created,
Modified: modified,
WebURL: webURL,
Size: size,
}
}

View File

@ -0,0 +1,47 @@
package sharepoint
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/alcionai/corso/src/pkg/backup/details"
)
func (suite *SharePointInfoSuite) TestSharePointInfo_Pages() {
tests := []struct {
name string
pageAndDeets func() (SitePageable, *details.SharePointInfo)
}{
{
name: "Empty Page",
pageAndDeets: func() (SitePageable, *details.SharePointInfo) {
deets := &details.SharePointInfo{ItemType: details.SharePointItem}
return NewSitePage(), deets
},
},
{
name: "Only Name",
pageAndDeets: func() (SitePageable, *details.SharePointInfo) {
title := "Blank Page"
sPage := NewSitePage()
sPage.SetTitle(&title)
deets := &details.SharePointInfo{
ItemType: details.SharePointItem,
ItemName: title,
}
return sPage, deets
},
},
}
for _, test := range tests {
suite.T().Run(test.name, func(t *testing.T) {
paged, expected := test.pageAndDeets()
info := sharePointPageInfo(paged, 0)
assert.Equal(t, expected.ItemType, info.ItemType)
assert.Equal(t, expected.ItemName, info.ItemName)
assert.Equal(t, expected.WebURL, info.WebURL)
})
}
}

View File

@ -0,0 +1,187 @@
package sharepoint
import (
kioser "github.com/microsoft/kiota-abstractions-go/serialization"
"github.com/microsoftgraph/msgraph-sdk-go/models"
)
// SitePage provides operations to manage the minimal creation of a Site Page.
// Altered from original: github.com/microsoftgraph/msgraph-beta-sdk-go/models
// TODO: remove when Issue #2086 resolved
type SitePage struct {
models.BaseItem
// Indicates the layout of the content in a given SharePoint page, including horizontal sections and vertical section
// canvasLayout models.CanvasLayoutable
// Inherited from baseItem.
contentType models.ContentTypeInfoable
// The name of the page layout of the page.
// The possible values are: microsoftReserved, article, home, unknownFutureValue.
// pageLayout *models.PageLayoutType
// Indicates the promotion kind of the sitePage. The possible values are:
// microsoftReserved, page, newsPost, unknownFutureValue.
// promotionKind *models.PagePromotionType
// The publishing status and the MM.mm version of the page.
publishingState models.PublicationFacetable
// Reactions information for the page.
// reactions models.ReactionsFacetable
// Determines whether or not to show comments at the bottom of the page.
showComments *bool
// Determines whether or not to show recommended pages at the bottom of the page.
showRecommendedPages *bool
// Url of the sitePage's thumbnail image
//revive:disable:var-naming
thumbnailWebUrl *string
//revive:enable:var-naming
// Title of the sitePage.
title *string
}
// Title area on the SharePoint page.
// titleArea models.TitleAreaable
// Collection of webparts on the SharePoint page
// webParts []models.WebPartable
var _ SitePageable = &SitePage{}
// NewSitePage instantiates a new sitePage and sets the default values.
func NewSitePage() *SitePage {
m := &SitePage{
BaseItem: *models.NewBaseItem(),
}
odataTypeValue := "#microsoft.graph.sitePage"
m.SetOdataType(&odataTypeValue)
return m
}
// CreateSitePageFromDiscriminatorValue creates a new instance of the appropriate class based on discriminator value
func CreateSitePageFromDiscriminatorValue(parseNode kioser.ParseNode) (kioser.Parsable, error) {
return NewSitePage(), nil
}
// GetContentType gets the contentType property value. Inherited from baseItem.
func (m *SitePage) GetContentType() models.ContentTypeInfoable {
return m.contentType
}
// GetFieldDeserializers the deserialization information for the current model
// Altered from original.
func (m *SitePage) GetFieldDeserializers() map[string]func(kioser.ParseNode) error {
res := m.BaseItem.GetFieldDeserializers()
return res
}
// GetPublishingState gets the publishingState property value. The publishing status and the MM.mm version of the page.
func (m *SitePage) GetPublishingState() models.PublicationFacetable {
return m.publishingState
}
// GetShowComments gets the showComments property value.
// Determines whether or not to show comments at the bottom of the page.
func (m *SitePage) GetShowComments() *bool {
return m.showComments
}
// GetShowRecommendedPages gets the showRecommendedPages property value.
// Determines whether or not to show recommended pages at the bottom of the page.
func (m *SitePage) GetShowRecommendedPages() *bool {
return m.showRecommendedPages
}
// GetThumbnailWebUrl gets the thumbnailWebUrl property value. Url of the sitePage's thumbnail image
//
//revive:disable:var-naming
func (m *SitePage) GetThumbnailWebUrl() *string {
return m.thumbnailWebUrl
}
// GetTitle gets the title property value. Title of the sitePage.
func (m *SitePage) GetTitle() *string {
return m.title
}
// Serialize serializes information the current object
func (m *SitePage) Serialize(writer kioser.SerializationWriter) error {
err := m.BaseItem.Serialize(writer)
if err != nil {
return err
}
if m.GetContentType() != nil {
err = writer.WriteObjectValue("contentType", m.GetContentType())
if err != nil {
return err
}
}
if m.GetPublishingState() != nil {
err = writer.WriteObjectValue("publishingState", m.GetPublishingState())
if err != nil {
return err
}
}
{
err = writer.WriteBoolValue("showComments", m.GetShowComments())
if err != nil {
return err
}
}
{
err = writer.WriteBoolValue("showRecommendedPages", m.GetShowRecommendedPages())
if err != nil {
return err
}
}
{
err = writer.WriteStringValue("thumbnailWebUrl", m.GetThumbnailWebUrl())
if err != nil {
return err
}
}
{
err = writer.WriteStringValue("title", m.GetTitle())
if err != nil {
return err
}
}
return nil
}
// SetContentType sets the contentType property value. Inherited from baseItem.
func (m *SitePage) SetContentType(value models.ContentTypeInfoable) {
m.contentType = value
}
// SetPublishingState sets the publishingState property value. The publishing status and the MM.mm version of the page.
func (m *SitePage) SetPublishingState(value models.PublicationFacetable) {
m.publishingState = value
}
// SetShowComments sets the showComments property value.
// Determines whether or not to show comments at the bottom of the page.
func (m *SitePage) SetShowComments(value *bool) {
m.showComments = value
}
// SetShowRecommendedPages sets the showRecommendedPages property value.
// Determines whether or not to show recommended pages at the bottom of the page.
func (m *SitePage) SetShowRecommendedPages(value *bool) {
m.showRecommendedPages = value
}
// SetThumbnailWebUrl sets the thumbnailWebUrl property value.
// Url of the sitePage's thumbnail image
//
//revive:disable:var-naming
func (m *SitePage) SetThumbnailWebUrl(value *string) {
m.thumbnailWebUrl = value
}
//revive:enable:var-naming
// SetTitle sets the title property value. Title of the sitePage.
func (m *SitePage) SetTitle(value *string) {
m.title = value
}

View File

@ -0,0 +1,24 @@
package sharepoint
import (
"github.com/microsoft/kiota-abstractions-go/serialization"
"github.com/microsoftgraph/msgraph-sdk-go/models"
)
// SitePageable adjusted from msgraph-beta-sdk-go for temporary testing
type SitePageable interface {
models.BaseItemable
serialization.Parsable
GetContentType() models.ContentTypeInfoable
GetPublishingState() models.PublicationFacetable
GetShowComments() *bool
GetShowRecommendedPages() *bool
GetThumbnailWebUrl() *string
GetTitle() *string
SetContentType(value models.ContentTypeInfoable)
SetPublishingState(value models.PublicationFacetable)
SetShowComments(value *bool)
SetShowRecommendedPages(value *bool)
SetThumbnailWebUrl(value *string)
SetTitle(value *string)
}