diff --git a/src/sdk/PnP.Core.Test/SharePoint/FoldersTests.cs b/src/sdk/PnP.Core.Test/SharePoint/FoldersTests.cs index 43c709e3c1..723aff139a 100644 --- a/src/sdk/PnP.Core.Test/SharePoint/FoldersTests.cs +++ b/src/sdk/PnP.Core.Test/SharePoint/FoldersTests.cs @@ -248,7 +248,7 @@ public async Task GetListSubFoldersTest() IFolder parentFolder = (await context.Web.Lists.GetByTitleAsync("Documents", p => p.RootFolder)).RootFolder; IFolder mockFolder = await parentFolder.Folders.AddAsync("TEST"); - List folders = await PnP.Core.QueryModel.QueryableExtensions.ToListAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders).ConfigureAwait(false); + List folders = await PnP.Core.QueryModel.QueryableExtensions.ToListAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders).ConfigureAwait(false); Assert.AreNotEqual(0, folders.Count); @@ -606,7 +606,7 @@ public async Task EnsureListFolderInExistingHiarchyTest() Assert.IsTrue(folderToDelete.Name == "sub1"); Assert.IsFalse(folderToDelete.IsPropertyAvailable(p => p.StorageMetrics)); - var folderToLoadWithExpression = await parentFolder.EnsureFolderAsync("sub1/sub2", p => p.Name, p => p.StorageMetrics); + var folderToLoadWithExpression = await parentFolder.EnsureFolderAsync("sub1/sub2", p => p.Name, p => p.StorageMetrics); Assert.IsTrue(folderToLoadWithExpression != null); Assert.IsTrue(folderToLoadWithExpression.Name == "sub2"); Assert.IsTrue(folderToLoadWithExpression.IsPropertyAvailable(p => p.StorageMetrics)); @@ -614,6 +614,62 @@ public async Task EnsureListFolderInExistingHiarchyTest() await folderToDelete.DeleteAsync(); } } + + [TestMethod] + public async Task EnsureListFolderIdempotentTest() + { + //TestCommon.Instance.Mocking = false; + using (var context = await TestCommon.Instance.GetContextAsync(TestCommon.TestSite)) + { + IFolder parentFolder = (await context.Web.Lists.GetByTitleAsync("Site Pages", p => p.RootFolder)).RootFolder; + + var addedFolder = await parentFolder.EnsureFolderAsync("sub1/sub2"); + Assert.IsNotNull(addedFolder); + Assert.IsTrue(addedFolder.Name == "sub2"); + + // Calling EnsureFolderAsync again for the same path must succeed and return the same folder + var ensuredFolder = await parentFolder.EnsureFolderAsync("sub1/sub2"); + Assert.IsNotNull(ensuredFolder); + Assert.IsTrue(ensuredFolder.Name == "sub2"); + Assert.AreEqual(addedFolder.UniqueId, ensuredFolder.UniqueId); + + var folderToDelete = await parentFolder.EnsureFolderAsync("sub1"); + await folderToDelete.DeleteAsync(); + } + } + + [TestMethod] + public async Task EnsureListFolderConcurrentTest() + { + // This test exercises the race condition handling in EnsureFolderAsync: + // multiple concurrent calls targeting the same folder path must all succeed + // even when one of them loses the create race and gets an "already exists" error. + + //TestCommon.Instance.Mocking = false; + using (var context = await TestCommon.Instance.GetContextAsync(TestCommon.TestSite)) + { + IFolder parentFolder = (await context.Web.Lists.GetByTitleAsync("Site Pages", p => p.RootFolder)).RootFolder; + + try + { + var tasks = Enumerable.Range(0, 5) + .Select(_ => parentFolder.EnsureFolderAsync("sub1/sub2/sub3")) + .ToArray(); + + var results = await Task.WhenAll(tasks); + + Assert.IsTrue(results.All(r => r != null)); + Assert.IsTrue(results.All(r => r.Name == "sub3")); + Assert.AreEqual(1, results.Select(r => r.UniqueId).Distinct().Count()); + } + finally + { + var folderToDelete = await parentFolder.EnsureFolderAsync("sub1"); + await folderToDelete.DeleteAsync(); + } + } + } + #endregion [TestMethod] @@ -684,7 +740,7 @@ public async Task DeleteFolderTest() // Test if the folder is still found IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, - ct => ct.Name == "TO DELETE FOLDER").ConfigureAwait(false); + ct => ct.Name == "TO DELETE FOLDER").ConfigureAwait(false); Assert.IsNull(folderToFind); } @@ -1118,7 +1174,7 @@ public async Task RecycleFolderTest() Assert.AreNotEqual(Guid.Empty, recycleBinId); // Test if the folder is still found - IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); + IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); Assert.IsNull(folderToFind); @@ -1145,7 +1201,7 @@ public async Task RecycleFolderCurrentBatchAsyncTest() Assert.AreNotEqual(Guid.Empty, batchRecycle.Result.Value); // Test if the folder is still found - IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); + IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); Assert.IsNull(folderToFind); @@ -1170,7 +1226,7 @@ public async Task RecycleFolderCurrentBatchTest() await context.ExecuteAsync(); // Test if the folder is still found - IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); + IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); Assert.IsNull(folderToFind); @@ -1194,7 +1250,7 @@ public async Task RecycleFolderBatchAsyncTest() await context.ExecuteAsync(batch); // Test if the folder is still found - IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); + IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); Assert.IsNull(folderToFind); @@ -1218,7 +1274,7 @@ public async Task RecycleFolderBatchTest() await context.ExecuteAsync(batch); // Test if the folder is still found - IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); + IFolder folderToFind = await QueryableExtensions.FirstOrDefaultAsync(context.Web.Lists.GetByTitle("Documents", p => p.RootFolder).RootFolder.Folders, ct => ct.Name == "TO RECYCLE FOLDER").ConfigureAwait(false); Assert.IsNull(folderToFind); @@ -1238,7 +1294,7 @@ public async Task RecycleNestedFolderTest() var addedFolder = await parentFolder.EnsureFolderAsync("sub1/sub2"); Assert.IsNotNull(addedFolder); Assert.AreEqual("sub2", addedFolder.Name); - + IFolder folder1ToDelete = await context.Web.GetFolderByServerRelativeUrlAsync(addedFolder.ServerRelativeUrl); Guid recycleBin1Id = folder1ToDelete.Recycle(); Assert.AreNotEqual(Guid.Empty, recycleBin1Id); @@ -1252,13 +1308,13 @@ public async Task RecycleNestedFolderTest() var error = e.Error as SharePointRestError; Assert.AreEqual(404, error.HttpResponseCode); } - + await CleanupMockFolderFromRecycleBin(context, recycleBin1Id); - + var folderToDelete = await parentFolder.EnsureFolderAsync("sub1"); Assert.IsNotNull(folderToDelete); Assert.AreEqual("sub1", folderToDelete.Name); - + IFolder folder2ToDelete = await context.Web.GetFolderByServerRelativeUrlAsync(folderToDelete.ServerRelativeUrl); Guid recycleBin2Id = folder2ToDelete.Recycle(); Assert.AreNotEqual(Guid.Empty, recycleBin2Id); @@ -1272,11 +1328,11 @@ public async Task RecycleNestedFolderTest() var error = e.Error as SharePointRestError; Assert.AreEqual(404, error.HttpResponseCode); } - + await CleanupMockFolderFromRecycleBin(context, recycleBin2Id); } } - + #endregion [TestMethod] diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00000.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00000.response.json new file mode 100644 index 0000000000..3a9a8edbdd --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00000.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-c086-1001-8fd7-e004c3439b6a","SPClientServiceRequestDuration":"12","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022RegionalSettings\u0022:{\u0022TimeZone\u0022:{\u0022Description\u0022:\u0022(UTC-08:00) Pacific Time (US and Canada)\u0022,\u0022Id\u0022:13,\u0022Information\u0022:{\u0022Bias\u0022:480,\u0022DaylightBias\u0022:-60,\u0022StandardBias\u0022:0}},\u0022AdjustHijriDays\u0022:0,\u0022AlternateCalendarType\u0022:0,\u0022AM\u0022:\u0022AM\u0022,\u0022CalendarType\u0022:1,\u0022Collation\u0022:25,\u0022CollationLCID\u0022:2070,\u0022DateFormat\u0022:0,\u0022DateSeparator\u0022:\u0022/\u0022,\u0022DecimalSeparator\u0022:\u0022.\u0022,\u0022DigitGrouping\u0022:\u00223;0\u0022,\u0022FirstDayOfWeek\u0022:0,\u0022FirstWeekOfYear\u0022:0,\u0022IsEastAsia\u0022:false,\u0022IsRightToLeft\u0022:false,\u0022IsUIRightToLeft\u0022:false,\u0022ListSeparator\u0022:\u0022,\u0022,\u0022LocaleId\u0022:1033,\u0022NegativeSign\u0022:\u0022-\u0022,\u0022NegNumberMode\u0022:1,\u0022PM\u0022:\u0022PM\u0022,\u0022PositiveSign\u0022:\u0022\u0022,\u0022ShowWeeks\u0022:false,\u0022ThousandSeparator\u0022:\u0022,\u0022,\u0022Time24\u0022:false,\u0022TimeMarkerPosition\u0022:0,\u0022TimeSeparator\u0022:\u0022:\u0022,\u0022WorkDayEndHour\u0022:1020,\u0022WorkDays\u0022:62,\u0022WorkDayStartHour\u0022:480},\u0022Id\u0022:\u00226f2d6824-5143-4222-89cb-1ee645a69f51\u0022,\u0022Url\u0022:\u0022https://3fgb00.sharepoint.com/sites/pnpcoresdktestgroup\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00001.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00001.response.json new file mode 100644 index 0000000000..8fb00ea064 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00001.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-8093-1001-8fd7-e209b4f2a4f4","SPClientServiceRequestDuration":"21","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022GroupId\u0022:\u0022c1a99f87-f498-4ea8-9b44-2c1da34fcaa8\u0022,\u0022Id\u0022:\u0022477b4438-a3a4-4f63-8d6a-c797c26a357d\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00002.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00002.response.json new file mode 100644 index 0000000000..e5803fda8b --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00002.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-109d-1001-8fd7-e37aa509bd34","SPClientServiceRequestDuration":"23","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022RootFolder\u0022:{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022SitePages\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages\u0022,\u0022TimeCreated\u0022:\u00222026-05-22T21:21:41Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022UniqueId\u0022:\u0022fc5a6803-a30f-4fa1-b99e-71d7fc40cc02\u0022,\u0022WelcomePage\u0022:\u0022\u0022},\u0022Id\u0022:\u0022f7eed5a4-0bbe-4b10-a0d8-5be1398b2fd3\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00003.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00003.response.json new file mode 100644 index 0000000000..f690ceb01a --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00003.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":404,"Headers":{"SPRequestGuid":"9b3a1aa2-e0a3-1001-8fd7-e26ad021f41e","SPClientServiceRequestDuration":"36","X-SharePointHealthScore":"2","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2147024894, System.IO.FileNotFoundException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022File Not Found.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00004.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00004.response.json new file mode 100644 index 0000000000..49002048fd --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00004.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":404,"Headers":{"SPRequestGuid":"9b3a1aa2-e0a5-1001-4178-067af1d35777","SPClientServiceRequestDuration":"47","X-SharePointHealthScore":"2","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2147024894, System.IO.FileNotFoundException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022File Not Found.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00005.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00005.response.json new file mode 100644 index 0000000000..254572a5e1 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00005.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":404,"Headers":{"SPRequestGuid":"9b3a1aa2-00a8-1001-8fd7-e19953be78bd","SPClientServiceRequestDuration":"37","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2147024894, System.IO.FileNotFoundException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022File Not Found.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00006.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00006.response.json new file mode 100644 index 0000000000..b386a1db80 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00006.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":404,"Headers":{"SPRequestGuid":"9b3a1aa2-60a7-1001-8fd7-e38f19f766c7","SPClientServiceRequestDuration":"37","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2147024894, System.IO.FileNotFoundException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022File Not Found.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00007.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00007.response.json new file mode 100644 index 0000000000..eb27dd36a2 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00007.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":404,"Headers":{"SPRequestGuid":"9b3a1aa2-60a6-1001-8fd7-e3e63924a400","SPClientServiceRequestDuration":"92","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2147024894, System.IO.FileNotFoundException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022File Not Found.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00008.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00008.response.json new file mode 100644 index 0000000000..60358f2fcd --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00008.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-b0ab-1001-8fd7-eb35e5828039","SPClientServiceRequestDuration":"78","X-SharePointHealthScore":"2","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub1\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:41Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:41Z\u0022,\u0022UniqueId\u0022:\u0022d0d8eac9-d912-41fa-991f-cd9f2b3cecae\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00009.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00009.response.json new file mode 100644 index 0000000000..d5ce6e79c7 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00009.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-40ae-1001-8fd7-e81d402d29e6","SPClientServiceRequestDuration":"56","X-SharePointHealthScore":"2","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00010.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00010.response.json new file mode 100644 index 0000000000..d1fac548ab --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00010.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-20af-1001-733e-2a20ac2b803c","SPClientServiceRequestDuration":"62","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00011.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00011.response.json new file mode 100644 index 0000000000..a2e90d1e06 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00011.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-80b0-1001-8fd7-ef8a9d43d3a6","SPClientServiceRequestDuration":"91","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00012.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00012.response.json new file mode 100644 index 0000000000..d08abff6f9 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00012.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-a0b3-1001-8fd7-e4dc982c4d0c","SPClientServiceRequestDuration":"81","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00013.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00013.response.json new file mode 100644 index 0000000000..86d57b705d --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00013.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-00b5-1001-8fd7-eda36fd2b8de","SPClientServiceRequestDuration":"98","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub2\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u002290685d4a-d898-4b9e-9300-1ab0bc69f852\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00014.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00014.response.json new file mode 100644 index 0000000000..3ef7d33fa2 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00014.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-80b8-1001-8fd7-ee22e19aa9e9","SPClientServiceRequestDuration":"18","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub1\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:41Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u0022d0d8eac9-d912-41fa-991f-cd9f2b3cecae\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00015.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00015.response.json new file mode 100644 index 0000000000..bf6aa3c5f6 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00015.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-20b9-1001-8fd7-e4518dd7deea","SPClientServiceRequestDuration":"19","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub1\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:41Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u0022d0d8eac9-d912-41fa-991f-cd9f2b3cecae\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00016.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00016.response.json new file mode 100644 index 0000000000..9927b134bb --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00016.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-30be-1001-8fd7-e6de6342b01f","SPClientServiceRequestDuration":"21","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub1\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:41Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u0022d0d8eac9-d912-41fa-991f-cd9f2b3cecae\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00017.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00017.response.json new file mode 100644 index 0000000000..3c8dc21518 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00017.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-50bd-1001-8fd7-e0ec36af2aec","SPClientServiceRequestDuration":"20","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub1\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:41Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u0022d0d8eac9-d912-41fa-991f-cd9f2b3cecae\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00018.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00018.response.json new file mode 100644 index 0000000000..f0c2008fac --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00018.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-d0bf-1001-4178-0a06b28f1334","SPClientServiceRequestDuration":"153","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub3\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2/sub3\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u00226f19918c-1912-48c5-bb57-378b8e998c36\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00019.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00019.response.json new file mode 100644 index 0000000000..409882579e --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00019.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-20c0-1001-8fd7-e50fd74e3db1","SPClientServiceRequestDuration":"38","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1/sub2 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00020.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00020.response.json new file mode 100644 index 0000000000..4e1754c655 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00020.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-60c0-1001-8fd7-e2031a6ed015","SPClientServiceRequestDuration":"39","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1/sub2 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00021.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00021.response.json new file mode 100644 index 0000000000..5f683dec9e --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00021.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-d0c2-1001-8fd7-e0caa4992eb6","SPClientServiceRequestDuration":"55","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1/sub2 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00022.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00022.response.json new file mode 100644 index 0000000000..7a7c078b88 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00022.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-80c4-1001-8fd7-eefba435d3c6","SPClientServiceRequestDuration":"39","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1/sub2 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00023.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00023.response.json new file mode 100644 index 0000000000..c84c76f65e --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00023.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-70c8-1001-8fd7-edb0207252f7","SPClientServiceRequestDuration":"22","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub2\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u002290685d4a-d898-4b9e-9300-1ab0bc69f852\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00024.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00024.response.json new file mode 100644 index 0000000000..744f92265e --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00024.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-60c8-1001-733e-2d628a65e0d8","SPClientServiceRequestDuration":"24","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub2\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u002290685d4a-d898-4b9e-9300-1ab0bc69f852\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00025.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00025.response.json new file mode 100644 index 0000000000..e80211bdcc --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00025.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-c0ca-1001-8fd7-e1bcf3e1aa87","SPClientServiceRequestDuration":"24","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub2\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u002290685d4a-d898-4b9e-9300-1ab0bc69f852\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00026.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00026.response.json new file mode 100644 index 0000000000..63f448a418 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00026.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-60cb-1001-8fd7-ec7dc922dd46","SPClientServiceRequestDuration":"21","X-SharePointHealthScore":"2","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub2\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u002290685d4a-d898-4b9e-9300-1ab0bc69f852\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00027.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00027.response.json new file mode 100644 index 0000000000..8af2cbd973 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00027.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-20ce-1001-8fd7-ed357bc50ed4","SPClientServiceRequestDuration":"56","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1/sub2/sub3 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00028.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00028.response.json new file mode 100644 index 0000000000..f17578a964 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00028.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-c0ce-1001-8fd7-efd66ff06636","SPClientServiceRequestDuration":"39","X-SharePointHealthScore":"2","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1/sub2/sub3 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00029.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00029.response.json new file mode 100644 index 0000000000..f8b68c5387 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00029.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-c0d0-1001-8fd7-ea8cd5952038","SPClientServiceRequestDuration":"44","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1/sub2/sub3 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00030.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00030.response.json new file mode 100644 index 0000000000..8205474856 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00030.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":400,"Headers":{"SPRequestGuid":"9b3a1aa2-50d1-1001-8fd7-e49910e6e3f6","SPClientServiceRequestDuration":"42","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2130575257, Microsoft.SharePoint.SPException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022A file or folder with the name sites/pnpcoresdktestgroup/SitePages/sub1/sub2/sub3 already exists.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00031.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00031.response.json new file mode 100644 index 0000000000..c4d9e2d93a --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00031.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-a0d5-1001-8fd7-ee77a8cbc113","SPClientServiceRequestDuration":"22","X-SharePointHealthScore":"2","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub3\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2/sub3\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u00226f19918c-1912-48c5-bb57-378b8e998c36\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00032.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00032.response.json new file mode 100644 index 0000000000..e7b9965423 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00032.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-30d7-1001-8fd7-e6c6926e812e","SPClientServiceRequestDuration":"23","X-SharePointHealthScore":"2","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub3\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2/sub3\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u00226f19918c-1912-48c5-bb57-378b8e998c36\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00033.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00033.response.json new file mode 100644 index 0000000000..0ee4ebfe82 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00033.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-20d8-1001-8fd7-efedc0a3a314","SPClientServiceRequestDuration":"19","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub3\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2/sub3\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u00226f19918c-1912-48c5-bb57-378b8e998c36\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00034.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00034.response.json new file mode 100644 index 0000000000..ccae183e25 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00034.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-50d8-1001-8fd7-e94672d020f2","SPClientServiceRequestDuration":"28","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub3\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2/sub3\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u00226f19918c-1912-48c5-bb57-378b8e998c36\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00035.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00035.response.json new file mode 100644 index 0000000000..0008234557 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00035.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-e0de-1001-8fd7-e7c3019777c8","SPClientServiceRequestDuration":"21","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub1\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:15:41Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:15:42Z\u0022,\u0022UniqueId\u0022:\u0022d0d8eac9-d912-41fa-991f-cd9f2b3cecae\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00036.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00036.response.json new file mode 100644 index 0000000000..b63ea660b7 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderConcurrentTest-0-00036.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"9b3a1aa2-20e5-1001-8fd7-e4560f98ce94","SPClientServiceRequestDuration":"125","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":""} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00000.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00000.response.json new file mode 100644 index 0000000000..d99ade5c05 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00000.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"893a1aa2-80eb-1001-733e-289c0f114185","SPClientServiceRequestDuration":"168","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022RegionalSettings\u0022:{\u0022TimeZone\u0022:{\u0022Description\u0022:\u0022(UTC-08:00) Pacific Time (US and Canada)\u0022,\u0022Id\u0022:13,\u0022Information\u0022:{\u0022Bias\u0022:480,\u0022DaylightBias\u0022:-60,\u0022StandardBias\u0022:0}},\u0022AdjustHijriDays\u0022:0,\u0022AlternateCalendarType\u0022:0,\u0022AM\u0022:\u0022AM\u0022,\u0022CalendarType\u0022:1,\u0022Collation\u0022:25,\u0022CollationLCID\u0022:2070,\u0022DateFormat\u0022:0,\u0022DateSeparator\u0022:\u0022/\u0022,\u0022DecimalSeparator\u0022:\u0022.\u0022,\u0022DigitGrouping\u0022:\u00223;0\u0022,\u0022FirstDayOfWeek\u0022:0,\u0022FirstWeekOfYear\u0022:0,\u0022IsEastAsia\u0022:false,\u0022IsRightToLeft\u0022:false,\u0022IsUIRightToLeft\u0022:false,\u0022ListSeparator\u0022:\u0022,\u0022,\u0022LocaleId\u0022:1033,\u0022NegativeSign\u0022:\u0022-\u0022,\u0022NegNumberMode\u0022:1,\u0022PM\u0022:\u0022PM\u0022,\u0022PositiveSign\u0022:\u0022\u0022,\u0022ShowWeeks\u0022:false,\u0022ThousandSeparator\u0022:\u0022,\u0022,\u0022Time24\u0022:false,\u0022TimeMarkerPosition\u0022:0,\u0022TimeSeparator\u0022:\u0022:\u0022,\u0022WorkDayEndHour\u0022:1020,\u0022WorkDays\u0022:62,\u0022WorkDayStartHour\u0022:480},\u0022Id\u0022:\u00226f2d6824-5143-4222-89cb-1ee645a69f51\u0022,\u0022Url\u0022:\u0022https://3fgb00.sharepoint.com/sites/pnpcoresdktestgroup\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00001.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00001.response.json new file mode 100644 index 0000000000..d61cb3cbd2 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00001.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"8a3a1aa2-d004-1001-8fd7-e2e59abce5af","SPClientServiceRequestDuration":"13","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022GroupId\u0022:\u0022c1a99f87-f498-4ea8-9b44-2c1da34fcaa8\u0022,\u0022Id\u0022:\u0022477b4438-a3a4-4f63-8d6a-c797c26a357d\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00002.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00002.response.json new file mode 100644 index 0000000000..ba6a09b10d --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00002.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"8a3a1aa2-600d-1001-8fd7-e064c2315d9a","SPClientServiceRequestDuration":"25","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022RootFolder\u0022:{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022SitePages\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages\u0022,\u0022TimeCreated\u0022:\u00222026-05-22T21:21:41Z\u0022,\u0022TimeLastModified\u0022:\u00222026-05-27T09:10:26Z\u0022,\u0022UniqueId\u0022:\u0022fc5a6803-a30f-4fa1-b99e-71d7fc40cc02\u0022,\u0022WelcomePage\u0022:\u0022\u0022},\u0022Id\u0022:\u0022f7eed5a4-0bbe-4b10-a0d8-5be1398b2fd3\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00003.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00003.response.json new file mode 100644 index 0000000000..2b708c4d00 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00003.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":false,"StatusCode":404,"Headers":{"SPRequestGuid":"8a3a1aa2-9016-1001-8fd7-ee223b73ceca","SPClientServiceRequestDuration":"44","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022odata.error\u0022:{\u0022code\u0022:\u0022-2147024894, System.IO.FileNotFoundException\u0022,\u0022message\u0022:{\u0022lang\u0022:\u0022en-US\u0022,\u0022value\u0022:\u0022File Not Found.\u0022}}}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00004.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00004.response.json new file mode 100644 index 0000000000..ad26b99a88 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00004.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"8a3a1aa2-c020-1001-8fd7-ecd3cd550b09","SPClientServiceRequestDuration":"153","X-SharePointHealthScore":"0","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub1\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022UniqueId\u0022:\u0022aebb28b9-ebaf-4567-b0f7-7d8b7bd6943c\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00005.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00005.response.json new file mode 100644 index 0000000000..def1575eb8 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00005.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"8a3a1aa2-a030-1001-8fd7-e9f5255f62e0","SPClientServiceRequestDuration":"73","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub2\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022UniqueId\u0022:\u0022a4e77ce8-ceb9-41c3-99e7-5c8888895c75\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00006.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00006.response.json new file mode 100644 index 0000000000..0099390c8f --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00006.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"8a3a1aa2-603c-1001-8fd7-ec5180fb6b22","SPClientServiceRequestDuration":"17","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub1\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022UniqueId\u0022:\u0022aebb28b9-ebaf-4567-b0f7-7d8b7bd6943c\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00007.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00007.response.json new file mode 100644 index 0000000000..6b2ed486e3 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00007.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"8a3a1aa2-7044-1001-8fd7-e7ed901f8832","SPClientServiceRequestDuration":"23","X-SharePointHealthScore":"1","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:0,\u0022Name\u0022:\u0022sub2\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1/sub2\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022UniqueId\u0022:\u0022a4e77ce8-ceb9-41c3-99e7-5c8888895c75\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00008.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00008.response.json new file mode 100644 index 0000000000..db75582bb2 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00008.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"8a3a1aa2-b04c-1001-8fd7-e94e869d4df2","SPClientServiceRequestDuration":"20","X-SharePointHealthScore":"2","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":"{\u0022Exists\u0022:true,\u0022ExistsAllowThrowForPolicyFailures\u0022:true,\u0022ExistsWithException\u0022:true,\u0022IsWOPIEnabled\u0022:false,\u0022ItemCount\u0022:1,\u0022Name\u0022:\u0022sub1\u0022,\u0022ProgID\u0022:null,\u0022ServerRelativeUrl\u0022:\u0022/sites/pnpcoresdktestgroup/SitePages/sub1\u0022,\u0022TimeCreated\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022TimeLastModified\u0022:\u00222026-06-04T07:14:30Z\u0022,\u0022UniqueId\u0022:\u0022aebb28b9-ebaf-4567-b0f7-7d8b7bd6943c\u0022,\u0022WelcomePage\u0022:\u0022\u0022}"} \ No newline at end of file diff --git a/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00009.response.json b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00009.response.json new file mode 100644 index 0000000000..8e0d591409 --- /dev/null +++ b/src/sdk/PnP.Core.Test/SharePoint/MockData/FoldersTests/EnsureListFolderIdempotentTest-0-00009.response.json @@ -0,0 +1 @@ +{"IsSuccessStatusCode":true,"StatusCode":200,"Headers":{"SPRequestGuid":"8a3a1aa2-4054-1001-733e-2d54d8d4a0cc","SPClientServiceRequestDuration":"121","X-SharePointHealthScore":"3","X-SP-SERVERSTATE":"ReadOnly=0"},"Response":""} \ No newline at end of file diff --git a/src/sdk/PnP.Core/Model/SharePoint/Core/Internal/Folder.cs b/src/sdk/PnP.Core/Model/SharePoint/Core/Internal/Folder.cs index 84088c5cec..1e412844c0 100644 --- a/src/sdk/PnP.Core/Model/SharePoint/Core/Internal/Folder.cs +++ b/src/sdk/PnP.Core/Model/SharePoint/Core/Internal/Folder.cs @@ -410,13 +410,13 @@ public async Task EnsureFolderAsync(string folderRelativeUrl, params Ex } catch (SharePointRestServiceException) { - currentFolder = await currentFolder.AddFolderAsync(folderName).ConfigureAwait(false); + currentFolder = await AddFolderHandleRaceAsync(currentFolder, folderName, currentUrl, expressions).ConfigureAwait(false); currentFolderWasCreated = true; } } else { - currentFolder = await currentFolder.AddFolderAsync(folderName).ConfigureAwait(false); + currentFolder = await AddFolderHandleRaceAsync(currentFolder, folderName, currentUrl, expressions).ConfigureAwait(false); } } @@ -427,6 +427,32 @@ public IFolder EnsureFolder(string folderRelativeUrl, params Expression AddFolderHandleRaceAsync( + IFolder parentFolder, + string folderName, + string folderServerRelativeUrl, + Expression>[] expressions) + { + try + { + return await parentFolder.AddFolderAsync(folderName).ConfigureAwait(false); + } + catch (SharePointRestServiceException ex) when (ex.Error is SharePointRestError error && ErrorIndicatesFolderAlreadyExists(error)) + { + // Race condition: another concurrent call created the folder between our GET (404) + // and our subsequent POST. Re-fetch the folder and continue. + try + { + return await parentFolder.PnPContext.Web.GetFolderByServerRelativeUrlAsync(folderServerRelativeUrl, expressions).ConfigureAwait(false); + } + catch + { + // If the re-fetch fails, surface the original "already exists" error + throw; + } + } + } #endregion #region Rename folder @@ -905,6 +931,17 @@ internal static bool ErrorIndicatesFolderDoesNotExists(SharePointRestError error } } + internal static bool ErrorIndicatesFolderAlreadyExists(SharePointRestError error) + { + // -2130575257 indicates that the folder already exists. + if (error?.HttpResponseCode == 400 && error.ServerErrorCode == -2130575257) + { + return true; + } + + return false; + } + #endregion } }