コード例 #1
0
        public void Validation_Should_PassForValid(string[] answers, string word)
        {
            var model = new AddWordPostModel
            {
                Answers = answers,
                Word    = word
            };

            ValidateObject(model).Count.Should().Be(0,
                                                    $"Answers: \"{string.Join(" ,", answers)}\" and Word: \"{word}\" should pass the validation.");
        }
コード例 #2
0
        public void Validation_Should_FailForInvalid(string[] answers, string word)
        {
            var model = new AddWordPostModel
            {
                Answers = answers,
                Word    = word
            };

            ValidateObject(model).Count.Should().Be(2,
                                                    $"Answers: \"{string.Join(" ,", answers)}\" and Word: \"{word}\" should fail both validations.");
        }
コード例 #3
0
        public void Should_FailValidation(string word, string[] answers)
        {
            var model = new AddWordPostModel
            {
                Answers = answers,
                Word    = word
            };
            var context = new ValidationContext(model, null, null);
            var result  = new List <ValidationResult>();

            var valid = Validator.TryValidateObject(model, context, result, true);

            valid.Should().BeFalse();
        }
コード例 #4
0
        public async Task Should_Error_ForInvalidModelState()
        {
            var data = new AddWordPostModel
            {
                Word    = "Bonjour",
                Answers = new [] { "Hello", "Good Morning" }
            };

            var mockHandler = new MockCommandHandler <AddWordCommand>().ReturnsForAll().Handler;
            var controller  = new WordsController(mockHandler, null);

            controller.ModelState.AddModelError(string.Empty, "Something is wrong!");

            var result = await controller.AddWord(data);

            result.Should().BeOfType <BadRequestObjectResult>();
        }
コード例 #5
0
        public async Task <IActionResult> AddWord([FromBody] AddWordPostModel postData)
        {
            if (!ModelState.IsValid)
            {
                return(new BadRequestObjectResult(ModelState));
            }

            var command = new AddWordCommand(postData.Word, postData.Answers);
            await _addWordCommandHandler.HandleAsync(command);

            var query       = FindItemsQuery.ByWord(postData.Word);
            var queryResult = await _findItemsQueryHandler.QueryAsync(query);

            var createdItem = queryResult.Single();

            string currentUri = Request?.Path ?? "/Words";

            return(new CreatedResult(currentUri.JoinPaths(createdItem.Id.ToString()), createdItem));
        }
コード例 #6
0
        public async Task Should_AddWord(string word, string[] answers)
        {
            var data = new AddWordPostModel
            {
                Word    = word,
                Answers = answers
            };
            var mockCommandHandler = new MockCommandHandler <AddWordCommand>().ReturnsForAll().Handler;
            var mockQueryHandler   = new MockQueryHandler <FindItemsQuery, LearningItem[]>()
                                     .ReturnsForAll(new [] { new LearningItem(word, answers) })
                                     .Handler;
            var controller = new WordsController(mockCommandHandler, mockQueryHandler);

            var result = await controller.AddWord(data);

            result.Should().BeOfType <CreatedResult>();
            var createdResult = (CreatedResult)result;

            createdResult.StatusCode.Should().Be(201);
            createdResult.Location.Should().MatchRegex(@"\/Words\/[{(]?[0-9A-Fa-f]{8}[-]?([0-9A-Fa-f]{4}[-]?){3}[0-9A-Fa-f]{12}[)}]?");
        }