adds first tag api calls
This commit is contained in:
parent
737f3ff198
commit
e29c1c7c03
@ -41,6 +41,21 @@
|
|||||||
<None Update="ImageApiTests.GetInfo_should_pass_request_and_return_data.verified.txt">
|
<None Update="ImageApiTests.GetInfo_should_pass_request_and_return_data.verified.txt">
|
||||||
<DependentUpon>ImageApiTests.cs</DependentUpon>
|
<DependentUpon>ImageApiTests.cs</DependentUpon>
|
||||||
</None>
|
</None>
|
||||||
|
<None Update="TagApi.GetAdminList.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="TagApiTests.AddAsync_should_add_tag_and_return_correct_result.verified.txt">
|
||||||
|
<DependentUpon>TagApiTests.cs</DependentUpon>
|
||||||
|
</None>
|
||||||
|
<None Update="TagApi.GetList.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="TagApiTests.GetAdminListAsync_should_return_all_tags.verified.txt">
|
||||||
|
<DependentUpon>TagApiTests.cs</DependentUpon>
|
||||||
|
</None>
|
||||||
|
<None Update="TagApiTests.GetListAsync_should_return_all_tags.verified.txt">
|
||||||
|
<DependentUpon>TagApiTests.cs</DependentUpon>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
19
src/Piwigo.Client.Tests/TagApi.GetAdminList.json
Normal file
19
src/Piwigo.Client.Tests/TagApi.GetAdminList.json
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"stat": "ok",
|
||||||
|
"result": {
|
||||||
|
"tags": [
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"name": "tag1",
|
||||||
|
"url_name": "tag1",
|
||||||
|
"lastmodified": "2022-10-27 21:17:59"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2",
|
||||||
|
"name": "tag2",
|
||||||
|
"url_name": "tag2",
|
||||||
|
"lastmodified": "2022-10-27 21:23:34"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
15
src/Piwigo.Client.Tests/TagApi.GetList.json
Normal file
15
src/Piwigo.Client.Tests/TagApi.GetList.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"stat": "ok",
|
||||||
|
"result": {
|
||||||
|
"tags": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "tag1",
|
||||||
|
"url_name": "tag1",
|
||||||
|
"lastmodified": "2022-10-27 21:17:59",
|
||||||
|
"counter": 1,
|
||||||
|
"url": "http://localhost:8080/index.php?/tags/1-tag1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
info: Keyword "test3" has been added,
|
||||||
|
id: 3,
|
||||||
|
name: test3,
|
||||||
|
url_name: test3
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: tag1,
|
||||||
|
url_name: tag1,
|
||||||
|
lastmodified: DateTime_1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
name: tag2,
|
||||||
|
url_name: tag2,
|
||||||
|
lastmodified: DateTime_2
|
||||||
|
}
|
||||||
|
]
|
@ -0,0 +1,10 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
counter: 1,
|
||||||
|
url: http://localhost:8080/index.php?/tags/1-tag1,
|
||||||
|
id: 1,
|
||||||
|
name: tag1,
|
||||||
|
url_name: tag1,
|
||||||
|
lastmodified: DateTime_1
|
||||||
|
}
|
||||||
|
]
|
54
src/Piwigo.Client.Tests/TagApiTests.cs
Normal file
54
src/Piwigo.Client.Tests/TagApiTests.cs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
using Microsoft.Extensions.Logging.Abstractions;
|
||||||
|
using Piwigo.Client.Tags;
|
||||||
|
|
||||||
|
namespace Piwigo.Client.Tests;
|
||||||
|
|
||||||
|
[TestFixture]
|
||||||
|
public class TagApiTests : ApiTestsBase
|
||||||
|
{
|
||||||
|
private ITagApi _tagApi = null!;
|
||||||
|
private const string ApiToken = "37ff55f201cf54eadf11f734a74f1d0e";
|
||||||
|
|
||||||
|
protected override void OnSetUp()
|
||||||
|
{
|
||||||
|
base.OnSetUp();
|
||||||
|
_tagApi = new TagApi(Context, new NullLogger<TagApi>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task AddAsync_should_add_tag_and_return_correct_result()
|
||||||
|
{
|
||||||
|
SetJsonResult(@"{""stat"":""ok"",""result"":{""info"":""Keyword \""test3\"" has been added"",""id"":3,""name"":""test3"",""url_name"":""test3""}}");
|
||||||
|
|
||||||
|
var response = await _tagApi.AddAsync("test3");
|
||||||
|
|
||||||
|
CorrectMethodShouldGetCalled("pwg.tags.add");
|
||||||
|
CorrectParamShouldGetSent("name", "test3");
|
||||||
|
|
||||||
|
await Verify(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task GetAdminListAsync_should_return_all_tags()
|
||||||
|
{
|
||||||
|
await SetJsonResultFromFileAsync("TagApi.GetAdminList.json");
|
||||||
|
|
||||||
|
var response = await _tagApi.GetAdminListAsync();
|
||||||
|
|
||||||
|
CorrectMethodShouldGetCalled("pwg.tags.getAdminList");
|
||||||
|
|
||||||
|
await Verify(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task GetListAsync_should_return_all_tags()
|
||||||
|
{
|
||||||
|
await SetJsonResultFromFileAsync("TagApi.GetList.json");
|
||||||
|
|
||||||
|
var response = await _tagApi.GetListAsync();
|
||||||
|
|
||||||
|
CorrectMethodShouldGetCalled("pwg.tags.getList");
|
||||||
|
|
||||||
|
await Verify(response);
|
||||||
|
}
|
||||||
|
}
|
12
src/Piwigo.Client/Tags/AssignedTag.cs
Normal file
12
src/Piwigo.Client/Tags/AssignedTag.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Piwigo.Client.Tags;
|
||||||
|
|
||||||
|
public record AssignedTag : Tag
|
||||||
|
{
|
||||||
|
[JsonProperty("counter")]
|
||||||
|
public int Counter { get; init; }
|
||||||
|
|
||||||
|
[JsonProperty("url")]
|
||||||
|
public string Url { get; init; }
|
||||||
|
}
|
@ -2,4 +2,32 @@ namespace Piwigo.Client.Tags;
|
|||||||
|
|
||||||
public interface ITagApi
|
public interface ITagApi
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a new tag to the gallery
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">the name of the tag</param>
|
||||||
|
/// <param name="cancellationToken">
|
||||||
|
/// <see cref="CancellationToken" />
|
||||||
|
/// </param>
|
||||||
|
/// <returns>Information about the uploaded tag</returns>
|
||||||
|
Task<TagAdded> AddAsync(string name, CancellationToken cancellationToken = default);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a list of all known tags. This call is only available for admins
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken">
|
||||||
|
/// <see cref="CancellationToken" />
|
||||||
|
/// </param>
|
||||||
|
/// <returns>all available tags</returns>
|
||||||
|
Task<IReadOnlyCollection<Tag>> GetAdminListAsync(CancellationToken cancellationToken = default);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gits a list of known tags that are at least assigned to one image
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sortByCounter">sorts the result by the number of assigned images of a tag</param>
|
||||||
|
/// <param name="cancellationToken">
|
||||||
|
/// <see cref="CancellationToken" />
|
||||||
|
/// </param>
|
||||||
|
/// <returns>all tags with at least one image assigned</returns>
|
||||||
|
Task<IReadOnlyCollection<AssignedTag>> GetListAsync(bool? sortByCounter = null, CancellationToken cancellationToken = default);
|
||||||
}
|
}
|
20
src/Piwigo.Client/Tags/Tag.cs
Normal file
20
src/Piwigo.Client/Tags/Tag.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Piwigo.Client.Tags;
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "StringLiteralTypo")]
|
||||||
|
public record Tag
|
||||||
|
{
|
||||||
|
[JsonProperty("id")]
|
||||||
|
public int Id { get; init; }
|
||||||
|
|
||||||
|
[JsonProperty("name")]
|
||||||
|
public string? Name { get; init; }
|
||||||
|
|
||||||
|
[JsonProperty("url_name")]
|
||||||
|
public string? UrlName { get; init; }
|
||||||
|
|
||||||
|
[JsonProperty("lastmodified")]
|
||||||
|
public DateTime? LastModified { get; init; }
|
||||||
|
}
|
18
src/Piwigo.Client/Tags/TagAdded.cs
Normal file
18
src/Piwigo.Client/Tags/TagAdded.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Piwigo.Client.Tags;
|
||||||
|
|
||||||
|
public record TagAdded
|
||||||
|
{
|
||||||
|
[JsonProperty("info")]
|
||||||
|
public string? Info { get; init; }
|
||||||
|
|
||||||
|
[JsonProperty("id")]
|
||||||
|
public int Id { get; init; }
|
||||||
|
|
||||||
|
[JsonProperty("name")]
|
||||||
|
public string? Name { get; init; }
|
||||||
|
|
||||||
|
[JsonProperty("url_name")]
|
||||||
|
public string? UrlName { get; init; }
|
||||||
|
}
|
@ -1,5 +1,40 @@
|
|||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Piwigo.Client.Tags;
|
namespace Piwigo.Client.Tags;
|
||||||
|
|
||||||
public class TagApi : ITagApi
|
public class TagApi : ITagApi
|
||||||
{
|
{
|
||||||
|
private readonly IPiwigoContext _context;
|
||||||
|
private readonly ILogger<TagApi> _logger;
|
||||||
|
|
||||||
|
public TagApi(IPiwigoContext context, ILogger<TagApi> logger)
|
||||||
|
{
|
||||||
|
_context = context ?? throw new ArgumentNullException(nameof(context));
|
||||||
|
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<TagAdded> AddAsync(string name, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
var formParams = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{ "name", name }
|
||||||
|
};
|
||||||
|
var response = await _context.PostAsync<PiwigoResponse<TagAdded>>(_logger, "pwg.tags.add", formParams, cancellationToken);
|
||||||
|
return response.Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IReadOnlyCollection<Tag>> GetAdminListAsync(CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
var response = await _context.PostAsync<PiwigoResponse<TagList<Tag>>>(_logger, "pwg.tags.getAdminList", new Dictionary<string, string>(), cancellationToken);
|
||||||
|
return response.Result.Tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IReadOnlyCollection<AssignedTag>> GetListAsync(bool? sortByCounter = null, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
var formParams = new Dictionary<string, string>();
|
||||||
|
formParams.AddIfValueNotNull("sort_by_counter", sortByCounter?.ToString());
|
||||||
|
|
||||||
|
var response = await _context.PostAsync<PiwigoResponse<TagList<AssignedTag>>>(_logger, "pwg.tags.getList", formParams, cancellationToken);
|
||||||
|
return response.Result.Tags;
|
||||||
|
}
|
||||||
}
|
}
|
9
src/Piwigo.Client/Tags/TagList.cs
Normal file
9
src/Piwigo.Client/Tags/TagList.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Piwigo.Client.Tags;
|
||||||
|
|
||||||
|
internal record TagList<TTag>
|
||||||
|
{
|
||||||
|
[JsonProperty("tags")]
|
||||||
|
public IReadOnlyCollection<TTag> Tags { get; init; } = null!;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user