From 7e414fb4a09e6d35fa32d48fdba38a537ffe1d23 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 31 Aug 2020 22:39:18 +0800 Subject: Post info now contain data etag. --- Timeline.Tests/IntegratedTests/TimelineTest.cs | 34 ++++++++++++++++++++++++++ Timeline/Models/Http/Timeline.cs | 7 +++++- Timeline/Models/Timeline.cs | 4 +++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Timeline.Tests/IntegratedTests/TimelineTest.cs b/Timeline.Tests/IntegratedTests/TimelineTest.cs index ac4f41a2..ec46b96a 100644 --- a/Timeline.Tests/IntegratedTests/TimelineTest.cs +++ b/Timeline.Tests/IntegratedTests/TimelineTest.cs @@ -1485,5 +1485,39 @@ namespace Timeline.Tests.IntegratedTests } } } + + [Theory] + [MemberData(nameof(TimelineUrlGeneratorData))] + public async Task PostDataETag(TimelineUrlGenerator urlGenerator) + { + using var client = await CreateClientAsUser(); + + long id; + string etag; + + { + var res = await client.PostAsJsonAsync(urlGenerator(1, "posts"), new TimelinePostCreateRequest + { + Content = new TimelinePostCreateRequestContent + { + Type = TimelinePostContentTypes.Image, + Data = Convert.ToBase64String(ImageHelper.CreatePngWithSize(100, 50)) + } + }); + res.Should().HaveStatusCode(200); + var body = await res.ReadBodyAsJsonAsync(); + body.Content.ETag.Should().NotBeNullOrEmpty(); + + id = body.Id; + etag = body.Content.ETag; + } + + { + var res = await client.GetAsync(urlGenerator(1, $"posts/{id}/data")); + res.Should().HaveStatusCode(200); + res.Headers.ETag.Should().NotBeNull(); + res.Headers.ETag.ToString().Should().Be(etag); + } + } } } diff --git a/Timeline/Models/Http/Timeline.cs b/Timeline/Models/Http/Timeline.cs index 3596af18..a81b33f5 100644 --- a/Timeline/Models/Http/Timeline.cs +++ b/Timeline/Models/Http/Timeline.cs @@ -25,6 +25,10 @@ namespace Timeline.Models.Http /// If post is of image type. This is the image url. /// public string? Url { get; set; } + /// + /// If post has data (currently it means it's a image post), this is the data etag. + /// + public string? ETag { get; set; } } /// @@ -192,7 +196,8 @@ namespace Timeline.Models.Http Url = urlHelper.ActionLink( action: nameof(TimelineController.PostDataGet), controller: nameof(TimelineController)[0..^nameof(Controller).Length], - values: new { Name = source.TimelineName, Id = source.Id }) + values: new { Name = source.TimelineName, Id = source.Id }), + ETag = $"\"{imageContent.DataTag}\"" }; } else diff --git a/Timeline/Models/Timeline.cs b/Timeline/Models/Timeline.cs index 42906053..a5987577 100644 --- a/Timeline/Models/Timeline.cs +++ b/Timeline/Models/Timeline.cs @@ -43,6 +43,10 @@ namespace Timeline.Models public ImageTimelinePostContent(string dataTag) { DataTag = dataTag; } public string Type { get; } = TimelinePostContentTypes.Image; + + /// + /// The tag of the data. The tag of the entry in DataManager. Also the etag (not quoted). + /// public string DataTag { get; set; } } -- cgit v1.2.3