< Summary

Information
Class: TestUtilities.TestData
Assembly: GistBackend.TestUtilities
File(s): /home/runner/work/the-gist-of-it-sec/the-gist-of-it-sec/backend/GistBackend.TestUtilities/TestData.cs
Line coverage
99%
Covered lines: 123
Uncovered lines: 1
Coverable lines: 124
Total lines: 186
Line coverage: 99.1%
Branch coverage
62%
Covered branches: 20
Total branches: 32
Branch coverage: 62.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/the-gist-of-it-sec/the-gist-of-it-sec/backend/GistBackend.TestUtilities/TestData.cs

#LineLine coverage
 1using System.Net;
 2using System.ServiceModel.Syndication;
 3using GistBackend.Handlers.RssFeedHandler;
 4using GistBackend.Types;
 5
 6namespace TestUtilities;
 7
 8public static class TestData
 9{
 210    private static readonly Random Random = new();
 11
 12    public static RssFeed CreateTestRssFeed(Language language) =>
 3113        new TestFeed(Random.NextUri(), language, Random.NextFeedType());
 14
 15    public static List<TestFeedData> CreateTestFeeds(int count = 5) =>
 616        Enumerable.Range(0, count).Select(_ => new TestFeedData()).ToList();
 17
 8918    public static RssFeedInfo CreateTestFeedInfo(Language language) => new(
 8919        Random.NextString(),
 8920        Random.NextUri(),
 8921        language,
 8922        Random.NextFeedType()
 8923    );
 24
 2125    public static RssFeedInfo CreateTestFeedInfo() => CreateTestFeedInfo(Language.De);
 26
 27    public static SyndicationFeed CreateTestSyndicationFeed(List<RssEntry>? entries = null)
 28    {
 3129        entries ??= CreateTestEntries(5);
 3130        return new SyndicationFeed(Random.NextString(), Random.NextString(), Random.NextUri())
 3131            {
 3132                Items = entries.Select(entry => {
 14233                    var item = new SyndicationItem(
 14234                        entry.Title,
 14235                        Random.NextString(),
 14236                        entry.Url,
 14237                        entry.Reference,
 14238                        entry.Updated
 14239                    ) {
 14240                        PublishDate = entry.Published
 14241                    };
 14242                    item.Authors.Add(new SyndicationPerson(entry.Author){ Name = entry.Author });
 113643                    foreach (var category in entry.Categories)
 3144                    {
 42645                        item.Categories.Add(new SyndicationCategory(category));
 3146                    }
 14247                    return item;
 3148                }).ToList(),
 3149                Language = Random.NextString(),
 3150            };
 51    }
 52
 53    public static Gist CreateTestGist(int? feedId = null, string? reference = null, DateTime? updated = null,
 27954        bool isSponsoredContent = false) => new(
 27955        reference ?? Random.NextString(),
 27956        feedId ?? Random.Next(),
 27957        Random.NextString(),
 27958        isSponsoredContent,
 27959        Random.NextDateTime(max: DateTime.UnixEpoch.AddYears(30)),
 27960        updated ?? Random.NextDateTime(min: DateTime.UnixEpoch.AddYears(30)),
 27961        Random.NextUri(),
 27962        string.Join(";;", Random.NextArrayOfStrings()),
 27963        Random.Next()
 27964    );
 65
 66    public static Gist CreateTestGistFromEntry(RssEntry entry, SummaryAIResponse? summaryAIResponse = null)
 67    {
 14368        summaryAIResponse ??= CreateTestSummaryAIResponse();
 14369        return new Gist(
 14370            entry.Reference,
 14371            entry.FeedId,
 14372            entry.Author,
 14373            false,
 14374            entry.Published,
 14375            entry.Updated,
 14376            entry.Url,
 14377            string.Join(";;", summaryAIResponse.Tags),
 14378            Random.Next()
 14379        );
 80    }
 81
 37082    public static Summary CreateTestSummary(Language language, bool isTranslated, int? gistId = null) => new(
 37083        gistId ?? Random.Next(),
 37084        language,
 37085        isTranslated,
 37086        Random.NextString(),
 37087        Random.NextString()
 37088    );
 89
 90    public static List<ConstructedGist> CreateTestConstructedGists(int count, RssFeedInfo? feed = null,
 91        Language language = Language.De)
 92    {
 293        feed ??= CreateTestFeedInfo(language);
 1294        return Enumerable.Range(0, count).Select(_ => CreateTestConstructedGist(feed)).ToList();
 95    }
 96
 97    private static ConstructedGist CreateTestConstructedGist(RssFeedInfo? feed = null, string? reference = null,
 98        DateTime? updated = null, Language language = Language.De, LanguageMode languageMode = LanguageMode.Original)
 99    {
 10100        feed ??= CreateTestFeedInfo(language);
 10101        var gist = CreateTestGist(feed.Id, reference, updated);
 10102        var isTranslated = languageMode == LanguageMode.Original ||
 10103                           languageMode == LanguageMode.De && language == Language.De ||
 10104                           languageMode == LanguageMode.En && language == Language.En;
 10105        var summary = CreateTestSummary(language, isTranslated, gist.Id);
 10106        return ConstructedGist.FromGistFeedAndSummary(gist, feed, summary);
 107    }
 108
 22109    public static RecapAIResponse CreateTestRecap() => new(CreateTestRecapSections(), CreateTestRecapSections());
 110
 111    private static List<RecapSection> CreateTestRecapSections() =>
 44112        Enumerable.Range(0, 5).Select(_ =>
 220113            new RecapSection(
 220114                Random.NextString(),
 220115                Random.NextString(),
 660116                Enumerable.Range(0, 3).Select(_ => Random.Next(10000)).ToList()
 220117            )
 44118        ).ToList();
 119
 2120    public static readonly Dictionary<string, float[]> TestTextsAndEmbeddings = new() {
 2121        { "test text", Enumerable.Repeat(0.1f, 100).ToArray() },
 2122        { "very different test text", Enumerable.Repeat(0.9f, 100).ToArray() },
 2123        { "very similar test text", Enumerable.Repeat(0.100000001f, 100).ToArray() },
 2124    };
 125
 177126    public static RssEntry CreateTestEntry(int? feedId = null) => new(
 177127        Random.NextString(),
 177128        feedId ?? Random.Next(),
 177129        Random.NextString(),
 177130        Random.NextString(),
 177131        Random.NextDateTime(max: DateTime.UnixEpoch.AddYears(30)),
 177132        Random.NextDateTime(min: DateTime.UnixEpoch.AddYears(30)),
 177133        Random.NextUri(),
 177134        [Random.NextString(), Random.NextString(), Random.NextString()]
 177135    );
 136
 137    public static List<string> CreateTestStrings(int count) =>
 663138        Enumerable.Range(0, count).Select(_ => Random.NextString()).ToList();
 139
 140    public static List<RssEntry> CreateTestEntries(int count, int? feedId = null) =>
 172141        Enumerable.Range(0, count).Select(_ => CreateTestEntry(feedId)).ToList();
 142
 143143    private static SummaryAIResponse CreateTestSummaryAIResponse() => new(
 143144        Random.NextString(),
 143145        Random.NextString(),
 143146        Random.NextString(),
 143147        CreateTestStrings(Random.Next(1, 5))
 143148    );
 149
 150    public static List<SummaryAIResponse> CreateTestSummaryAIResponses(int count) =>
 173151        Enumerable.Range(0, count).Select(_ => CreateTestSummaryAIResponse()).ToList();
 152
 153    // Helper for mocking HttpClient
 23154    private class MockHttpMessageHandler(
 23155        Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> sendAsync)
 156        : HttpMessageHandler
 157    {
 158        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
 159            CancellationToken cancellationToken)
 30160            => sendAsync(request, cancellationToken);
 161    }
 162
 163    public static HttpClient CreateMockedHttpClient(List<TestFeedData> testFeeds)
 164    {
 23165        var syndicationXmlByRssUrl = testFeeds.ToDictionary(
 30166            feed => feed.RssFeed.RssUrl,
 30167            feed => feed.SyndicationFeedXml
 23168        );
 23169        var httpMessageHandlerMock = new MockHttpMessageHandler((request, _) =>
 23170        {
 30171            if (request.RequestUri is not null &&
 30172                syndicationXmlByRssUrl.TryGetValue(request.RequestUri, out var responseContent))
 23173            {
 30174                return Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK)
 30175                {
 30176                    Content = new StringContent(responseContent)
 30177                });
 23178            }
 0179            return Task.FromResult(new HttpResponseMessage(HttpStatusCode.NotFound));
 23180        });
 23181        return new HttpClient(httpMessageHandlerMock);
 182    }
 183
 184    public static RssFeedHandler CreateRssFeedHandler(HttpClient httpClient, List<TestFeedData> testFeeds) =>
 53185        new(httpClient) { Definitions = testFeeds.Select(f => f.RssFeed).ToList() };
 186}

Methods/Properties

.cctor()
CreateTestRssFeed(GistBackend.Types.Language)
CreateTestFeeds(System.Int32)
CreateTestFeedInfo(GistBackend.Types.Language)
CreateTestFeedInfo()
CreateTestSyndicationFeed(System.Collections.Generic.List`1<GistBackend.Types.RssEntry>)
CreateTestGist(System.Nullable`1<System.Int32>,System.String,System.Nullable`1<System.DateTime>,System.Boolean)
CreateTestGistFromEntry(GistBackend.Types.RssEntry,GistBackend.Types.SummaryAIResponse)
CreateTestSummary(GistBackend.Types.Language,System.Boolean,System.Nullable`1<System.Int32>)
CreateTestConstructedGists(System.Int32,GistBackend.Types.RssFeedInfo,GistBackend.Types.Language)
CreateTestConstructedGist(GistBackend.Types.RssFeedInfo,System.String,System.Nullable`1<System.DateTime>,GistBackend.Types.Language,GistBackend.Types.LanguageMode)
CreateTestRecap()
CreateTestRecapSections()
CreateTestEntry(System.Nullable`1<System.Int32>)
CreateTestStrings(System.Int32)
CreateTestEntries(System.Int32,System.Nullable`1<System.Int32>)
CreateTestSummaryAIResponse()
CreateTestSummaryAIResponses(System.Int32)
.ctor(System.Func`3<System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken,System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage>>)
SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken)
CreateMockedHttpClient(System.Collections.Generic.List`1<TestUtilities.TestFeedData>)
CreateRssFeedHandler(System.Net.Http.HttpClient,System.Collections.Generic.List`1<TestUtilities.TestFeedData>)