package com.sequenceiq.cloudbreak.converter;
import static com.sequenceiq.cloudbreak.common.type.CloudConstants.AWS;
import static com.sequenceiq.cloudbreak.common.type.CloudConstants.GCP;
import static org.junit.Assert.assertEquals;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import java.util.Arrays;
import java.util.Date;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import com.google.common.collect.Lists;
import com.sequenceiq.cloudbreak.TestUtil;
import com.sequenceiq.cloudbreak.api.model.CloudbreakUsageJson;
import com.sequenceiq.cloudbreak.common.type.CbUserRole;
import com.sequenceiq.cloudbreak.domain.CbUser;
import com.sequenceiq.cloudbreak.domain.CloudbreakUsage;
import com.sequenceiq.cloudbreak.service.user.UserDetailsService;
import com.sequenceiq.cloudbreak.service.user.UserFilterField;
public class CloudbreakUsageToJsonConverterTest extends AbstractEntityConverterTest<CloudbreakUsage> {
@InjectMocks
private CloudbreakUsageToJsonConverter underTest;
@Mock
private UserDetailsService userDetailsService;
private CbUser user;
@Before
public void setUp() {
underTest = new CloudbreakUsageToJsonConverter();
user = createCbUser();
MockitoAnnotations.initMocks(this);
}
@Test
public void testConvert() {
// GIVEN
given(userDetailsService.getDetails(anyString(), any(UserFilterField.class))).willReturn(user);
// WHEN
CloudbreakUsageJson result = underTest.convert(getSource());
// THEN
assertEquals(GCP, result.getProvider());
assertEquals("john.smith@example.com", result.getUsername());
assertAllFieldsNotNull(result, Lists.newArrayList("availabilityZone", "duration"));
}
@Test
public void testConvertWithAwsProvider() {
// GIVEN
getSource().setProvider(AWS);
getSource().setRegion("us_east_1");
given(userDetailsService.getDetails(anyString(), any(UserFilterField.class))).willReturn(user);
// WHEN
CloudbreakUsageJson result = underTest.convert(getSource());
// THEN
assertEquals(AWS, result.getProvider());
assertEquals("john.smith@example.com", result.getUsername());
assertAllFieldsNotNull(result, Lists.newArrayList("availabilityZone", "duration"));
}
@Test
public void testConvertWithGcpProvider() {
// GIVEN
getSource().setProvider(GCP);
getSource().setRegion("us_central1");
getSource().setAvailabilityZone("us_central1_a");
given(userDetailsService.getDetails(anyString(), any(UserFilterField.class))).willReturn(user);
// WHEN
CloudbreakUsageJson result = underTest.convert(getSource());
// THEN
assertEquals(GCP, result.getProvider());
assertEquals("john.smith@example.com", result.getUsername());
assertAllFieldsNotNull(result, Lists.newArrayList("availabilityZone", "duration"));
}
@Override
public CloudbreakUsage createSource() {
return TestUtil.gcpCloudbreakUsage(1L);
}
private CbUser createCbUser() {
return new CbUser("dummyUserId", "john.smith@example.com", "dummyAccount",
Arrays.asList(CbUserRole.ADMIN, CbUserRole.USER), "John", "Smith", new Date());
}
}