using Microsoft.Extensions.Logging.Abstractions; using Piwigo.Client.Contract; namespace Piwigo.Client.Tests; [TestFixture] public class AlbumApiTests : ApiTestsBase { private IAlbumApi _albumApi = null!; protected override void OnSetUp() { base.OnSetUp(); _albumApi = new AlbumApi(Context, new NullLogger()); } [Test] public async Task DeleteRepresentative_should_call_api() { SetOkResult(); await _albumApi.DeleteRepresentativeAsync(1); CorrectMethodShouldGetCalled("pwg.categories.deleteRepresentative"); CorrectParamShouldGetSent("category_id", "1"); } [Test] public async Task RefreshRepresentative_should_call_api() { SetOkResult(); await _albumApi.RefreshRepresentativeAsync(1); CorrectMethodShouldGetCalled("pwg.categories.refreshRepresentative"); CorrectParamShouldGetSent("category_id", "1"); } [Test] public async Task SetRepresentative_should_call_api() { SetOkResult(); await _albumApi.SetRepresentativeAsync(1, 2); CorrectMethodShouldGetCalled("pwg.categories.setRepresentative"); CorrectParamShouldGetSent("category_id", "1"); CorrectParamShouldGetSent("image_id", "2"); } [Test] public async Task SetRank_should_call_api() { SetOkResult(); await _albumApi.SetRankAsync(1, 2); CorrectMethodShouldGetCalled("pwg.categories.setRank"); CorrectParamShouldGetSent("category_id", "1"); CorrectParamShouldGetSent("rank", "2"); } [Test] public async Task Delete_should_remove_album() { SetOkResult(); await _albumApi.DeleteAsync(1, "apiToken"); CorrectMethodShouldGetCalled("pwg.categories.delete"); CorrectParamShouldGetSent("category_id", "1"); } [Test] public async Task Move_should_reassign_album() { SetOkResult(); await _albumApi.MoveAsync(1, 2, "apiToken"); CorrectMethodShouldGetCalled("pwg.categories.move"); CorrectParamShouldGetSent("category_id", "1"); CorrectParamShouldGetSent("parent", "2"); CorrectParamShouldGetSent("pwg_token", "apiToken"); } [Test] public async Task SetInfoAsync_should_pass_all_infos_to_piwigo() { SetOkResult(); await _albumApi.SetInfoAsync(1, "albumName", "comment", AlbumStatus.Public); CorrectMethodShouldGetCalled("pwg.categories.setInfo"); CorrectParamShouldGetSent("category_id", "1"); CorrectParamShouldGetSent("name", "albumName"); CorrectParamShouldGetSent("comment", "comment"); CorrectParamShouldGetSent("status", "public"); } [Test] public async Task CalculateOrphansAsync_should_return_correct_values() { SetJsonResult(@"{ stat: ""ok"", result: [ { nb_images_associated_outside: 1, nb_images_becoming_orphan: 2, nb_images_recursive: 3 } ] }"); var response = await _albumApi.CalculateOrphansAsync(1); CorrectMethodShouldGetCalled("pwg.categories.calculateOrphans"); CorrectParamShouldGetSent("category_id", "1"); response.Should().NotBeNull(); response.AssociatedOutsideCount.Should().Be(1); response.BecomingOrphanCount.Should().Be(2); response.RecursiveImageCount.Should().Be(3); } [Test] public async Task Add_should_create_album_and_return_id() { var serverResponse = new PiwigoResponse { Status = "ok", Result = new AlbumAdded { Id = 1, Info = "Album added" } }; SetJsonResult(serverResponse); var response = await _albumApi.AddAsync("UnittestMain2", null, "comment", true, AlbumStatus.Public, true, AlbumPosition.Last); CorrectMethodShouldGetCalled("pwg.categories.add"); CorrectParamShouldGetSent("name", "UnittestMain2"); response.Should().BeGreaterOrEqualTo(1); } [Test] public async Task GetList_should_return_all_existing_albums() { await SetJsonResultFromFileAsync("AlbumApi.getList.json"); var response = await _albumApi.GetListAsync(1, true, false, ThumbnailSize.Small); CorrectMethodShouldGetCalled("pwg.categories.getList"); CorrectParamShouldGetSent("cat_id", "1"); CorrectParamShouldGetSent("recursive", "true"); CorrectParamShouldGetSent("fullname", "false"); CorrectParamShouldGetSent("thumbnail_size", "small"); await Verify(response); } }