Exemple #1
0
 private void ValidateUpdate(string name, SwCharacter character)
 {
     if (!_validator.IsValidUpdate(name, character))
     {
         throw new InvalidOperationException();
     }
 }
Exemple #2
0
        public async Task PutCharater_ShouldUpdateCharacter_GivenNameAndCharacterObject()
        {
            // Arrange
            var charactersBefore = await GetCharactersCount();

            var character = new SwCharacter
            {
                Name     = "Luke Skywalker",
                Episodes = new[] { "NEWHOPE", "EMPIRE", "JEDI" },
                Friends  = new[] { "Han Solo", "Leia Organa", "C-3PO", "R2-D2" },
                Planet   = "Whatever"
            };
            var requestContent = GetJsonContent(character);
            var requestUri     = $@"/characters/{HttpUtility.UrlEncode(character.Name)}";

            // Act
            var httpResponse = await _client.PutAsync(requestUri,
                                                      requestContent);

            httpResponse.EnsureSuccessStatusCode();

            // Assert
            httpResponse.StatusCode.Should().Be(204);
            var charactersAfter = await GetAllCharacters();

            charactersAfter.Count().Should().Be(charactersBefore);
            var verificationResponse = await UnpackResponse <SwCharacter>(await _client.GetAsync(requestUri));

            verificationResponse.Name.Should().Be(character.Name);
            verificationResponse.Episodes.Should().BeEquivalentTo(character.Episodes);
            verificationResponse.Friends.Should().BeEquivalentTo(character.Friends);
            verificationResponse.Planet.Should().Be(character.Planet);
        }
        public void Create(SwCharacter character)
        {
            var newEntity = _mapper.Map <Character>(character);

            _dbContext.Characters.Add(newEntity);
            _dbContext.SaveChanges(); // we could switch to async API all the way up
            // TODO take care to add also episodes and friends, for demo this will have to do
        }
        public void Update(string name, SwCharacter character)
        {
            var toUpdate = _dbContext.Characters.Where(u => u.Name == name).Single();

            toUpdate.Planet = character.Planet;
            // again take care to update relations after demo
            _dbContext.Characters.Update(toUpdate);
            _dbContext.SaveChanges();
        }
Exemple #5
0
        public void CreateCharacter_ShouldPassCreateToRepository_GivenCharacterToCreate()
        {
            // Arrange
            var character = new SwCharacter {
                Name = "Foo", Planet = "Bar"
            };

            // Act
            _serviceUnderTest.CreateCharacter(character);

            // Assert
            _repository.Received(1).Create(character);
        }
Exemple #6
0
        public ActionResult Put([FromRoute] string key, [FromBody] SwCharacter character)
        {
            var name = Decode(key);

            try
            {
                _charactersService.UpdateCharacter(name, character);

                return(NoContent());
            }
            catch (InvalidOperationException)
            {
                return(BadRequest());
            }
        }
Exemple #7
0
        public void UpdateCharacter_ShouldThrowInvalidOperationException_GivenMismatchedCharacterToCreateAndItsKey()
        {
            // Arrange
            var character = new SwCharacter {
                Name = "0", Planet = "Mars"
            };
            var name = "1";

            _validator.IsValidUpdate(name, character).Returns(false);

            // Act
            Assert.Throws <InvalidOperationException>(() => _serviceUnderTest.UpdateCharacter(name, character));

            // Assert
            _repository.Received(0).Update(name, character);
        }
Exemple #8
0
        public void UpdateCharacter_ShouldPassUpdateToRepository_GivenCharacterToCreateAndItsKey()
        {
            // Arrange
            var character = new SwCharacter {
                Name = "0", Planet = "Mars"
            };
            var name = "0";

            _validator.IsValidUpdate(name, character).Returns(true);

            // Act
            _serviceUnderTest.UpdateCharacter(name, character);

            // Assert
            _repository.Received(1).Update(name, character);
        }
Exemple #9
0
        public async Task PutCharater_ShouldReturn400_GivenMismatchedNameAndCharacterObject()
        {
            // Arrange
            var character = new SwCharacter
            {
                Name     = "Luke Skywalker",
                Episodes = new[] { "NEWHOPE", "EMPIRE", "JEDI" },
                Friends  = new[] { "Luke Skywalker", "Leia Organa", "R2-D2" },
                Planet   = "Whatever"
            };
            var requestContent = GetJsonContent(character);
            var requestUri     = $@"/characters/{HttpUtility.UrlEncode("Han Solo")}";

            // Act
            var httpResponse = await _client.PutAsync(requestUri,
                                                      requestContent);

            // Assert
            httpResponse.StatusCode.Should().Be(400);
        }
Exemple #10
0
        public async Task GetCharater_ShouldGetCharacterByName_GivenValidName()
        {
            // Arrange
            var character = new SwCharacter
            {
                Name     = "Han Solo",
                Episodes = new[] { "NEWHOPE", "EMPIRE", "JEDI" },
                Friends  = new[] { "Luke Skywalker", "Leia Organa", "R2-D2" }
            };

            // Act
            string requestUri   = $@"/characters/{HttpUtility.UrlEncode(character.Name)}";
            var    httpResponse = await _client.GetAsync(requestUri);

            // Assert
            httpResponse.EnsureSuccessStatusCode();
            var response = await UnpackResponse <SwCharacter>(httpResponse);

            response.Name.Should().Be(character.Name);
            response.Episodes.Should().BeEquivalentTo(character.Episodes);
            response.Friends.Should().BeEquivalentTo(character.Friends);
        }
Exemple #11
0
        public async Task PostCharater_ShouldAddNewCharacter_GivenCharacterObject()
        {
            // Arrange
            var charactersBefore = await GetCharactersCount();

            var newCharacter = new SwCharacter
            {
                Name     = "Rey",
                Episodes = new[] { "FORCE_AWAKE", "LAST_JEDI", "SKYWALKER" },
                Friends  = new string[] { }
            };
            var requestContent = GetJsonContent(newCharacter);

            // Act
            var httpResponse = await _client.PostAsync($@"/characters", requestContent);

            // Assert
            httpResponse.EnsureSuccessStatusCode();
            var charactersAfter = await GetAllCharacters();

            charactersAfter.Count().Should().Be(charactersBefore + 1);
            charactersAfter.Where(r => r.Name == newCharacter.Name).Count().Should().Be(1);
        }
 public bool IsValidUpdate(string name, SwCharacter character)
 {
     return(string.Equals(name, character.Name));
 }
Exemple #13
0
 public void Post([FromBody] SwCharacter newCharacter)
 {
     _charactersService.CreateCharacter(newCharacter);
 }
Exemple #14
0
 public void UpdateCharacter(string name, SwCharacter character)
 {
     ValidateUpdate(name, character);
     _repository.Update(name, character);
 }
Exemple #15
0
 public void CreateCharacter(SwCharacter newCharacter)
 {
     _repository.Create(newCharacter);
 }
 public void ValidateUpdate_ReturnsTrue_WhenNameMatchesUpdatedObject()
 {
     var character = new SwCharacter {
         Name = "0", Planet = "Mars"
     };
 }