Adds collision policy handling to onedrive item posts. This allows us to override the default "replace" behavior that currently returns a 409 for the creation endpoint, in case we want to use skip (ie: fail) or copy handling. --- #### Does this PR need a docs update or release note? - [x] ⛔ No #### Type of change - [x] 🌻 Feature #### Issue(s) * #3562 #### Test Plan - [x] 💪 Manual - [x] ⚡ Unit test - [x] 💚 E2E
133 lines
4.9 KiB
Go
133 lines
4.9 KiB
Go
package mock
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"io"
|
|
"time"
|
|
|
|
"github.com/alcionai/corso/src/internal/data"
|
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
|
)
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// data.Stream
|
|
// ---------------------------------------------------------------------------
|
|
|
|
var _ data.Stream = &Data{}
|
|
|
|
// TODO: move to data/mock for service-agnostic mocking
|
|
// Data represents a single item retrieved from, or restored to, onedrive
|
|
type Data struct {
|
|
ID string
|
|
Reader io.ReadCloser
|
|
ReadErr error
|
|
size int64
|
|
modifiedTime time.Time
|
|
deleted bool
|
|
}
|
|
|
|
func (d *Data) UUID() string { return d.ID }
|
|
func (d *Data) Deleted() bool { return d.deleted }
|
|
func (d *Data) Size() int64 { return d.size }
|
|
func (d *Data) ModTime() time.Time { return d.modifiedTime }
|
|
|
|
func (d *Data) ToReader() io.ReadCloser {
|
|
if d.ReadErr != nil {
|
|
return io.NopCloser(errReader{d.ReadErr})
|
|
}
|
|
|
|
return d.Reader
|
|
}
|
|
|
|
func (d *Data) Info() details.ItemInfo {
|
|
return details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ItemName: "test.txt",
|
|
Size: 1,
|
|
},
|
|
}
|
|
}
|
|
|
|
type errReader struct {
|
|
readErr error
|
|
}
|
|
|
|
func (er errReader) Read([]byte) (int, error) {
|
|
return 0, er.readErr
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// FetchItemByNamer
|
|
// ---------------------------------------------------------------------------
|
|
|
|
var _ data.FetchItemByNamer = &FetchItemByName{}
|
|
|
|
type FetchItemByName struct {
|
|
Item data.Stream
|
|
Err error
|
|
}
|
|
|
|
func (f FetchItemByName) FetchItemByName(context.Context, string) (data.Stream, error) {
|
|
return f.Item, f.Err
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// stub payload
|
|
// ---------------------------------------------------------------------------
|
|
|
|
func FileRespReadCloser(pl string) io.ReadCloser {
|
|
return io.NopCloser(bytes.NewReader([]byte(pl)))
|
|
}
|
|
|
|
const DriveFileMetaData = `{
|
|
"fileName": "fnords.txt"
|
|
}`
|
|
|
|
//nolint:lll
|
|
const DriveFilePayloadData = `{
|
|
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives('b%22-8wC6Jt04EWvKr1fQUDOyw5Gk8jIUJdEjzqonlSRf48i67LJdwopT4-6kiycJ5AV')/items/$entity",
|
|
"@microsoft.graph.downloadUrl": "https://test-my.sharepoint.com/personal/brunhilda_test_onmicrosoft_com/_layouts/15/download.aspx?UniqueId=deadbeef-1b6a-4d13-aae6-bf5f9b07d424&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvMTBycWMyLW15LnNoYXJlcG9pbnQuY29tQGZiOGFmYmFhLWU5NGMtNGVhNS04YThhLTI0YWZmMDRkNzg3NCIsImlzcyI6IjAwMDAwMDAzLTAwMDAtMGZmMS1jZTAwLTAwMDAwMDAwMDAwMCIsIm5iZiI6IjE2ODUxMjk1MzIiLCJleHAiOiIxNjg1MTMzMTMyIiwiZW5kcG9pbnR1cmwiOiJkTStxblBIQitkNDMzS0ErTHVTUVZMRi9IaVliSkI2eHJWN0tuYk45aXQ0PSIsImVuZHBvaW50dXJsTGVuZ3RoIjoiMTYxIiwiaXNsb29wYmFjayI6IlRydWUiLCJjaWQiOiJOVFl4TXpNMFkyWXRZVFk0TVMwMFpXUmxMVGt5TjJZdFlXVmpNVGMwTldWbU16TXgiLCJ2ZXIiOiJoYXNoZWRwcm9vZnRva2VuIiwic2l0ZWlkIjoiWlRnd01tTmpabUl0TnpRNVlpMDBOV1V3TFdGbU1tRXRZbVExWmpReE5EQmpaV05pIiwiYXBwX2Rpc3BsYXluYW1lIjoiS2VlcGVyc19Mb2NhbCIsIm5hbWVpZCI6ImFkYjk3MTQ2LTcxYTctNDkxYS05YWMwLWUzOGFkNzdkZWViNkBmYjhhZmJhYS1lOTRjLTRlYTUtOGE4YS0yNGFmZjA0ZDc4NzQiLCJyb2xlcyI6ImFsbHNpdGVzLndyaXRlIGFsbHNpdGVzLm1hbmFnZSBhbGxmaWxlcy53cml0ZSBhbGxzaXRlcy5mdWxsY29udHJvbCBhbGxwcm9maWxlcy5yZWFkIiwidHQiOiIxIiwidXNlUGVyc2lzdGVudENvb2tpZSI6bnVsbCwiaXBhZGRyIjoiMjA1MTkwLjE1Ny4zMCJ9.lN7Vpfzk1abEyE0M3gyRyZXEaGQ3JMXCyaXUBNbD5Vo&ApiVersion=2.0",
|
|
"createdDateTime": "2023-04-25T21:32:58Z",
|
|
"eTag": "\"{DEADBEEF-1B6A-4D13-AAE6-BF5F9B07D424},1\"",
|
|
"id": "017W47IH3FQVEFI23QCNG2VZV7L6NQPVBE",
|
|
"lastModifiedDateTime": "2023-04-25T21:32:58Z",
|
|
"name": "huehuehue.GIF",
|
|
"webUrl": "https://test-my.sharepoint.com/personal/brunhilda_test_onmicrosoft_com/Documents/test/huehuehue.GIF",
|
|
"cTag": "\"c:{DEADBEEF-1B6A-4D13-AAE6-BF5F9B07D424},1\"",
|
|
"size": 88843,
|
|
"createdBy": {
|
|
"user": {
|
|
"email": "brunhilda@test.onmicrosoft.com",
|
|
"id": "DEADBEEF-4c80-4da4-86ef-a08d8d6f0f94",
|
|
"displayName": "BrunHilda"
|
|
}
|
|
},
|
|
"lastModifiedBy": {
|
|
"user": {
|
|
"email": "brunhilda@10rqc2.onmicrosoft.com",
|
|
"id": "DEADBEEF-4c80-4da4-86ef-a08d8d6f0f94",
|
|
"displayName": "BrunHilda"
|
|
}
|
|
},
|
|
"parentReference": {
|
|
"driveType": "business",
|
|
"driveId": "b!-8wC6Jt04EWvKr1fQUDOyw5Gk8jIUJdEjzqonlSRf48i67LJdwopT4-6kiycJ5VA",
|
|
"id": "017W47IH6DRQF2GS2N6NGWLZRS7RUJ2DIP",
|
|
"path": "/drives/b!-8wC6Jt04EWvKr1fQUDOyw5Gk8jIUJdEjzqonlSRf48i67LJdwopT4-6kiycJ5VA/root:/test",
|
|
"siteId": "DEADBEEF-749b-45e0-af2a-bd5f4140cecb"
|
|
},
|
|
"file": {
|
|
"mimeType": "image/gif",
|
|
"hashes": {
|
|
"quickXorHash": "sU5rmXOvVFn6zJHpCPro9cYaK+Q="
|
|
}
|
|
},
|
|
"fileSystemInfo": {
|
|
"createdDateTime": "2023-04-25T21:32:58Z",
|
|
"lastModifiedDateTime": "2023-04-25T21:32:58Z"
|
|
},
|
|
"image": {}
|
|
}`
|