Skip to content

Commit

Permalink
Add migration test
Browse files Browse the repository at this point in the history
  • Loading branch information
dennisreimann committed May 7, 2024
1 parent adec6a8 commit d3cad48
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 13 deletions.
6 changes: 2 additions & 4 deletions BTCPayServer.Tests/ThirdPartyTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ public async Task CanUseAzureBlobStorage()
Assert.IsType<ViewResult>(
await controller.EditAzureBlobStorageStorageProvider(azureBlobStorageConfiguration));


var shouldBeRedirectingToAzureStorageConfigPage =
Assert.IsType<RedirectToActionResult>(await controller.Storage());
Assert.Equal(nameof(StorageProvider), shouldBeRedirectingToAzureStorageConfigPage.ActionName);
Expand All @@ -72,9 +71,8 @@ public async Task CanUseAzureBlobStorage()
await controller.StorageProvider(StorageProvider.AzureBlobStorage.ToString()))
.Model).ConnectionString);



await UnitTest1.CanUploadRemoveFiles(controller);
var fileId = await UnitTest1.CanUploadFile(controller);
await UnitTest1.CanRemoveFile(controller, fileId);
}

[Fact(Skip = "Fail on CI")]
Expand Down
65 changes: 56 additions & 9 deletions BTCPayServer.Tests/UnitTest1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2507,6 +2507,51 @@ public async Task CanFixMappedDomainAppType()
}
}

[Fact(Timeout = LongRunningTestTimeout)]
[Trait("Integration", "Integration")]
public async Task CanMigrateFileIds()
{
using var tester = CreateServerTester(newDb: true);
await tester.StartAsync();
var f = tester.PayTester.GetService<ApplicationDbContextFactory>();
var user = tester.NewAccount();
await user.GrantAccessAsync();

// upload file to get a working fileId
var controller = tester.PayTester.GetController<UIServerController>(user.UserId, user.StoreId);
Assert.IsType<FileSystemStorageConfiguration>(Assert.IsType<ViewResult>(await controller.StorageProvider(StorageProvider.FileSystem.ToString())).Model);
var fileId = await CanUploadFile(controller);

// attach file id as logo to store
var store = await tester.PayTester.StoreRepository.FindStore(user.StoreId);
var blob = store!.GetStoreBlob();
blob.LogoFileId = fileId;
blob.LogoUrl = null;
blob.CssFileId = null;
store.SetStoreBlob(blob);
await tester.PayTester.StoreRepository.UpdateStore(store);

// create legacy theme setting that needs migration
var settingsRepo = tester.PayTester.GetService<SettingsRepository>();
await settingsRepo.UpdateSetting(new ThemeSettings { LogoFileId = fileId, CustomThemeFileId = null });

// migrate and check
await RestartMigration(tester);
var settings = await settingsRepo.GetSettingAsync<ThemeSettings>();
Assert.NotNull(settings);
Assert.Null(settings.LogoFileId);
Assert.Null(settings.CustomThemeFileId);
Assert.Null(settings.CustomThemeCssUrl);
Assert.StartsWith("/LocalStorage/", settings.LogoUrl);

store = await tester.PayTester.StoreRepository.FindStore(user.StoreId);
blob = store!.GetStoreBlob();
Assert.Null(blob.CssFileId);
Assert.Null(blob.LogoFileId);
Assert.Null(blob.CssUrl);
Assert.StartsWith("/LocalStorage/", blob.LogoUrl);
}

[Fact(Timeout = LongRunningTestTimeout)]
[Trait("Integration", "Integration")]
public async Task CanDoLightningInternalNodeMigration()
Expand Down Expand Up @@ -2943,14 +2988,14 @@ public async void CanUseLocalProviderFiles()
Assert.Equal(StorageProvider.FileSystem,
shouldBeRedirectingToLocalStorageConfigPage.RouteValues["provider"]);

await CanUploadRemoveFiles(controller);
var fileId = await CanUploadFile(controller);
await CanRemoveFile(controller, fileId);
}

internal static async Task CanUploadRemoveFiles(UIServerController controller)
internal static async Task<string> CanUploadFile(UIServerController controller)
{
var fileContent = "content";
List<IFormFile> fileList = new List<IFormFile>();
fileList.Add(TestUtils.GetFormFile("uploadtestfile1.txt", fileContent));
var fileList = new List<IFormFile> { TestUtils.GetFormFile("uploadtestfile1.txt", fileContent) };

var uploadFormFileResult = Assert.IsType<RedirectToActionResult>(await controller.CreateFiles(fileList));
Assert.True(uploadFormFileResult.RouteValues.ContainsKey("fileIds"));
Expand All @@ -2966,7 +3011,6 @@ internal static async Task CanUploadRemoveFiles(UIServerController controller)
Assert.True(viewFilesViewModel.DirectUrlByFiles.ContainsKey(fileId));
Assert.NotEmpty(viewFilesViewModel.DirectUrlByFiles[fileId]);


//verify file is available and the same
using var net = new HttpClient();
var data = await net.GetStringAsync(new Uri(viewFilesViewModel.DirectUrlByFiles[fileId]));
Expand All @@ -2991,17 +3035,20 @@ internal static async Task CanUploadRemoveFiles(UIServerController controller)
data = await net.GetStringAsync(new Uri(url));
Assert.Equal(fileContent, data);

return fileId;
}

internal static async Task CanRemoveFile(UIServerController controller, string fileId)
{
//delete file
Assert.IsType<RedirectToActionResult>(await controller.DeleteFile(fileId));
statusMessageModel = controller.TempData.GetStatusMessageModel();
var statusMessageModel = controller.TempData.GetStatusMessageModel();
Assert.NotNull(statusMessageModel);

Assert.Equal(StatusMessageModel.StatusSeverity.Success, statusMessageModel.Severity);

//attempt to fetch deleted file
viewFilesViewModel =
Assert.IsType<ViewFilesViewModel>(Assert.IsType<ViewResult>(await controller.Files(new string[] { fileId })).Model);
var viewFilesViewModel =
Assert.IsType<ViewFilesViewModel>(Assert.IsType<ViewResult>(await controller.Files([fileId])).Model);
Assert.Null(viewFilesViewModel.DirectUrlByFiles);
}

Expand Down

0 comments on commit d3cad48

Please sign in to comment.