public void TopicController_Ctor_WhenCreatingAnInstanceOfController_TopicsWillBeInitialized()
        {
            var wasGetTopicsInitialized = false;

            TopicController.GetTopicsCollection = () =>
            {
                wasGetTopicsInitialized = true;
                return(new List <Topic>());
            };
            TopicController.Init();
            var controller = new TopicController();

            Assert.IsTrue(wasGetTopicsInitialized);
        }
        public void TopicController_Ctor_WhenCreatingAnInstanceTwice_TopicsWillBeInitializedOnlyOnce()
        {
            var callCount = 0;

            TopicController.GetTopicsCollection = () =>
            {
                callCount++;
                return(new List <Topic>());
            };
            TopicController.Init();
            new TopicController();
            new TopicController();
            Assert.AreEqual(1, callCount);
        }
    public async Task TopicController_IndexAsync_ReturnsTopicViewResult() {

      var controller            = new TopicController(_topicRepository, _topicMappingService) {
        ControllerContext       = _context
      };

      var result                = await controller.IndexAsync(_topic.GetWebPath()).ConfigureAwait(false) as TopicViewResult;
      var model                 = result.Model as PageTopicViewModel;

      controller.Dispose();

      Assert.IsNotNull(model);
      Assert.AreEqual<string>("Web_0_1_1", model.Title);

    }
Exemple #4
0
        public void Add_New_Topic_Test()
        {
            Mock <ITopicRepository> topicRepo = new Mock <ITopicRepository>();
            Mock <IIntermediateCategoryRepository> interRepo = new Mock <IIntermediateCategoryRepository>();


            TopicController controller = new TopicController(topicRepo.Object, interRepo.Object, () => "koral2323");

            int id = 5;

            int result = controller.Add_New_Topic(id).ViewBag.InterId;

            Assert.AreEqual(id, result);
            Assert.AreNotEqual(1, result);
        }
    public async Task TopicController_IndexAsync() {

      var topicRoutingService   = new MvcTopicRoutingService(_topicRepository, _uri, _routeData);
      var mappingService        = new TopicMappingService(_topicRepository, new TopicViewModelLookupService());

      var controller            = new TopicController(_topicRepository, topicRoutingService, mappingService);
      var result                = await controller.IndexAsync(_topic.GetWebPath()).ConfigureAwait(false) as TopicViewResult;
      var model                 = result.Model as PageTopicViewModel;

      controller.Dispose();

      Assert.IsNotNull(model);
      Assert.AreEqual<string>("Web_0_1_1", model.Title);

    }
        public void TopicController_Get_WhenTheRepositoryDoesNotFindATopicForTheGivenIdAndTuorialName_WillReturnA404()
        {
            _topicsRepository.Setup(g => g.Where(It.IsAny <Expression <Func <Topic, bool> > >())).Returns(new List <Topic> {
            });
            var controller = new TopicController(_topicsRepository.Object);

            SetUpHttpRequestParameters(controller);
            var response = controller.Get(1, "ASP.NET Core on Ubuntu");

            Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
            ExpandoObject expando;

            Assert.IsTrue(response.TryGetContentValue(out expando));
            var expandoDict = (IDictionary <string, object>)expando;

            Assert.AreEqual("The tutorial  you requested was not found", expandoDict["message"]);
        }
        public void TopicController_Delete_WhenTheTopicIsDeletedSuccessfully_WillReturnAnOKStatusAndASuccessMessage()
        {
            var controller = new TopicController(_topicsRepository.Object);

            SetUpHttpRequestParameters(controller);
            var response = controller.Delete(1);

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            ExpandoObject expando;

            Assert.IsTrue(response.TryGetContentValue(out expando));
            var expandoDict = (IDictionary <string, object>)expando;

            Assert.AreEqual("The topic was deleted successfully", expandoDict["message"]);
            _topicsRepository.Verify(t => t.Delete(It.IsAny <int>()), Times.Once());
            _topicsRepository.Verify(c => c.Save(), Times.Once());
        }
Exemple #8
0
        public void Add_New_Topic_Dont_Save_InValid_Changes()
        {
            Mock <ITopicRepository> repositoryTopic = new Mock <ITopicRepository>();
            Mock <IIntermediateCategoryRepository> repositoryInter = new Mock <IIntermediateCategoryRepository>();

            TopicController controller = new TopicController(repositoryTopic.Object, repositoryInter.Object, () => "ewa2323");
            Topic           topic      = new Topic()
            {
                TopicName = null, TopicData = null
            };

            controller.ModelState.AddModelError("TopicName", "Pole nie może pozostawać puste");
            controller.ModelState.AddModelError("TopicData", "Pole nie może pozostawać puste");
            ActionResult result = controller.Add_New_Topic(topic);

            repositoryTopic.Verify(x => x.Add_To_Topics_And_User(It.IsAny <Topic>(), It.IsAny <string>()), Times.Never);
        }
Exemple #9
0
        public void Add_New_Topic_Dont_Save_Changes_Return_View_Add_New_Topic()
        {
            Mock <ITopicRepository> repositoryTopic = new Mock <ITopicRepository>();
            Mock <IIntermediateCategoryRepository> repositoryInter = new Mock <IIntermediateCategoryRepository>();

            TopicController controller = new TopicController(repositoryTopic.Object, repositoryInter.Object, () => "ewa2323");
            Topic           topic      = new Topic()
            {
                TopicName = null, TopicData = null
            };

            controller.ModelState.AddModelError("TopicName", "Pole nie może pozostawać puste");
            controller.ModelState.AddModelError("TopicData", "Pole nie może pozostawać puste");
            ViewResult result = (ViewResult)controller.Add_New_Topic(topic);

            Assert.AreEqual("Add_New_Topic", result.ViewName);
        }
        public void Redirect_To_Action_Create_New_Topic()
        {
            //Arrange
            var testValue = new TopicViewModel()
            {
                Id = 2
            };
            var             service    = Substitute.For <ITopicService>();
            TopicController controller = new TopicController(service);

            //Act
            var expected = controller.CreateNewTopic(testValue) as RedirectToActionResult;

            //Assert
            Assert.Equal(expected.ActionName, "Index");
            Assert.Equal(expected.ControllerName, "Home");
        }
Exemple #11
0
        private async Task And_a_topic()
        {
            _topicController = new TopicController(
                _serviceProvider.GetService <ITopicDomainService>(),
                _serviceProvider.GetService <ITopicRepository>(),
                _serviceProvider.GetService <ICapabilityRepository>(),
                _serviceProvider.GetService <IKafkaJanitorRestClient>()
                );


            await _topicController.AddTopicToCapability(
                _capability.Id.ToString(),
                new TopicInput { Name = "the topic of the future", Description = "The way topics should be", Partitions = 2, KafkaClusterId = _clusterA.Id.ToString(), DryRun = false });

            // Creation of a Topic as it is now needs to be refactored to avoid having to put a random delay/sleep here.
            Thread.Sleep(2000);
        }
Exemple #12
0
        public void SetUp()
        {
            topicList = new List <Topic>
            {
                new Topic(23, "Test1", 1),
                new Topic(24, "Test2", 1),
                new Topic(25, "Test3", 1)
            };

            topicListAdmin = new List <TopicAdmin>
            {
                new TopicAdmin(26, "Test4", 1, "Test4"),
                new TopicAdmin(27, "Test5", 1, "Test5"),
                new TopicAdmin(28, "Test6", 1, "Test6")
            };
            validation      = Substitute.For <ITopic>();
            topicController = new TopicController(validation);
        }
Exemple #13
0
        private async Task When_a_topic_is_added()
        {
            _topicController = new TopicController(
                _serviceProvider.GetService <ITopicDomainService>(),
                _serviceProvider.GetService <ITopicRepository>(),
                _serviceProvider.GetService <ICapabilityRepository>(),
                _serviceProvider.GetService <IKafkaJanitorRestClient>()
                );


            await _topicController.AddTopicToCapability(
                _capability.Id.ToString(),
                new TopicInput
            {
                Name        = "the topic of the future",
                Description = "The way topics should be",
                DryRun      = true
            });
        }
        public void Return_Model_Index_Method()
        {
            //Arrange
            var testValue = new TopicViewModel()
            {
                Id = 1
            };
            var service = Substitute.For <ITopicService>();

            service.GetTopic(1).Returns(testValue);
            TopicController controller = new TopicController(service);

            //Act
            var expected = controller.Index(1) as ViewResult;

            //Assert
            Assert.Equal(expected.Model, testValue);
            Assert.NotNull(expected);
        }
Exemple #15
0
        public void Add_New_Comment_Dont_Save_InValid_Changes()
        {
            Mock <ITopicRepository> repositoryTopic = new Mock <ITopicRepository>();
            Mock <IIntermediateCategoryRepository> repositoryInter = new Mock <IIntermediateCategoryRepository>();

            TopicController controller = new TopicController(repositoryTopic.Object, repositoryInter.Object, () => "ewa2323");
            Comment         comment    = new Comment()
            {
                CommentContent = null
            };

            controller.ModelState.AddModelError("CommentContent", "Pole nie może pozostawać puste");

            ActionResult result     = controller.Add_New_Comment(comment);
            ViewResult   resultView = (ViewResult)result;

            repositoryTopic.Verify(x => x.Add_Comment(It.IsAny <Comment>(), It.IsAny <string>()), Times.Never);
            Assert.AreEqual(resultView.ViewName, "Add_New_Comment");
        }
Exemple #16
0
        public void Show_Topics_Test_id_out_of_range()
        {
            ICollection <IntermediateCategory> intercat = new List <IntermediateCategory> {
                new IntermediateCategory()
                {
                    IntermediateCategoryId = 1, NameOfMainCategory = "Zdrowie ", MainCategoryByCitiesId = 1
                },
                new IntermediateCategory()
                {
                    IntermediateCategoryId = 2, NameOfMainCategory = "Kuchnia ", MainCategoryByCitiesId = 1
                },
                new IntermediateCategory()
                {
                    IntermediateCategoryId = 3, NameOfMainCategory = "Sport ", MainCategoryByCitiesId = 1
                },
                new IntermediateCategory()
                {
                    IntermediateCategoryId = 4, NameOfMainCategory = "Kino", MainCategoryByCitiesId = 1
                },
                new IntermediateCategory()
                {
                    IntermediateCategoryId = 0, NameOfMainCategory = "Error", Topic = new List <Topic>()
                }
            }.ToList();



            Mock <IIntermediateCategoryRepository> mockI = new Mock <IIntermediateCategoryRepository>();

            mockI.Setup(m => m.Get(666)).Returns(new IntermediateCategory()
            {
                IntermediateCategoryId = 1, NameOfMainCategory = "Error", Topic = new List <Topic>()
            });
            Mock <ITopicRepository> mockT = new Mock <ITopicRepository>();

            TopicController controller = new TopicController(mockT.Object, mockI.Object);

            ViewResult result = controller.Show_Topics(666) as ViewResult;

            string viewName = result.ViewName;

            Assert.AreEqual(result.ViewName.ToString(), "Error");
        }
        public void TopicController_Get_WhenTheRepositoryDoesNotFindARequestedTopic_WillReturnA404()
        {
            _topicsRepository.Setup(g => g.Find(It.IsAny <int>()))
            .Returns((Topic)null)
            .Verifiable();

            var controller = new TopicController(_topicsRepository.Object);

            SetUpHttpRequestParameters(controller);
            var response = controller.Get(3);

            Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
            ExpandoObject expando;

            Assert.IsTrue(response.TryGetContentValue(out expando));
            var expandoDict = (IDictionary <string, object>)expando;

            Assert.AreEqual("The topic you requested was not found", expandoDict["message"]);
        }
        private async Task When_a_topic_with_too_many_partitions_is_added()
        {
            _topicController = new TopicController(
                _serviceProvider.GetService <ITopicDomainService>(),
                _serviceProvider.GetService <ITopicRepository>(),
                _serviceProvider.GetService <ICapabilityRepository>(),
                _serviceProvider.GetService <IKafkaJanitorRestClient>()
                );


            addTopicToCapabilityActionResult = await _topicController.AddTopicToCapability(
                _capability.Id.ToString(),
                new TopicInput
            {
                Name        = "the topic of the future",
                Description = "The way topics should be",
                Partitions  = Int32.MaxValue
            });
        }
Exemple #19
0
        public void ShouldCreateTopicAndNotifyTheUser()
        {
            var professionalDevelopment = new Topic {
                Id = 3, Colour = ColorTranslator.FromHtml("#000000"), Name = "Professional Development"
            };
            var formValues = new FormCollection
            {
                { "Id", professionalDevelopment.Id.ToString() },
                { "Name", professionalDevelopment.Name },
                { "Colour", professionalDevelopment.ColourInWebHex().Trim('#') }
            };

            var controller = new TopicController();

            var result = (RedirectToRouteResult)controller.Create(formValues);

            Assert.Contains(professionalDevelopment, Topic.Topics);
            Assert.AreEqual("Index", result.RouteValues["action"]);
            Assert.AreEqual("Your topic has been added successfully.", controller.TempData["message"]);
        }
        private TopicController CreateControllerWithSettings(User user, SiteSettings siteSettings, Mock <IRepository <Topic> > topicRepo)
        {
            var userMock = new Mock <ICurrentUser>();

            userMock.SetupGet(u => u.DiscussionUser).Returns(user);

            var topicService    = new DefaultTopicService(siteSettings, userMock.Object, topicRepo.Object, null, new SystemClock());
            var topicController = new TopicController(topicRepo.Object, topicService, NullLogger <TopicController> .Instance)
            {
                ControllerContext =
                {
                    HttpContext = new DefaultHttpContext
                    {
                        User    = _app.User,RequestServices = _app.ApplicationServices
                    }
                }
            };

            return(topicController);
        }
Exemple #21
0
        public void Add_New_Comment_Test2()
        {
            Mock <ITopicRepository> topicRepo = new Mock <ITopicRepository>();
            Mock <IIntermediateCategoryRepository> interRepo = new Mock <IIntermediateCategoryRepository>();



            TopicController controller = new TopicController(topicRepo.Object, interRepo.Object, () => "koral2323");

            RedirectToRouteResult result = controller.Add_New_Comment(new Comment()
            {
                CommentContent = "None", CommentID = 1, TopicID = 1
            }) as RedirectToRouteResult;


            Assert.AreEqual(result.RouteValues["action"], "Go_To_Topic");
            Assert.AreEqual(result.RouteValues["controller"], "Topic");
            Assert.AreEqual(result.RouteValues["id"], 1);
            Assert.AreNotEqual(result.RouteValues["id"], 3);
        }
        public void TopicController_Get_WhenTheIdAndNameRequestedExists_WillReturnATopic()
        {
            TopicController.GetTopicsCollection = () =>
            {
                return(new List <Topic>
                {
                    new Topic {
                        topic = "ASP.NET Core", id = 1, tutorials = (new List <Tutorial>
                        {
                            new Tutorial
                            {
                                name = "ASP.NET Core on Ubuntu",
                                type = "video",
                                url = "http://www.learninghabits.co.za/#/topics/ubuntu"
                            }
                        }).ToArray()
                    },
                    new Topic {
                        topic = "Docker for .NET Developers", id = 2
                    }
                });
            };
            TopicController.Init();
            var controller = new TopicController();

            SetUpHttpRequestParameters(controller);
            var response = controller.Get(1, "ASP.NET Core on Ubuntu");

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            ExpandoObject expando;

            Assert.IsTrue(response.TryGetContentValue(out expando));
            var expandoDict = (IDictionary <string, object>)expando;

            Assert.AreEqual(1, expandoDict["id"]);
            var tutorials = expandoDict["tutorials"] as List <Tutorial>;

            Assert.IsNotNull(tutorials);
            Assert.AreEqual(1, tutorials.Count);
            Assert.AreEqual("ASP.NET Core on Ubuntu", tutorials[0].name);
        }
        public void TopicController_Get_WhenTheRepositoryFindsATopicForTheGivenIdAndTutorialName_WillReturnATopic()
        {
            var topics = new List <Topic>
            {
                new Topic {
                    Name = "ASP.NET Core", Id = 1, Tutorials = new List <Tutorial>
                    {
                        new Tutorial
                        {
                            Name = "ASP.NET Core on Ubuntu",
                            Type = "video",
                            Url  = "http://www.learninghabits.co.za/#/topics/ubuntu"
                        }
                    }
                },
                new Topic {
                    Name = "Docker for .NET Developers", Id = 2
                }
            };

            _topicsRepository.Setup(g => g.Where(It.IsAny <Expression <Func <Topic, bool> > >())).Returns(topics);
            var controller = new TopicController(_topicsRepository.Object);

            SetUpHttpRequestParameters(controller);
            var response = controller.Get(1, "ASP.NET Core on Ubuntu");

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            ExpandoObject expando;

            Assert.IsTrue(response.TryGetContentValue(out expando));
            var expandoDict = (IDictionary <string, object>)expando;

            Assert.AreEqual(1, expandoDict["id"]);
            var tutorials = expandoDict["tutorials"] as IEnumerable <dynamic>;

            Assert.IsNotNull(tutorials);
            var tutorialArray = tutorials.ToArray();

            Assert.AreEqual(1, tutorialArray.Length);
            Assert.AreEqual("ASP.NET Core on Ubuntu", ((IDictionary <string, object>)tutorialArray[0])["name"]);
        }
Exemple #24
0
        internal static bool IsLocked(long threadid)
        {
            bool          result = true;
            SqlConnection con    = new SqlConnection(Program.Configuration["connectionStrings:splashConString"]);

            con.Open();
            SqlCommand    command = new SqlCommand("SELECT threads.locked, threads.topicid FROM threads WHERE threadid = " + threadid, con);
            SqlDataReader reader  = command.ExecuteReader();

            if (reader.Read())
            {
                result = reader.GetBoolean(0);
            }
            if (!result)
            {
                result = TopicController.IsLocked(reader.GetInt32(1));
            }
            reader.Dispose();
            con.Close();
            return(result);
        }
Exemple #25
0
        public TopicControllerTest(Fixed.Fixture fixture)
        {
            this.addTopicUseCase     = fixture.Container.Resolve <IAddTopicUseCase>();
            this.addCategoryUseCase  = fixture.Container.Resolve <IAddCategoryUseCase>();
            this.updateTopicUseCase  = fixture.Container.Resolve <IUpdateTopicUseCase>();
            this.removeTopicUseCase  = fixture.Container.Resolve <IRemoveTopicUseCase>();
            this.getAllTopicUseCase  = fixture.Container.Resolve <IGetAllTopicUseCase>();
            this.getByIdTopicUseCase = fixture.Container.Resolve <IGetByIdTopicUseCase>();
            this.category            = new Category("Teste1");
            this.topic           = new Topic("Topic1", category);
            this.guid            = new Guid();
            this.topicController = new TopicController(addTopicUseCase,
                                                       getAllTopicUseCase,
                                                       getByIdTopicUseCase,
                                                       updateTopicUseCase,
                                                       removeTopicUseCase,
                                                       getByIdCategoryUseCase,
                                                       getByIdUserUseCase

                                                       );
        }
        public void TopicController_Put_WhenTheTopicIsUpdatedSuccessfully_WillReturnAnOKStatusAndASuccessMessage()
        {
            var controller = new TopicController(_topicsRepository.Object);

            SetUpHttpRequestParameters(controller);
            var response = controller.Put(new Topic
            {
                Name      = "Visual Studio on a Mac",
                Tutorials = new List <Tutorial> {
                }
            });

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            ExpandoObject expando;

            Assert.IsTrue(response.TryGetContentValue(out expando));
            var expandoDict = (IDictionary <string, object>)expando;

            Assert.AreEqual("topic is updated successfully", expandoDict["message"]);
            _topicsRepository.Verify(t => t.Update(It.IsAny <Topic>()), Times.Once());
            _topicsRepository.Verify(c => c.Save(), Times.Once());
        }
        private TopicController CreateControllerWithChatyApiService(ChatyApiService chatyApiService)
        {
            var mockUrlHelper       = CreateMockUrlHelper("http://dotnetclub/download/file");
            var chatHistoryImporter = new DefaultChatHistoryImporter(new SystemClock(),
                                                                     mockUrlHelper,
                                                                     _app.GetService <IRepository <FileRecord> >(),
                                                                     _app.GetService <IRepository <WeChatAccount> >(),
                                                                     _app.GetService <IFileSystem>(),
                                                                     _app.GetService <ICurrentUser>(),
                                                                     chatyApiService);

            var httpContext = new DefaultHttpContext
            {
                User = _app.User, RequestServices = _app.ApplicationServices
            };
            var topicController = new TopicController(
                _app.GetService <IRepository <Topic> >(),
                _app.GetService <ITopicService>(),
                _app.GetService <ILogger <TopicController> >(),
                chatHistoryImporter,
                _app.GetService <IRepository <Reply> >(),
                _app.GetService <IRepository <WeChatAccount> >(),
                chatyApiService)
                                  .WithHttpContext(httpContext);

            topicController.Url = mockUrlHelper;

            _app.GetService <IHttpContextAccessor>().HttpContext = httpContext;
            return(topicController);


            IUrlHelper CreateMockUrlHelper(string fileLink)
            {
                var urlHelper = new Mock <IUrlHelper>();

                urlHelper.Setup(url => url.Action(It.IsAny <UrlActionContext>())).Returns(fileLink);
                return(urlHelper.Object);
            }
        }
Exemple #28
0
        protected T GetController <T>() where T : PluginController
        {
            PluginController controller;

            if (typeof(T) == typeof(DisciplineController))
            {
                controller = new DisciplineController(this.DisciplineStorage);
            }
            else if (typeof(T) == typeof(ChapterController))
            {
                controller = new ChapterController(this.DisciplineStorage);
            }
            else if (typeof(T) == typeof(TopicController))
            {
                controller = new TopicController(this.DisciplineStorage);
            }
            else if (typeof(T) == typeof(CurriculumController))
            {
                controller = new CurriculumController(this.CurriculumStorage);
            }
            else if (typeof(T) == typeof(CurriculumChapterController))
            {
                controller = new CurriculumChapterController(this.CurriculumStorage);
            }
            else if (typeof(T) == typeof(CurriculumChapterTopicController))
            {
                controller = new CurriculumChapterTopicController(this.CurriculumStorage);
            }
            else
            {
                throw new NotImplementedException();
            }

            var mocks = new ContextMocks(controller);

            mocks.RouteData.Values["action"]     = "Index";
            mocks.RouteData.Values["controller"] = typeof(T).Name;
            return((T)controller);
        }
        public async Task ValidPostRequestToTopicSubscriberResourceCreatesSubscription()
        {
            var mockSubscriptionTrackingService = new Mock <ISubscriptionTrackingService>();

            mockSubscriptionTrackingService.Setup(sts =>
                                                  sts.AddSubscription(It.IsAny <TopicName>(), It.IsAny <Uri>(), It.IsAny <TimeSpan>(),
                                                                      It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(true));

            var topics     = new TopicName[] { "topic-1", "topic-2", "topic-3" };
            var controller = new TopicController(mockSubscriptionTrackingService.Object, topics);

            var mockRequest          = new Mock <IHttpResourceRequest>();
            var encodedSubscriberUri = new UrlEncoder().Encode("http://example.com/platibus");
            var requestUri           = new UriBuilder
            {
                Scheme = "http",
                Host   = "localhost",
                Path   = "/platibus/topic/topic-1/subscriber",
                Query  = string.Format("uri={0}&ttl=3600", encodedSubscriberUri)
            }.Uri;

            mockRequest.Setup(r => r.HttpMethod).Returns("POST");
            mockRequest.Setup(r => r.Url).Returns(requestUri);
            mockRequest.Setup(r => r.QueryString).Returns(new NameValueCollection
            {
                { "uri", "http://example.com/platibus" },
                { "ttl", "3600" }
            });

            var mockResponse = new Mock <IHttpResourceResponse>();

            await controller.Process(mockRequest.Object, mockResponse.Object, new[] { "topic-1", "subscriber", encodedSubscriberUri });

            mockResponse.VerifySet(r => r.StatusCode = 200);
            mockSubscriptionTrackingService.Verify(ts => ts.AddSubscription(
                                                       "topic-1", new Uri("http://example.com/platibus"), TimeSpan.FromSeconds(3600),
                                                       It.IsAny <CancellationToken>()));
        }
Exemple #30
0
        public async void CreateTopic_Returns_Ok()
        {
            var request = new SaveTopicViewModel
            {
                Title   = "Test topic",
                ThemeId = Guid.NewGuid()
            };

            var viewModel = new TopicViewModel
            {
                Id = Guid.NewGuid()
            };

            var topicService = new Mock <ITopicService>();

            topicService.Setup(s => s.CreateTopic(request)).ReturnsAsync(viewModel);

            var controller = new TopicController(topicService.Object);

            var result = await controller.CreateTopic(request);

            Assert.Equal(viewModel, result.Value);
        }