@Test
  public void should_initialize_entity() throws Exception {

    Class<? extends CompleteBean> beanClass = bean.getClass();

    PropertyMeta nameMeta = new PropertyMeta();
    nameMeta.setEntityClassName("beanClass");
    nameMeta.setType(SIMPLE);
    nameMeta.setGetter(beanClass.getMethod("getName"));

    PropertyMeta friendsMeta = new PropertyMeta();
    friendsMeta.setEntityClassName("beanClass");
    friendsMeta.setType(LAZY_LIST);
    friendsMeta.setGetter(beanClass.getMethod("getFriends"));

    PropertyMeta followersMeta = new PropertyMeta();
    followersMeta.setEntityClassName("beanClass");
    followersMeta.setType(LAZY_SET);
    followersMeta.setGetter(beanClass.getMethod("getFollowers"));

    Set<Method> alreadyLoaded = Sets.newHashSet(friendsMeta.getGetter(), nameMeta.getGetter());

    Map<Method, PropertyMeta> getterMetas =
        ImmutableMap.<Method, PropertyMeta>of(
            nameMeta.getGetter(), nameMeta,
            friendsMeta.getGetter(), friendsMeta,
            followersMeta.getGetter(), followersMeta);

    Map<String, PropertyMeta> allMetas =
        ImmutableMap.<String, PropertyMeta>of(
            "name", nameMeta,
            "friends", friendsMeta,
            "followers", followersMeta);

    EntityMeta entityMeta = new EntityMeta();
    entityMeta.setPropertyMetas(allMetas);
    entityMeta.setGetterMetas(getterMetas);

    when(interceptor.getAlreadyLoaded()).thenReturn(alreadyLoaded);

    initializer.initializeEntity(bean, entityMeta, interceptor);

    assertThat(calledMethods).containsExactly("getFollowers");
  }
  @Test
  public void should_throw_exception_when_error_initializing() throws Exception {
    CompleteBean bean =
        new CompleteBean() {

          public Long getId() {
            throw new RuntimeException();
          }
        };

    PropertyMeta pm = new PropertyMeta();
    pm.setType(PropertyType.LAZY_SIMPLE);
    pm.setGetter(bean.getClass().getMethod("getId"));

    EntityMeta entityMeta = new EntityMeta();
    entityMeta.setPropertyMetas(ImmutableMap.<String, PropertyMeta>of("id", pm));

    entityMeta.setGetterMetas(ImmutableMap.<Method, PropertyMeta>of(pm.getGetter(), pm));

    when(interceptor.getAlreadyLoaded()).thenReturn(new HashSet<Method>());

    exception.expect(AchillesException.class);
    initializer.initializeEntity(bean, entityMeta, interceptor);
  }