public async void CanSearchTopicByTopicID()
        {
            // Arrange
            var topicId     = "5883a3fa50f5fea2822f21cf";
            var mockResults = new DataEntity.Topic
            {
                Id          = topicId,
                Description = "mockedDescription",
                Notes       = "mockNotes"
            };

            MockTopicCache(mockResults);

            _topicRepository.Setup(t => t.GetTopicAsync(It.IsAny <string>()))
            .ReturnsAsync(mockResults)
            .Verifiable();

            _dataAccessMock.Setup(
                p => p.GetByIdAsync(It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(new List <DataEntity.Topic> {
                mockResults
            })
            .Verifiable();

            // Act
            var results = await _topicControllerMock.GetById(topicId);

            // Assert
            var actualResult = Assert.IsType <ObjectResult>(results);

            Assert.IsType <ResponseData.Topic>(actualResult.Value);
        }
        public async void CanAddTopic()
        {
            var mockResults = new DataEntity.Topic();

            _dataAccessMock.Setup(p => p.AddAsync(mockResults))
            .ReturnsAsync(string.Empty)
            .Verifiable();
            var result = await _topicControllerMock.AddTopic(new ResponseData.TopicIgnoreUniqId());

            var actualResult = Assert.IsType <StatusCodeResult>(result);

            actualResult.StatusCode.Should().Be((int)HttpStatusCode.Created, "Status code should be created");
        }
        private void MockTopicCache(DataEntity.Topic topic)
        {
            var mockResults = new DataEntity.Topic
            {
                Id          = topic.Id,
                Description = topic.Description,
                Notes       = topic.Notes
            };

            _topicCacheMock.Setup(p => p.GetValueFromKeyAsync(
                                      It.IsAny <string>(),
                                      It.IsAny <Func <string, Task <DataEntity.Topic> > >()))
            .ReturnsAsync(mockResults);
        }
        public async void CanAddQuestion()
        {
            var mockTopic = new DataEntity.Topic();

            _topicRepositoryMock.Setup(tr => tr.GetTopicAsync(It.IsAny <string>()))
            .ReturnsAsync(mockTopic);

            var result = await _questionController.Add(new ResponseData.QuestionIgnoreId {
                TopicId = "9765a3fa50f5fea28212ba"
            });

            var actualResult = Assert.IsType <StatusCodeResult>(result);

            Assert.Equal((int)HttpStatusCode.Created, actualResult.StatusCode);
        }
Beispiel #5
0
        public void CanReturnPropertiesAndValueWhenConstantExpressionIsAnObjectInstance()
        {
            var input = new DataEntity.Topic {
                Id          = "mockId",
                Description = "mockDescription"
            };
            var result = Helper.ExtractBindingsAndValues(
                () => new DataEntity.Topic {
                Id = input.Id, Description = input.Description
            });

            result.Should().NotBeNull("Expected properties and values");
            result.Should().ContainKey("Id").WhichValue.ShouldBeEquivalentTo("mockId");
            result.Should().ContainKey("Description").WhichValue.ShouldBeEquivalentTo("mockDescription");
        }
        public async void CanUpdateTopicEntity()
        {
            // Arrange
            DataEntity.Topic returnVal = new DataEntity.Topic {
                Description = "mockUpdateDescription",
                Notes       = "mockUpdateNotes"
            };

            var mockMongoDBCollection = MongoHelper <DataEntity.Topic> .GetMockMongoCollection();

            mockMongoDBCollection.Setup(c =>
                                        c.FindOneAndUpdateAsync <DataEntity.Topic>(
                                            It.IsAny <MongoDB.Driver.FilterDefinition <DataEntity.Topic> >(),
                                            It.IsAny <MongoDB.Driver.UpdateDefinition <DataEntity.Topic> >(),
                                            It.IsAny <FindOneAndUpdateOptions <DataEntity.Topic, DataEntity.Topic> >(),
                                            It.IsAny <CancellationToken>()))
            .ReturnsAsync(returnVal);

            var mockMongoDatabase = MongoHelper <DataEntity.Topic> .GetMockMongoDBInstance();

            mockMongoDatabase.Setup(mdb =>
                                    mdb.GetCollection <DataEntity.Topic>(It.IsAny <string>(),
                                                                         It.IsAny <MongoCollectionSettings>())).Returns(mockMongoDBCollection.Object);

            var dataAccess      = new QuizDataAccess.QuizDataAccess <DataEntity.Topic>(mockMongoDatabase.Object);
            var topicRep        = new TopicRepository(dataAccess, _topicCacheMock.Object);
            var topicController = new TopicController.TopicController(new QuizManager.QuizManager(topicRep, null, null), null);

            var entity = new ResponseData.Topic {
                Description = "mockDescription",
                Notes       = "mockNotes"
            };

            // Act
            var result = await topicController.Update("58e5db28e40cc200151a5ba4", new ResponseData.TopicIgnoreUniqId {
                Description = entity.Description,
                Notes       = entity.Notes
            });

            // Assert
            var statusCode = Assert.IsType <StatusCodeResult>(result);

            statusCode.StatusCode.Should().Be(204, "Should return status code as modified");
        }
        public async void UpdateCanHandleUnavilableResource()
        {
            // Arrange
            DataEntity.Topic returnVal = null;
            var mockMongoDBCollection  = MongoHelper <DataEntity.Topic> .GetMockMongoCollection();

            mockMongoDBCollection.Setup(c =>
                                        c.FindOneAndUpdateAsync <DataEntity.Topic>(
                                            It.IsAny <MongoDB.Driver.FilterDefinition <DataEntity.Topic> >(),
                                            It.IsAny <MongoDB.Driver.UpdateDefinition <DataEntity.Topic> >(),
                                            It.IsAny <FindOneAndUpdateOptions <DataEntity.Topic, DataEntity.Topic> >(),
                                            It.IsAny <CancellationToken>()))
            .ReturnsAsync(returnVal);

            var mockMongoDatabase = MongoHelper <DataEntity.Topic> .GetMockMongoDBInstance();

            mockMongoDatabase.Setup(mdb =>
                                    mdb.GetCollection <DataEntity.Topic>(It.IsAny <string>(),
                                                                         It.IsAny <MongoCollectionSettings>())).Returns(mockMongoDBCollection.Object);

            var dataAccess = new QuizDataAccess.QuizDataAccess <DataEntity.Topic>(mockMongoDatabase.Object);

            MockTopicCache(new DataEntity.Topic {
                Id          = "5883a3fa50f5fea2822f21cf",
                Description = "mockedDescription",
                Notes       = "mockNotes"
            });

            var topicRep         = new TopicRepository(dataAccess, _topicCacheMock.Object);
            var topicController  = new TopicController.TopicController(new QuizManager.QuizManager(topicRep, null, null), null);
            var jsonPatchRequest = new JsonPatchDocument <ResponseData.TopicIgnoreUniqId>();

            jsonPatchRequest.Add((q) => q.Description, "mockDescriptionToUpdate");

            // Act
            var result = await topicController.UpdateTopic("58e5db28e40cc200151a5ba4", jsonPatchRequest);

            // Assert
            var statusCode = Assert.IsType <StatusCodeResult>(result);

            statusCode.StatusCode.Should().Be(304, "Should return status code as modified");
        }
        public async void CanPartialUpdateTopicNotes()
        {
            // Arrange
            var expectedResult = new DataEntity.Topic {
                Id          = "5883a3fa50f5fea2822f21cf",
                Description = "mockedDescription",
                Notes       = "mockNotesDescriptionForUpdate"
            };

            _dataAccessMock.Setup(dal => dal.Update <DataEntity.Topic>(
                                      It.IsAny <string>(), It.IsAny <Expression <Func <DataEntity.Topic> > >()))
            .ReturnsAsync(expectedResult)
            .Verifiable();

            MockTopicCache(new DataEntity.Topic {
                Id          = "5883a3fa50f5fea2822f21cf",
                Description = "mockedDescription",
                Notes       = "mockNotes"
            });

            var topicRep        = new TopicRepository(_dataAccessMock.Object, _topicCacheMock.Object);
            var topicController = new TopicController.TopicController(
                new QuizManager.QuizManager(topicRep, null, null), null);

            var jsonPatchRequest = new JsonPatchDocument <ResponseData.TopicIgnoreUniqId>();

            jsonPatchRequest.Replace((q) => q.Notes, expectedResult.Notes);

            // Act
            var result = await topicController.UpdateTopic("mockId", jsonPatchRequest);

            // Assert
            var updatedResult = Assert.IsAssignableFrom <ResponseData.Topic>(((ObjectResult)(result)).Value);

            updatedResult.Notes.Should().BeEquivalentTo("mockNotesDescriptionForUpdate");
            updatedResult.Description.Should().BeEquivalentTo("mockedDescription");
            updatedResult.Id.Should().BeEquivalentTo("5883a3fa50f5fea2822f21cf");
        }
        public async void CanUpdateQuestion()
        {
            // Arrange
            const string topicId     = "5782a3fa50f5fea2822f21cf";
            const string description = "update Questions";
            const string notes       = "testing question udpate";

            // Mock data entity
            var questionEntityReturnVal = new DataEntity.Question
            {
                TopicId     = topicId,
                Description = description,
                Notes       = notes
            };
            var topicEntityReturnVal = new DataEntity.Topic
            {
                Id          = topicId,
                Description = "topic description",
                Notes       = "topic notes"
            };


            // mongoDB
            var mockMongoDBTopic = MockMongoDatabase <DataEntity.Topic>(topicEntityReturnVal,
                                                                        new List <DataEntity.Topic> {
                new DataEntity.Topic()
            });

            var mockMongoDBQuestion = MockMongoDatabase <DataEntity.Question>(questionEntityReturnVal, new List <DataEntity.Question> {
                new DataEntity.Question()
            });


            var dataAccessTopicObject    = new QuizDataAccess.QuizDataAccess <DataEntity.Topic>(mockMongoDBTopic.Object);
            var dataAccessQuestionObject = new QuizDataAccess.QuizDataAccess <DataEntity.Question>(mockMongoDBQuestion.Object);

            // Cache
            MockQuestionCache(new List <DataEntity.Question> {
                new DataEntity.Question()
            });
            MockTopicCache(new List <DataEntity.Topic> {
                new DataEntity.Topic()
            });

            // Repository's
            var topicRepository    = new TopicRepository(dataAccessTopicObject, _topicCacheMock.Object);
            var questionRepository = new QuestionRepository(dataAccessQuestionObject, _questionsCacheMock.Object);

            var manager            = new QuizManager.QuizManager(topicRepository, questionRepository, null);
            var questionController = new QuestionController(manager);

            // Act
            var result = await questionController.Update("5883a3fa50f5fea2822f21cf",
                                                         new ResponseData.QuestionIgnoreId
            {
                TopicId     = topicId,
                Description = description,
                Notes       = notes
            });

            // Assert
            var statusCode = Assert.IsType <NoContentResult>(result);

            statusCode.Should().NotBeNull("Expected a valid status code");
            statusCode.StatusCode.Should().Be((int)HttpStatusCode.NoContent);
        }