OF-DL/OF DL.Tests/Models/Mappers/PostMapperTests.cs

137 lines
4.3 KiB
C#

using OF_DL.Models.Dtos.Common;
using OF_DL.Models.Dtos.Posts;
using OF_DL.Models.Entities.Posts;
using OF_DL.Models.Mappers;
namespace OF_DL.Tests.Models.Mappers;
public class PostMapperTests
{
[Fact]
public void PostFromDto_ReturnsDefaults_WhenDtoNull()
{
Post result = PostMapper.FromDto((PostDto?)null);
Assert.False(result.HasMore);
Assert.Null(result.TailMarker);
Assert.Empty(result.List);
}
[Fact]
public void FromDto_MapsListItems()
{
DateTime postedAt = new(2024, 5, 6, 7, 8, 9, DateTimeKind.Utc);
PostDto dto = new()
{
HasMore = true,
TailMarker = "tail",
List =
[
new ListItemDto
{
Id = 10,
PostedAt = postedAt,
Author = new AuthorDto { Id = 3 },
Text = "post",
RawText = "post",
IsOpened = true,
Price = "2.50",
IsArchived = true,
Media =
[
new MediumDto
{
Id = 20,
Type = "photo",
CanView = true,
Preview = "preview",
Files = new FilesDto
{
Full = new FullDto { Url = "https://example.com/full.jpg" },
Preview = new PreviewDto { Url = "https://example.com/preview.jpg" }
}
}
]
}
]
};
Post result = PostMapper.FromDto(dto);
Assert.True(result.HasMore);
Assert.Equal("tail", result.TailMarker);
Assert.Single(result.List);
ListItem item = result.List[0];
Assert.Equal(10, item.Id);
Assert.Equal(postedAt, item.PostedAt);
Assert.NotNull(item.Author);
Assert.Equal(3, item.Author.Id);
Assert.Equal("post", item.Text);
Assert.True(item.IsOpened);
Assert.NotNull(item.Media);
Assert.Single(item.Media);
Medium media = item.Media[0];
Assert.Equal(20, media.Id);
Assert.Equal("photo", media.Type);
Assert.NotNull(media.Files);
Assert.NotNull(media.Files.Full);
Assert.Equal("https://example.com/full.jpg", media.Files.Full.Url);
Assert.NotNull(media.Files.Preview);
Assert.Equal("https://example.com/preview.jpg", media.Files.Preview.Url);
}
[Fact]
public void FromDto_MapsSinglePost()
{
DateTime postedAt = new(2024, 6, 7, 8, 9, 10, DateTimeKind.Utc);
SinglePostDto dto = new()
{
Id = 77,
PostedAt = postedAt,
Author = new AuthorDto { Id = 8 },
Text = "single",
RawText = "single",
IsOpened = true,
Price = "4.00",
IsArchived = false,
Preview = ["preview"],
Media =
[
new MediumDto
{
Id = 88,
Type = "video",
CanView = true,
Preview = "preview",
Files = new FilesDto { Full = new FullDto { Url = "https://example.com/full.mp4" } },
VideoSources = new VideoSourcesDto { _240 = "240.mp4", _720 = "720.mp4" }
}
]
};
SinglePost result = PostMapper.FromDto(dto);
Assert.Equal(77, result.Id);
Assert.Equal(postedAt, result.PostedAt);
Assert.NotNull(result.Author);
Assert.Equal(8, result.Author.Id);
Assert.Equal("single", result.Text);
Assert.True(result.IsOpened);
Assert.NotNull(result.Media);
Assert.Single(result.Media);
Medium media = result.Media[0];
Assert.Equal(88, media.Id);
Assert.NotNull(media.Files);
Assert.NotNull(media.Files.Full);
Assert.Equal("https://example.com/full.mp4", media.Files.Full.Url);
Assert.NotNull(media.VideoSources);
Assert.Equal("240.mp4", media.VideoSources._240);
Assert.Equal("720.mp4", media.VideoSources._720);
}
}