POST
- URI for Location Header - CRUD - create
This commit is contained in:
parent
38f86076c2
commit
19aa42941f
@ -2,10 +2,14 @@ package djmil.cashcard;
|
||||
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Optional;
|
||||
|
||||
@RestController
|
||||
@ -28,4 +32,15 @@ public class CashCardController {
|
||||
return ResponseEntity.notFound().build();
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
private ResponseEntity<Void> createCashCard(@RequestBody CashCard newCashCardRequest, UriComponentsBuilder ucb) {
|
||||
CashCard savedCashCard = cashCardRepository.save(newCashCardRequest); // CRUD - Create
|
||||
|
||||
URI locationOfNewCashCard = ucb
|
||||
.path("cashcards/{id}")
|
||||
.buildAndExpand(savedCashCard.id())
|
||||
.toUri();
|
||||
return ResponseEntity.created(locationOfNewCashCard).build();
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,8 @@ import org.springframework.http.ResponseEntity;
|
||||
import com.jayway.jsonpath.DocumentContext;
|
||||
import com.jayway.jsonpath.JsonPath;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@ -45,4 +47,24 @@ class CashcardApplicationTests {
|
||||
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
|
||||
assertThat(response.getBody()).isBlank();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldCreateANewCashCard() {
|
||||
CashCard newCashCard = new CashCard(null, 250.00);
|
||||
ResponseEntity<Void> createResponse = restTemplate.postForEntity("/cashcards", newCashCard, Void.class );
|
||||
|
||||
assertThat(createResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);
|
||||
|
||||
URI locationOfNewCashCard = createResponse.getHeaders().getLocation();
|
||||
ResponseEntity<String> getResponse = restTemplate.getForEntity(locationOfNewCashCard, String.class);
|
||||
assertThat(getResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
// Validate created CashCard JSON
|
||||
DocumentContext documentContext = JsonPath.parse(getResponse.getBody());
|
||||
Number id = documentContext.read("$.id");
|
||||
Double amount = documentContext.read("$.amount");
|
||||
|
||||
assertThat(id).isNotNull();
|
||||
assertThat(amount).isEqualTo(250.00);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user