77import org .junit .Test ;
88
99import java .util .List ;
10+ import java .util .Optional ;
1011
1112import static com .exacttarget .fuelsdk .ETResult .Status .ERROR ;
1213import static com .exacttarget .fuelsdk .ETResult .Status .OK ;
1314import static org .junit .Assert .assertEquals ;
1415import static org .junit .Assert .assertNotNull ;
16+ import static org .junit .Assert .assertTrue ;
1517import static org .junit .Assume .assumeNotNull ;
1618
1719public class ETDataExtensionIntegrationTest {
20+ private static final String DEFAULT_SOURCE_LOCALE = "en" ;
21+ private static final String TARGET_LOCALE = "de-DE" ;
22+ private static final String LANGUAGE_COLUMN_NAME = "User_Language__c" ;
1823
1924 private ETClient client ;
2025
@@ -51,12 +56,12 @@ public void shouldReturnRowsForDataExtensionIfExternalKeyWithoutSpaces() throws
5156 ETDataExtension dataExtension = new ETDataExtension ();
5257 dataExtension .setName (name );
5358 dataExtension .setKey (key );
54- dataExtension .addColumn ("ID" , true );
59+ dataExtension .addColumn (LANGUAGE_COLUMN_NAME , true );
5560
5661 client .create (dataExtension );
5762
5863 ETDataExtensionRow row = new ETDataExtensionRow ();
59- row .setColumn ("ID" , "test ID" );
64+ row .setColumn (LANGUAGE_COLUMN_NAME , DEFAULT_SOURCE_LOCALE );
6065 dataExtension .insert (row );
6166
6267 List <ETDataExtensionRow > rows = dataExtension .select ().getObjects ();
@@ -76,18 +81,18 @@ public void shouldNotInsertRowIfDuplicateKeyIgnoreCase() throws Exception {
7681 ETDataExtension dataExtension = new ETDataExtension ();
7782 dataExtension .setName ("Test name" + RandomStringUtils .random (5 ));
7883 dataExtension .setKey ("Test_key" + RandomUtils .nextInt ());
79- dataExtension .addColumn ("ID" , true );
84+ dataExtension .addColumn (LANGUAGE_COLUMN_NAME , true );
8085
8186 client .create (dataExtension );
8287
8388 ETDataExtensionRow row = new ETDataExtensionRow ();
84- row .setColumn ("ID" , "test-ID" );
89+ row .setColumn (LANGUAGE_COLUMN_NAME , TARGET_LOCALE );
8590 ETResponse <ETDataExtensionRow > response = dataExtension .insert (row );
8691 assertNotNull (response .getRequestId ());
8792 assertEquals (OK , response .getStatus ());
8893
8994 row = new ETDataExtensionRow ();
90- row .setColumn ("ID" , "test-id" );
95+ row .setColumn (LANGUAGE_COLUMN_NAME , TARGET_LOCALE . toLowerCase () );
9196 response = dataExtension .insert (row );
9297 assertNotNull (response .getRequestId ());
9398 assertEquals (ERROR , response .getStatus ());
@@ -101,34 +106,64 @@ public void shouldUpdate() throws Exception {
101106 ETDataExtension dataExtension = new ETDataExtension ();
102107 dataExtension .setName ("Test name" + RandomStringUtils .random (5 ));
103108 dataExtension .setKey ("Test_key" + RandomUtils .nextInt ());
104- dataExtension .addColumn ("ID" , true );
109+ dataExtension .addColumn (LANGUAGE_COLUMN_NAME , true );
105110 dataExtension .addColumn ("test column" );
106111
107112 client .create (dataExtension );
108113
109- ETDataExtensionRow row = new ETDataExtensionRow ();
110- row .setColumn ("ID" , "id" );
111- row .setColumn ("test column" , testColumnValue );
112- ETResponse <ETDataExtensionRow > response = dataExtension .insert (row );
114+ ETDataExtensionRow insertedRow = new ETDataExtensionRow ();
115+ insertedRow .setColumn (LANGUAGE_COLUMN_NAME , DEFAULT_SOURCE_LOCALE );
116+ insertedRow .setColumn ("test column" , testColumnValue );
117+ ETResponse <ETDataExtensionRow > response = dataExtension .insert (insertedRow );
118+ assertNotNull (response .getRequestId ());
119+ assertEquals (OK , response .getStatus ());
120+
121+ insertedRow = new ETDataExtensionRow ();
122+ insertedRow .setColumn (LANGUAGE_COLUMN_NAME , TARGET_LOCALE );
123+ insertedRow .setColumn ("test column" , testColumnValue );
124+ response = dataExtension .insert (insertedRow );
113125 assertNotNull (response .getRequestId ());
114126 assertEquals (OK , response .getStatus ());
115127
116128 List <ETDataExtensionRow > rows = dataExtension .select ().getObjects ();
117129 assertNotNull (rows );
118- assertEquals (1 , rows .size ());
119- assertEquals (testColumnValue , rows .get (0 ).getColumn ("test column" ));
130+ assertEquals (2 , rows .size ());
131+ Optional <ETDataExtensionRow > foundRow = getDataExtensionRowByLanguage (rows , TARGET_LOCALE );
132+ assertTrue (foundRow .isPresent ());
133+ assertEquals (testColumnValue , foundRow .get ().getColumn ("test column" ));
120134
121- row = new ETDataExtensionRow ();
122- row .setColumn ("ID" , "id" );
123- row .setColumn ("test column" , updatedTestColumnValue );
135+ // Do translation scenario
136+ final ETDataExtensionRow row = foundRow .get ();
137+ ETDataExtensionRow updatedRow = new ETDataExtensionRow ();
138+ // Copy all columns except primary key for serialization to Smartling
139+ row .getColumnNames ().stream ().filter (cName -> !"ID" .equalsIgnoreCase (cName )).forEach (cName -> updatedRow .setColumn (cName , row .getColumn (cName )));
140+
141+ // Update with translated value
142+ updatedRow .setColumn ("test column" , updatedTestColumnValue );
124143
125- response = dataExtension .update (row );
144+ // Found existed row for given locale
145+ rows = dataExtension .select ().getObjects ();
146+ foundRow = getDataExtensionRowByLanguage (rows , TARGET_LOCALE );
147+ assertTrue (foundRow .isPresent ());
148+ final ETDataExtensionRow originalRow = foundRow .get ();
149+ // Copy translated columns
150+ updatedRow .getColumnNames ().forEach (cName -> originalRow .setColumn (cName , updatedRow .getColumn (cName )));
151+
152+ // Update row in sfmc
153+ response = dataExtension .update (originalRow );
126154 assertNotNull (response .getRequestId ());
127155 assertEquals (OK , response .getStatus ());
128156
129157 rows = dataExtension .select ().getObjects ();
130158 assertNotNull (rows );
131- assertEquals (1 , rows .size ());
132- assertEquals (updatedTestColumnValue , rows .get (0 ).getColumn ("test column" ));
159+ assertEquals (2 , rows .size ());
160+ foundRow = getDataExtensionRowByLanguage (rows , TARGET_LOCALE );
161+ assertTrue (foundRow .isPresent ());
162+ assertEquals (updatedTestColumnValue , foundRow .get ().getColumn ("test column" ));
163+ }
164+
165+ private static Optional <ETDataExtensionRow > getDataExtensionRowByLanguage (List <ETDataExtensionRow > rows , String language )
166+ {
167+ return rows .stream ().filter (row -> language .equals (row .getColumn (LANGUAGE_COLUMN_NAME ))).findFirst ();
133168 }
134169}
0 commit comments