package org.hibernate.examples.mapping.property.localed;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.examples.AbstractJpaTest;
import org.junit.Test;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat;
/**
* 다국어 정보를 표현하는 엔티티 {@link org.hibernate.examples.model.AbstractLocaleHibernateEntity}에 대한 테스트
*
* @author 배성혁 sunghyouk.bae@gmail.com
* @since 2013. 12. 3. 오후 4:18
*/
@Slf4j
@Transactional
public class LocaleEntityTest extends AbstractJpaTest {
@PersistenceContext
EntityManager em;
@Test
public void localedEntity() {
SampleLocaleEntity entity = new SampleLocaleEntity();
entity.setTitle("제목");
entity.setDescription("내용");
entity.addLocaleValue(Locale.KOREAN, new SampleLocaleValue("제목", "내용"));
entity.addLocaleValue(Locale.ENGLISH, new SampleLocaleValue("Title", "Body"));
em.persist(entity);
em.flush();
em.clear();
SampleLocaleEntity loaded = em.find(SampleLocaleEntity.class, entity.getId());
assertThat(loaded.getLocaleMap().size()).isEqualTo(2);
assertThat(loaded.getLocaleValue(Locale.KOREAN).getTitle()).isEqualTo("제목");
assertThat(loaded.getLocaleValue(Locale.KOREAN).getDescription()).isEqualTo("내용");
assertThat(loaded.getLocaleValue(Locale.ENGLISH).getTitle()).isEqualTo("Title");
assertThat(loaded.getLocaleValue(Locale.ENGLISH).getDescription()).isEqualTo("Body");
// 없는 Locale 에 대해서는 기본 Locale 정보를 제공합니다.
assertThat(loaded.getLocaleValue(Locale.CHINESE).getTitle()).isEqualTo("제목");
assertThat(loaded.getLocaleValue(Locale.CHINESE).getDescription()).isEqualTo("내용");
}
}