-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ From Language |
+ Original Text |
+ To Language |
+ Status |
+ Translated Text |
+
+
+
+
-
-
List of random messages:
-
-
+
+ |
+ |
+ |
+ |
+ |
+
+
+
+
+
+
diff --git a/src/test/java/com/unbabel/challenge/controller/IndexControllerTest.java b/src/test/java/com/unbabel/challenge/controller/IndexControllerTest.java
deleted file mode 100644
index f6049f8..0000000
--- a/src/test/java/com/unbabel/challenge/controller/IndexControllerTest.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.unbabel.challenge.controller;
-
-import static org.junit.Assert.*;
-
-public class IndexControllerTest {
-
-}
\ No newline at end of file
diff --git a/src/test/java/com/unbabel/challenge/controller/UnbabelTranslationControllerTest.java b/src/test/java/com/unbabel/challenge/controller/UnbabelTranslationControllerTest.java
new file mode 100644
index 0000000..6cbeaac
--- /dev/null
+++ b/src/test/java/com/unbabel/challenge/controller/UnbabelTranslationControllerTest.java
@@ -0,0 +1,59 @@
+package com.unbabel.challenge.controller;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@AutoConfigureMockMvc
+public class UnbabelTranslationControllerTest
+{
+ @Autowired
+ private MockMvc mockMvc;
+
+ @Test
+ public void shouldReturnIndexPage() throws Exception{
+ mockMvc.perform(get("/"))
+ .andExpect(view().name("index"))
+ .andExpect(model().attributeExists("availableSourcelanguagues", "translationsEntries"))
+ .andDo(MockMvcResultHandlers.print())
+ .andExpect(status().isOk())
+ .andReturn();
+ }
+
+ @Test
+ public void shouldReturnAvailableTargetLanguagesHTML() throws Exception{
+ mockMvc.perform(get("/targetlanguages/en"))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType("text/html;charset=UTF-8"))
+ .andExpect(model().attributeExists("targetLanguages"));
+ }
+
+ @Test
+ public void shouldReturnInfoAboutCreatedTranslationHTML() throws Exception{
+ mockMvc.perform(post("/translate")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content("{ \"text\": \"Hello, world\", \"source_language\": \"en\", \"target_language\": \"pt\"}")
+ .accept(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType("text/html;charset=UTF-8"))
+ .andExpect(model().attributeExists("translationEntryRow"));
+ }
+
+
+
+}
diff --git a/src/test/java/com/unbabel/challenge/facade/UnbabelTranslationFacadeTest.java b/src/test/java/com/unbabel/challenge/facade/UnbabelTranslationFacadeTest.java
new file mode 100644
index 0000000..cc73633
--- /dev/null
+++ b/src/test/java/com/unbabel/challenge/facade/UnbabelTranslationFacadeTest.java
@@ -0,0 +1,5 @@
+package com.unbabel.challenge.facade;
+
+public class UnbabelTranslationFacadeTest
+{
+}
diff --git a/src/test/java/com/unbabel/challenge/repositories/MessageRepositoryTest.java b/src/test/java/com/unbabel/challenge/repositories/MessageRepositoryTest.java
deleted file mode 100644
index 76399e4..0000000
--- a/src/test/java/com/unbabel/challenge/repositories/MessageRepositoryTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.unbabel.challenge.repositories;
-
-import org.junit.After;
-import org.junit.Before;
-
-import static org.junit.Assert.*;
-
-public class MessageRepositoryTest {
-
- @Before
- public void setUp() throws Exception {
- }
-
- @After
- public void tearDown() throws Exception {
- }
-}
\ No newline at end of file
diff --git a/src/test/java/com/unbabel/challenge/repositories/TranslationRepositoryTest.java b/src/test/java/com/unbabel/challenge/repositories/TranslationRepositoryTest.java
new file mode 100644
index 0000000..5a4f0cc
--- /dev/null
+++ b/src/test/java/com/unbabel/challenge/repositories/TranslationRepositoryTest.java
@@ -0,0 +1,76 @@
+package com.unbabel.challenge.repositories;
+
+import com.unbabel.challenge.model.TranslationModel;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringRunner.class)
+@DataJpaTest
+public class TranslationRepositoryTest
+{
+ @Autowired
+ TestEntityManager entityManager;
+
+ @Autowired
+ TranslationRepository translationRepository;
+
+ TranslationModel translation1, translation2, translation3;
+
+ @Before
+ public void setTestData(){
+ translation1 = new TranslationModel();
+ translation1.setUid("1234");
+ translation1.setSourceLanguage("en");
+ translation1.setTargetLanguage("fr");
+ translation1.setText("Hello World");
+
+ translation2 = new TranslationModel();
+ translation2.setUid("12345");
+ translation2.setSourceLanguage("en");
+ translation2.setTargetLanguage("fr");
+ translation2.setText("Hello World");
+
+ translation3 = new TranslationModel();
+ translation3.setUid("12346");
+ translation3.setSourceLanguage("en");
+ translation3.setTargetLanguage("fr");
+ translation3.setText("Hello World");
+ }
+
+ @Test
+ public void should_find_no_customers_if_repository_is_empty(){
+ Iterable
translations = translationRepository.findAll();
+
+ assertThat(translations).isEmpty();
+ }
+
+ @Test
+ public void should_store_a_translation() {
+ translationRepository.save(translation1);
+
+ assertThat(translation1).hasFieldOrPropertyWithValue("uid", "1234");
+ assertThat(translation1).hasFieldOrPropertyWithValue("sourceLanguage", "en");
+ assertThat(translation1).hasFieldOrPropertyWithValue("targetLanguage", "fr");
+ assertThat(translation1).hasFieldOrPropertyWithValue("text", "Hello World");
+ }
+
+ @Test
+ public void should_find_all_translations() {
+ entityManager.persist(translation1);
+ entityManager.persist(translation2);
+ entityManager.persist(translation3);
+
+ Iterable customers = translationRepository.findAll();
+
+ assertThat(customers).hasSize(3).contains(translation1, translation2, translation3);
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/test/java/com/unbabel/challenge/selenium/FrontEndTest.java b/src/test/java/com/unbabel/challenge/selenium/FrontEndTest.java
new file mode 100644
index 0000000..fde1184
--- /dev/null
+++ b/src/test/java/com/unbabel/challenge/selenium/FrontEndTest.java
@@ -0,0 +1,38 @@
+package com.unbabel.challenge.selenium;
+
+import org.fluentlenium.adapter.FluentTest;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.phantomjs.PhantomJSDriver;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class FrontEndTest extends FluentTest
+{
+ @Value("${local.server.port}")
+ private int serverPort;
+
+ private WebDriver webDriver = new PhantomJSDriver();
+
+ @Override
+ public WebDriver getDefaultDriver() {
+ return webDriver;
+ }
+
+ private String getUrl() {
+ return "http://localhost:" + serverPort;
+ }
+
+ @Test
+ public void hasPageTitle() {
+ goTo(getUrl());
+ assertThat(find(".page-header").getText()).isEqualTo("A checklist");
+ }
+
+}
diff --git a/src/test/java/com/unbabel/challenge/service/LanguageServiceTest.java b/src/test/java/com/unbabel/challenge/service/LanguageServiceTest.java
new file mode 100644
index 0000000..0463620
--- /dev/null
+++ b/src/test/java/com/unbabel/challenge/service/LanguageServiceTest.java
@@ -0,0 +1,100 @@
+package com.unbabel.challenge.service;
+
+import com.unbabel.challenge.configuration.beans.ApiRequestBuilderUtil;
+import com.unbabel.challenge.configuration.beans.SessionAttributes;
+import com.unbabel.challenge.dto.languages.AvailableLanguagesDTO;
+import com.unbabel.challenge.dto.languages.SourceLanguageDTO;
+import com.unbabel.challenge.dto.languages.TargetLanguageDTO;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.List;
+
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class LanguageServiceTest
+{
+ @Mock
+ RestTemplate restTemplate;
+
+ @Mock
+ ApiRequestBuilderUtil apiRequestBuilder;
+
+ @Spy
+ SessionAttributes sessionAttributes;
+
+ @Spy
+ AvailableLanguagesDTO availableLanguagesDTO;
+
+ @Spy
+ HashMap dummySessionAttributes;
+
+ @Mock
+ HttpHeaders httpHeaders;
+
+ @Mock
+ ResponseEntity responseEntity;
+
+ @InjectMocks
+ LanguageServiceImpl languageServiceImpl;
+
+
+ @Test
+ public void should_return_languages_from_session_attribute()
+ {
+ dummySessionAttributes.put("availableLanguages", availableLanguagesDTO);
+
+ when(sessionAttributes.getAttributes()).thenReturn(dummySessionAttributes);
+ AvailableLanguagesDTO result = languageServiceImpl.fetchAvailableLanguages();
+ assertThat(result, notNullValue());
+ assertThat(result, is(availableLanguagesDTO));
+ }
+
+ @Test
+ public void should_return_languages_from_api_call(){
+ when(apiRequestBuilder.buildLanguagueApiUrl()).thenReturn("https://sandbox.unbabel.com/tapi/v2/language_pair/");
+ when(apiRequestBuilder.buildBaseHttpHeader()).thenReturn(httpHeaders);
+
+
+ when(restTemplate.exchange(anyString(), any(HttpMethod.class), any(HttpEntity.class), eq(AvailableLanguagesDTO.class)))
+ .thenReturn(responseEntity);
+ when(responseEntity.getStatusCode()).thenReturn(HttpStatus.OK);
+ when(responseEntity.getBody()).thenReturn(availableLanguagesDTO);
+
+ AvailableLanguagesDTO result = languageServiceImpl.fetchAvailableLanguages();
+ assertThat(result, notNullValue());
+ assertThat(result, is(availableLanguagesDTO));
+ }
+
+ @Test
+ public void testFilterAllAvailableSourceLanguages()
+ {
+ List result = languageServiceImpl.filterAllAvailableSourceLanguages(new AvailableLanguagesDTO());
+ }
+
+ @Test
+ public void testFindCompatibleTargetLanguages()
+ {
+ List result = languageServiceImpl.findCompatibleTargetLanguages(new AvailableLanguagesDTO(), "languageCode");
+ }
+
+}
diff --git a/src/test/java/com/unbabel/challenge/service/TranslationServiceTest.java b/src/test/java/com/unbabel/challenge/service/TranslationServiceTest.java
new file mode 100644
index 0000000..55aa537
--- /dev/null
+++ b/src/test/java/com/unbabel/challenge/service/TranslationServiceTest.java
@@ -0,0 +1,5 @@
+package com.unbabel.challenge.service;
+
+public class TranslationServiceTest
+{
+}
diff --git a/src/test/java/com/unbabel/challenge/util/UnbabelApiBuildTest.java b/src/test/java/com/unbabel/challenge/util/UnbabelApiBuildTest.java
new file mode 100644
index 0000000..70ccea3
--- /dev/null
+++ b/src/test/java/com/unbabel/challenge/util/UnbabelApiBuildTest.java
@@ -0,0 +1,5 @@
+package com.unbabel.challenge.util;
+
+public class UnbabelApiBuildTest
+{
+}