@Test
  public void createAndFindVideoGameEntityAndItsParent() throws Exception {
    PlatformEntity platformEntity = new PlatformEntity();
    String platformName = "I am a platform";
    platformEntity.setPlatformName(platformName);
    Date videoGamedateReleased = new Date();
    String videoGameName = "new title";

    VideoGameEntity videoGameEntity = new VideoGameEntity();
    videoGameEntity.setDateReleased(videoGamedateReleased);
    videoGameEntity.setVideoGameStatusType(VideoGameStatusType.PLAYING);
    videoGameEntity.setVideoGameName(videoGameName);
    videoGameEntity.setPlatformEntity(platformEntity);

    VideoGameEntity savedVideoGameEntity = videoGameService.create(videoGameEntity);

    VideoGameEntity retrievedVideoGameEntity =
        videoGameService.findById(savedVideoGameEntity.getVideoGameId());

    assertThat(
        retrievedVideoGameEntity.getVideoGameId(), is(savedVideoGameEntity.getVideoGameId()));
    assertThat(
        retrievedVideoGameEntity.getVideoGameName(), is(savedVideoGameEntity.getVideoGameName()));
    assertThat(retrievedVideoGameEntity.getVideoGameStatusType(), is(VideoGameStatusType.PLAYING));
    assertThat(retrievedVideoGameEntity.getPlatformEntity().getPlatformName(), is(platformName));
  }
  @Test
  public void createAndFindPlatformEntityAndItsChildren() throws Exception {
    String expectedPlatformName = "platformOne";

    String expectedVideoGameName1 = "Some Awesome title";
    String expectedVideoGameName2 = "Another Awesome title";

    Date dateReleased = new Date();

    PlatformEntity platformEntity = new PlatformEntity();
    platformEntity.setPlatformName(expectedPlatformName);

    VideoGameEntity videoGameEntity1 = new VideoGameEntity();
    videoGameEntity1.setVideoGameName(expectedVideoGameName1);
    videoGameEntity1.setDateReleased(dateReleased);
    videoGameEntity1.setVideoGameStatusType(VideoGameStatusType.COMPLETED);
    videoGameEntity1.setPlatformEntity(platformEntity);

    VideoGameEntity videoGameEntity2 = new VideoGameEntity();
    videoGameEntity2.setVideoGameName(expectedVideoGameName2);
    videoGameEntity2.setDateReleased(dateReleased);
    videoGameEntity2.setVideoGameStatusType(VideoGameStatusType.BACKLOG);
    videoGameEntity2.setPlatformEntity(platformEntity);

    platformEntity.getVideoGameEntities().add(videoGameEntity1);
    platformEntity.getVideoGameEntities().add(videoGameEntity2);

    PlatformEntity savedPlatformEntity = platformService.create(platformEntity);

    assertionsForPlatformEntityAndChildVideoGameEntity(
        expectedPlatformName,
        expectedVideoGameName1,
        expectedVideoGameName2,
        dateReleased,
        savedPlatformEntity);

    PlatformEntity retrievedPlatformEntity =
        platformService.findById(savedPlatformEntity.getPlatformId());

    assertThat(retrievedPlatformEntity.getPlatformId(), is(savedPlatformEntity.getPlatformId()));
    assertionsForPlatformEntityAndChildVideoGameEntity(
        expectedPlatformName,
        expectedVideoGameName1,
        expectedVideoGameName2,
        dateReleased,
        retrievedPlatformEntity);

    List<PlatformEntity> platformEntities = platformService.findAll();

    assertThat(platformEntities.size(), is(3));
    assertionsForPlatformEntityAndChildVideoGameEntity(
        expectedPlatformName,
        expectedVideoGameName1,
        expectedVideoGameName2,
        dateReleased,
        retrievedPlatformEntity);
  }
 private void assertionsForPlatformEntityAndChildVideoGameEntity(
     String expectedPlatformName,
     String expectedVideoGameName1,
     String expectedVideoGameName2,
     Date expectedDateReleased,
     PlatformEntity savedPlatformEntity) {
   assertThat(savedPlatformEntity.getPlatformName(), is(expectedPlatformName));
   assertThat(
       savedPlatformEntity.getVideoGameEntities(),
       IsIterableContainingInAnyOrder.<VideoGameEntity>containsInAnyOrder(
           hasProperty("videoGameName", is(expectedVideoGameName1)),
           hasProperty("dateReleased", is(expectedDateReleased))));
   assertThat(
       savedPlatformEntity.getVideoGameEntities(),
       IsIterableContainingInAnyOrder.<VideoGameEntity>containsInAnyOrder(
           hasProperty("videoGameName", is(expectedVideoGameName2)),
           hasProperty("dateReleased", is(expectedDateReleased))));
 }
  @Test
  public void updatePlatformEntity() throws Exception {
    long existingPlatformId = 22L;
    String updatedPlatformName = "I've updated the name";

    PlatformEntity updatedPlatformEntity = new PlatformEntity();
    updatedPlatformEntity.setPlatformId(existingPlatformId);
    updatedPlatformEntity.setPlatformName(updatedPlatformName);

    PlatformEntity retrievedPlatformEntity = platformService.update(updatedPlatformEntity);

    assertThat(retrievedPlatformEntity.getPlatformId(), is(existingPlatformId));
    assertThat(retrievedPlatformEntity.getPlatformName(), is(updatedPlatformName));
    assertThat(retrievedPlatformEntity.getVideoGameEntities().isEmpty(), is(true));
  }