예제 #1
0
        public void GivenTestData_WhenBuildPackage_ShouldBeAbleToReadManifest()
        {
            string specFile    = new TestResources().WriteTestData_1();
            string buildFolder = Path.Combine(Path.GetTempPath(), nameof(nBlog), "build", Guid.NewGuid().ToString());

            string packageFile = new ArticlePackageBuilder()
                                 .SetSpecFile(specFile)
                                 .SetBuildFolder(buildFolder)
                                 .SetObjFolder(Path.Combine(buildFolder, "obj"))
                                 .Build();

            byte[]         fileBytes      = File.ReadAllBytes(packageFile);
            ArticlePayload articlePayload = fileBytes.ToArticlePayload((ArticleId)"id");

            ArticleManifest articleManifest = articlePayload.ReadManifest();

            articleManifest.Should().NotBeNull();
            articleManifest.Should().NotBeNull();
            articleManifest.ArticleId.Should().Be("article/contact");
            articleManifest.Title.Should().Be("Contact");
            articleManifest.Author.Should().Be("Ghost Writer");
            articleManifest.Date.Should().Be(new DateTime(2020, 1, 2));

            Enumerable.SequenceEqual(articleManifest.Tags, new[] { "Tag1", "Tag2" }).Should().BeTrue();
        }
        public static ArticlePayload ToArticlePayload(this byte[] subject)
        {
            subject.VerifyAssert(x => x?.Length > 0, $"{nameof(subject)} is empty");

            ArticleManifest articleManifest = subject.ReadManifest();

            return(subject.ToArticlePayload((ArticleId)articleManifest.ArticleId));
        }
예제 #3
0
        public static void WriteToFile(this ArticleManifest mlPackageManifest, string filePath)
        {
            filePath.VerifyNotEmpty(nameof(filePath));

            mlPackageManifest.Verify();
            var json = Json.Default.SerializeFormat(mlPackageManifest);

            File.WriteAllText(filePath, json);
        }
예제 #4
0
        public static void Verify(this ArticleManifest subject)
        {
            subject.VerifyNotNull(nameof(subject));

            subject.ArticleId.VerifyNotEmpty($"{nameof(subject.ArticleId)} is required");
            _ = new ArticleId(subject.ArticleId).GetArticleArea();

            subject.PackageVersion.VerifyNotEmpty($"{nameof(subject.PackageVersion)} is required");
            subject.Title.VerifyNotEmpty($"{nameof(subject.Title)} is required");
        }
예제 #5
0
        public async Task GivenRealPackage_WhenFullLifeCycleInFolder_ShouldPass()
        {
            TestWebsiteHost host = TestApplication.GetHost();

            string specFile    = new TestResources().WriteTestData_1();
            string buildFolder = Path.Combine(Path.GetTempPath(), nameof(nBlog), "build", Guid.NewGuid().ToString());

            string packageFile = new ArticlePackageBuilder()
                                 .SetSpecFile(specFile)
                                 .SetBuildFolder(buildFolder)
                                 .SetObjFolder(Path.Combine(buildFolder, "obj"))
                                 .Build();

            byte[]          packageBytes    = File.ReadAllBytes(packageFile);
            ArticlePayload  articlePayload  = packageBytes.ToArticlePayload();
            ArticleManifest articleManifest = packageBytes.ReadManifest();

            await host.ArticleClient.Set(articlePayload);

            ArticlePayload?readPayload = await host.ArticleClient.Get((ArticleId)articlePayload.Id);

            readPayload.Should().NotBeNull();

            ArticleManifest readArticleManifest = articlePayload.ReadManifest();

            articleManifest.ArticleId.Should().Be(readArticleManifest.ArticleId);
            articleManifest.PackageVersion.Should().Be(readArticleManifest.PackageVersion);
            articleManifest.Title.Should().Be(readArticleManifest.Title);
            articleManifest.Summary.Should().Be(readArticleManifest.Summary);
            articleManifest.Author.Should().Be(readArticleManifest.Author);
            articleManifest.ImageFile.Should().Be(readArticleManifest.ImageFile);
            articleManifest.Date.Should().Be(readArticleManifest.Date);
            Enumerable.SequenceEqual(articleManifest.Tags !, readArticleManifest.Tags !).Should().BeTrue();
            Enumerable.SequenceEqual(articleManifest.Categories !, readArticleManifest.Categories !).Should().BeTrue();

            (articlePayload == readPayload).Should().BeTrue();

            BatchSet <string> searchList = await host.ArticleClient.List(QueryParameters.Default).ReadNext();

            searchList.Should().NotBeNull();

            searchList.Records.Any(x => x.StartsWith(articlePayload.Id)).Should().BeTrue();

            (await host.ArticleClient.Delete((ArticleId)articlePayload.Id)).Should().BeTrue();

            searchList = await host.ArticleClient.List(QueryParameters.Default).ReadNext();

            searchList.Should().NotBeNull();
            searchList.Records.Any(x => x.StartsWith(articlePayload.Id)).Should().BeFalse();
        }
예제 #6
0
        private void BuildIndex(Context context, string packageFile, CancellationToken token)
        {
            _logger.LogInformation($"{nameof(BuildIndex)}: packageFile={packageFile}");

            byte[]         bytes          = File.ReadAllBytes(packageFile);
            ArticlePayload articlePayload = bytes.ToArticlePayload((ArticleId)"id");

            IReadOnlyList <WordCount> wordCounts = new ArticlePackageIndexBuilder().Build(articlePayload);

            ArticleManifest articleManifest = articlePayload.ReadManifest();

            var articleIndex = new ArticleIndex
            {
                ArticleId   = articleManifest.ArticleId,
                WordIndexes = wordCounts,
            };

            context.Queue.Enqueue(articleIndex);
        }
예제 #7
0
 public static IEnumerable <string> GetCategoryList(this ArticleManifest mlPackageManifest) => mlPackageManifest.Categories ?? Array.Empty <string>();
예제 #8
0
 public static IEnumerable <string> GetTagList(this ArticleManifest mlPackageManifest) => mlPackageManifest.Tags ?? Array.Empty <string>();
예제 #9
0
 public static IReadOnlyList <string> GetReferences(this ArticleManifest mlPackageManifest) => mlPackageManifest.GetTagList()
 .Concat(mlPackageManifest.GetCategoryList())
 .OrderBy(x => x)
 .ToList();