package com.thinkbiganalytics.feedmgr.service;
/*-
* #%L
* thinkbig-feed-manager-controller
* %%
* Copyright (C) 2017 ThinkBig Analytics
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.thinkbiganalytics.feedmgr.rest.model.UserProperty;
import com.thinkbiganalytics.metadata.api.extension.UserFieldDescriptor;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import java.util.Map;
import java.util.Set;
public class UserPropertyTransformTest {
/**
* Verify transforming property map to user properties.
*/
@Test
public void toUserProperties() {
// Mock user field descriptors
final UserFieldDescriptor field1 = Mockito.mock(UserFieldDescriptor.class);
Mockito.when(field1.getDescription()).thenReturn("Global field 1");
Mockito.when(field1.getDisplayName()).thenReturn("Test1");
Mockito.when(field1.getOrder()).thenReturn(0);
Mockito.when(field1.getSystemName()).thenReturn("field1");
final UserFieldDescriptor field2 = Mockito.mock(UserFieldDescriptor.class);
Mockito.when(field2.getDescription()).thenReturn("Global field 2");
Mockito.when(field2.getDisplayName()).thenReturn("Test2");
Mockito.when(field2.getOrder()).thenReturn(1);
Mockito.when(field2.isRequired()).thenReturn(true);
Mockito.when(field2.getSystemName()).thenReturn("field2");
final UserFieldDescriptor field3 = Mockito.mock(UserFieldDescriptor.class);
Mockito.when(field3.getDescription()).thenReturn("Category field 1");
Mockito.when(field3.getDisplayName()).thenReturn("Overridden");
Mockito.when(field3.getOrder()).thenReturn(0);
Mockito.when(field3.isRequired()).thenReturn(true);
Mockito.when(field3.getSystemName()).thenReturn("field1");
final UserFieldDescriptor field4 = Mockito.mock(UserFieldDescriptor.class);
Mockito.when(field4.getDescription()).thenReturn("Category field 2");
Mockito.when(field4.getDisplayName()).thenReturn("Test4");
Mockito.when(field4.getOrder()).thenReturn(0);
Mockito.when(field4.getSystemName()).thenReturn("field4");
// Verify user properties
final Map<String, String> properties = ImmutableMap.of("field1", "one", "field2", "two", "field4", "three", "customField", "four");
final Set<UserProperty> userProperties = UserPropertyTransform.toUserProperties(properties, ImmutableSet.of(field2, field1), ImmutableSet.of(field3, field4));
Assert.assertEquals(4, userProperties.size());
final UserProperty[] array = userProperties.toArray(new UserProperty[4]);
Assert.assertEquals("Global field 1", array[0].getDescription());
Assert.assertEquals("Test1", array[0].getDisplayName());
Assert.assertTrue(array[0].isLocked());
Assert.assertEquals(0, array[0].getOrder().intValue());
Assert.assertFalse(array[0].isRequired());
Assert.assertEquals("field1", array[0].getSystemName());
Assert.assertEquals("one", array[0].getValue());
Assert.assertEquals("Global field 2", array[1].getDescription());
Assert.assertEquals("Test2", array[1].getDisplayName());
Assert.assertTrue(array[1].isLocked());
Assert.assertEquals(1, array[1].getOrder().intValue());
Assert.assertTrue(array[1].isRequired());
Assert.assertEquals("field2", array[1].getSystemName());
Assert.assertEquals("two", array[1].getValue());
Assert.assertEquals("Category field 2", array[2].getDescription());
Assert.assertEquals("Test4", array[2].getDisplayName());
Assert.assertTrue(array[2].isLocked());
Assert.assertEquals(2, array[2].getOrder().intValue());
Assert.assertFalse(array[2].isRequired());
Assert.assertEquals("field4", array[2].getSystemName());
Assert.assertEquals("three", array[2].getValue());
Assert.assertNull(array[3].getDescription());
Assert.assertNull(array[3].getDisplayName());
Assert.assertFalse(array[3].isLocked());
Assert.assertNull(array[3].getOrder());
Assert.assertNull(array[3].isRequired());
Assert.assertEquals("customField", array[3].getSystemName());
Assert.assertEquals("four", array[3].getValue());
}
}