public async Task Can_GetGetArticleWithRolesAsync()
        {
            var expectedId        = Guid.NewGuid();
            var expectedTitle     = "some title";
            var expectedBody      = "some body";
            var expectedTimestamp = DateTime.ParseExact("01.02.2020", "dd.MM.yyyy", null);

            var article = new Blog.Domain.Article();

            article.Id        = expectedId;
            article.Title     = expectedTitle;
            article.Body      = expectedBody;
            article.Timestamp = expectedTimestamp;

            await this.articlesRepository.AddAsync(article);

            var role1          = new ApplicationRole("role1");
            var identityResult = await this.roleManager.CreateAsync(role1);

            Assert.True(identityResult.Succeeded);

            var role2 = new ApplicationRole("role2");

            identityResult = await this.roleManager.CreateAsync(role2);

            Assert.True(identityResult.Succeeded);

            var articleRole1 = new ArticleRole();

            articleRole1.Article = article;
            articleRole1.Role    = role1;

            await this.articleRolesRepository.AddAsync(articleRole1);

            var articleRole2 = new ArticleRole();

            articleRole2.Article = article;
            articleRole2.Role    = role2;

            await this.articleRolesRepository.AddAsync(articleRole2);

            var actual = await this.articlesRetriever.GetArticleWithRolesAsync(article.Id);

            Assert.Equal(expectedId, actual.Id);
            Assert.Equal(expectedTitle, actual.Title);
            Assert.Equal(expectedBody, actual.Body);
            Assert.Equal(expectedTimestamp, actual.Timestamp);
            Assert.True("role1, role2" == actual.Roles || "role2, role1" == actual.Roles);
        }
        public async Task Can_GetCategoryArticlesAsync()
        {
            var category1 = new Category();

            category1.Name = "category 1";

            await this.categoriesRepository.AddAsync(category1);

            var category2 = new Category();

            category2.Name   = "category 2";
            category2.Parent = category1;

            await this.categoriesRepository.AddAsync(category2);

            var category3 = new Category();

            category3.Name   = "category 3";
            category3.Parent = category2;

            await this.categoriesRepository.AddAsync(category3);

            var category4 = new Category();

            category4.Name   = "category 4";
            category4.Parent = category3;

            await this.categoriesRepository.AddAsync(category4);

            var category5 = new Category();

            category5.Name   = "category 5";
            category5.Parent = category2;

            await this.categoriesRepository.AddAsync(category5);

            var category6 = new Category();

            category6.Name   = "category 6";
            category6.Parent = category5;

            await this.categoriesRepository.AddAsync(category6);

            var article1 = new Blog.Domain.Article();

            article1.Title = "title article 1";
            article1.Body  = "body article 1";

            await this.articlesRepository.AddAsync(article1);

            var article1Category2 = new ArticleCategory();

            article1Category2.Article  = article1;
            article1Category2.Category = category2;

            await this.articleCategoriesRepository.AddAsync(article1Category2);

            var article1Category5 = new ArticleCategory();

            article1Category5.Article  = article1;
            article1Category5.Category = category5;

            await this.articleCategoriesRepository.AddAsync(article1Category5);

            var article2 = new Blog.Domain.Article();

            article2.Title = "title article 2";
            article2.Body  = "body article 2";

            await this.articlesRepository.AddAsync(article2);

            var article2Category3 = new ArticleCategory();

            article2Category3.Article  = article2;
            article2Category3.Category = category3;

            await this.articleCategoriesRepository.AddAsync(article2Category3);

            var article3 = new Blog.Domain.Article();

            article3.Title = "title article 3";
            article3.Body  = "body article 3";

            await this.articlesRepository.AddAsync(article3);

            var article3Category1 = new ArticleCategory();

            article3Category1.Article  = article3;
            article3Category1.Category = category1;

            await this.articleCategoriesRepository.AddAsync(article3Category1);

            var actual = await this.articlesRetriever.GetCategoryArticlesAsync(category2.Id, null);

            Assert.Equal(2, actual.Count);
            Assert.Equal(article1.Id, actual[0].Id);
            Assert.Equal(article1.Title, actual[0].Title);
            Assert.Equal(article2.Id, actual[1].Id);
            Assert.Equal(article2.Title, actual[1].Title);
        }