Files
Stein Helge Riise ede31fbb7e Initial import
2025-11-17 08:32:46 +01:00

57 lines
2.4 KiB
C#

using System.Net;
using System.Net.Http.Json;
using FluentAssertions;
using MinAttest.Contracts.Attests;
using MinAttest.Contracts.Persons;
using MinAttest.Contracts.ShareLinks;
using MinAttest.Tests.Integration.Server;
using Xunit;
namespace MinAttest.Tests.Integration.Api;
[Collection("IntegrationCollection")]
public class ShareLinksApiTests : IClassFixture<ApiWebAppFactory>
{
private readonly HttpClient _client;
public ShareLinksApiTests(ApiWebAppFactory factory) => _client = factory.CreateClient();
[Fact]
public async Task Create_list_revoke_sharelink_via_http()
{
// Upsert person
var personResp = await _client.PostAsJsonAsync("/api/v1/persons", new PersonUpsertRequest("hash-api-share-1", "share-person@example.com", null));
personResp.StatusCode.Should().Be(HttpStatusCode.OK);
var person = await personResp.Content.ReadFromJsonAsync<PersonResponse>();
// Upload attest
var upload = new PersonAttestUploadRequest(
Title: "ShareAttest",
From: new DateOnly(2024,1,1),
To: new DateOnly(2024,6,1),
Summary: null,
BlobPath: string.Empty,
BlobHash: null,
ContentBase64: Convert.ToBase64String(new byte[]{1,2,3,4}),
ContentType: "application/pdf");
var upResp = await _client.PostAsJsonAsync($"/api/v1/persons/{person!.Id}/attests", upload);
upResp.StatusCode.Should().Be(HttpStatusCode.Created);
var created = await upResp.Content.ReadFromJsonAsync<Dictionary<string, object>>();
var attestId = Guid.Parse(created!["attestId"].ToString()!);
// Create share link
var createReq = new CreateShareLinkRequest(TimeSpan.FromDays(7), false);
var slResp = await _client.PostAsJsonAsync($"/api/v1/attests/{attestId}/sharelinks", createReq);
slResp.StatusCode.Should().Be(HttpStatusCode.OK);
var link = await slResp.Content.ReadFromJsonAsync<ShareLinkResponse>();
link.Should().NotBeNull();
// List
var listResp = await _client.GetAsync($"/api/v1/attests/{attestId}/sharelinks");
listResp.StatusCode.Should().Be(HttpStatusCode.OK);
// Revoke
var delResp = await _client.DeleteAsync($"/api/v1/attests/{attestId}/sharelinks/{link!.ShareId}");
delResp.StatusCode.Should().Be(HttpStatusCode.NoContent);
}
}