Skip to content
This repository has been archived by the owner on Oct 11, 2024. It is now read-only.

MetaData: Pages Backup Info Support #2084

Merged
merged 7 commits into from
Jan 19, 2023
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/internal/connector/sharepoint/listInfo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,33 +20,33 @@ func TestSharePointInfoSuite(t *testing.T) {

func (suite *SharePointInfoSuite) TestSharePointInfo() {
tests := []struct {
name string
listAndRP func() (models.Listable, *details.SharePointInfo)
name string
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)
Expand Down
42 changes: 42 additions & 0 deletions src/internal/connector/sharepoint/pageInfo.go
Original file line number Diff line number Diff line change
@@ -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,
}
}
47 changes: 47 additions & 0 deletions src/internal/connector/sharepoint/pageInfo_test.go
Original file line number Diff line number Diff line change
@@ -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)
})
}
}
187 changes: 187 additions & 0 deletions src/internal/connector/sharepoint/site_page.go
Original file line number Diff line number Diff line change
@@ -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
}
24 changes: 24 additions & 0 deletions src/internal/connector/sharepoint/site_pageable.go
Original file line number Diff line number Diff line change
@@ -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)
}