private void ValidateUpdate(string name, SwCharacter character) { if (!_validator.IsValidUpdate(name, character)) { throw new InvalidOperationException(); } }
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(); }
public void CreateCharacter_ShouldPassCreateToRepository_GivenCharacterToCreate() { // Arrange var character = new SwCharacter { Name = "Foo", Planet = "Bar" }; // Act _serviceUnderTest.CreateCharacter(character); // Assert _repository.Received(1).Create(character); }
public ActionResult Put([FromRoute] string key, [FromBody] SwCharacter character) { var name = Decode(key); try { _charactersService.UpdateCharacter(name, character); return(NoContent()); } catch (InvalidOperationException) { return(BadRequest()); } }
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); }
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); }
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); }
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); }
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)); }
public void Post([FromBody] SwCharacter newCharacter) { _charactersService.CreateCharacter(newCharacter); }
public void UpdateCharacter(string name, SwCharacter character) { ValidateUpdate(name, character); _repository.Update(name, character); }
public void CreateCharacter(SwCharacter newCharacter) { _repository.Create(newCharacter); }
public void ValidateUpdate_ReturnsTrue_WhenNameMatchesUpdatedObject() { var character = new SwCharacter { Name = "0", Planet = "Mars" }; }