Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

/*
* GenericServiceTest.java
* Copyright (c) 2017 Veterans Affairs.
*/
package gov.va.oneconsult.seoc.api.service;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

import gov.va.oneconsult.seoc.api.controller.SeocObjectGenerator;
import gov.va.oneconsult.seoc.api.model.BillingCode;
import gov.va.oneconsult.seoc.api.model.Hptc;
import gov.va.oneconsult.seoc.api.model.SeocConfig;
import gov.va.oneconsult.seoc.api.repository.BillingCodeRepository;
import gov.va.oneconsult.seoc.api.repository.HptcRepository;
import gov.va.oneconsult.seoc.api.repository.SeocConfigRepository;
import gov.va.oneconsult.seoc.api.service.impl.GenericServiceImpl;
import gov.va.oneconsult.seoc.api.util.Constants;


/**
*
* @author AbleVets
*
*/
public class GenericServiceTest
{
@Mock
private SeocConfigRepository seocConfigRepository;

@Mock
private BillingCodeRepository billingCodeRepository;

@Mock
private HptcRepository hptcRepository;

@InjectMocks
private GenericService genericService = new GenericServiceImpl();

@Before
public void setUp()
{

MockitoAnnotations.initMocks(this);
}

/**
* Description: Get SeocConfiguration to check when data is not available
*/
@Test
public void getCurrentSeocConfigVersion_dataAvailable()
{
SeocConfig seocConfig = SeocObjectGenerator.getSeocConfig(Constants.PROGRAM_NAME, 1);
List<SeocConfig> configurations = new ArrayList<SeocConfig>();
configurations.add(seocConfig);

Mockito.when(seocConfigRepository.findAll()).thenReturn(configurations);

int version = genericService.getCurrentSeocConfigVersion();
assertThat(version).isEqualTo(1);

Mockito.verify(seocConfigRepository, Mockito.times(1)).findAll();
Mockito.verifyNoMoreInteractions(seocConfigRepository);
}

/**
* Description: Get Seoc Configuration
*/
@Test
public void getCurrentSeocConfigVersion_dataNotAvailable()
{
Set<SeocConfig> configurations = null;

Mockito.when(seocConfigRepository.findAll()).thenReturn(configurations);

int version = genericService.getCurrentSeocConfigVersion();
assertThat(version).isEqualTo(0);

Mockito.verify(seocConfigRepository, Mockito.times(1)).findAll();
Mockito.verifyNoMoreInteractions(seocConfigRepository);
}



@Test
public void getAllHptcReturnsData()
{
Hptc hptc1 = SeocObjectGenerator.getHptc("hptc1", "TYPE2", "SPEC2", "GROUP2");
Hptc hptc2 = SeocObjectGenerator.getHptc("hptc2", "TYPE2", "SPEC2", "GROUP2");

Set<Hptc> hptcsExpected = new HashSet<Hptc>();

hptcsExpected.add(hptc1);
hptcsExpected.add(hptc2);

Mockito.when(hptcRepository.findAllHptcs()).thenReturn(hptcsExpected);

Set<Hptc> hptcsActual = genericService.getAllHptc();

assertThat(hptcsExpected).isEqualTo(hptcsActual);

Mockito.verify(hptcRepository, Mockito.times(1)).findAllHptcs();
Mockito.verifyNoMoreInteractions(hptcRepository);

}

@Test
public void getAllHptc_emptyList()
{

Set<Hptc> hptcsExpected = new HashSet<Hptc>();

Mockito.when(hptcRepository.findAllHptcs()).thenReturn(hptcsExpected);

Set<Hptc> hptcsActual = genericService.getAllHptc();

assertThat(hptcsExpected).isEqualTo(hptcsActual);

Mockito.verify(hptcRepository, Mockito.times(1)).findAllHptcs();
Mockito.verifyNoMoreInteractions(hptcRepository);
}

/**
* Description: Get inMaintenanceBy when user data is available
*/
@Test
public void getMaintenanceBy_dataAvailable()
{
SeocConfig seocConfig = SeocObjectGenerator.getSeocConfig(Constants.PROGRAM_NAME, 1);
String maintenanceByUser = "DAV\\User1";
seocConfig.setInMaintenanceBy(maintenanceByUser);
List<SeocConfig> configurations = new ArrayList<SeocConfig>();
configurations.add(seocConfig);

Mockito.when(seocConfigRepository.findAll()).thenReturn(configurations);

String inMaintenanceBy = genericService.getMaintenanceBy();
assertThat(inMaintenanceBy).isEqualTo(maintenanceByUser);

Mockito.verify(seocConfigRepository, Mockito.times(1)).findAll();
Mockito.verifyNoMoreInteractions(seocConfigRepository);
}

/**
* Description: Get inMaintenanceBy when configuration is not available
*/
@Test
public void getMaintenanceBy_dataNotAvailable()
{
List<SeocConfig> configurations = null;

Mockito.when(seocConfigRepository.findAll()).thenReturn(configurations);

String inMaintenanceBy = genericService.getMaintenanceBy();
assertThat(inMaintenanceBy).isEmpty();

Mockito.verify(seocConfigRepository, Mockito.times(1)).findAll();
Mockito.verifyNoMoreInteractions(seocConfigRepository);
}

@Test
public void updateMaintenanceBy_nullConfigirations()
{
List<SeocConfig> configurations = null;

Mockito.when(seocConfigRepository.findAll()).thenReturn(configurations);

String inMaintenanceBy = genericService.updateMaintenanceBy("USER1");
//When configurations not available no value to update and the service returns NULL
assertThat(inMaintenanceBy).isEmpty();
Mockito.verify(seocConfigRepository, Mockito.times(1)).findAll();
Mockito.verifyNoMoreInteractions(seocConfigRepository);
}


@Test
public void updateMaintenanceBy_updatedSuccessfully()
{
List<SeocConfig> configurations = new ArrayList<SeocConfig>();
String user = "TestUser";
SeocConfig seocConfig = SeocObjectGenerator.getSeocConfig(Constants.PROGRAM_NAME, 1);
seocConfig.setInMaintenanceBy("");
configurations.add(seocConfig);

SeocConfig seocConfigAfter = SeocObjectGenerator.getSeocConfig(Constants.PROGRAM_NAME, 1);
seocConfigAfter.setInMaintenanceBy(user);

Mockito.when(seocConfigRepository.findAll()).thenReturn(configurations);
Mockito.when(seocConfigRepository.save(seocConfig)).thenReturn(seocConfigAfter);
Mockito.when(seocConfigRepository.save(seocConfigAfter)).thenReturn(seocConfig);

String inMaintenanceBy = genericService.updateMaintenanceBy(user);
//Setting in maintenance value to a non-empty user name
assertThat(inMaintenanceBy).isEqualTo(user);

inMaintenanceBy = genericService.updateMaintenanceBy("");
//Setting in maintenance value to empty user name
assertThat(inMaintenanceBy).isEmpty();

Mockito.verify(seocConfigRepository, Mockito.times(2)).findAll();
ArgumentCaptor<SeocConfig> argCaptor = ArgumentCaptor.forClass(SeocConfig.class);
Mockito.verify(seocConfigRepository, Mockito.times(2)).save(argCaptor.capture());
Mockito.verifyNoMoreInteractions(seocConfigRepository);
}

@Test
public void getActiveBillingCode_repositoryRetrivesDeactivatedBC()
{
BillingCode activeBC = SeocObjectGenerator.getBillingCode(1, "code101", "CPT", "Desc", true);
Set<BillingCode> activeBCs = new HashSet<BillingCode>();
activeBCs.add(activeBC);
BillingCode activeBCNullDeactivated = SeocObjectGenerator.getBillingCode(2, "code102", "CPT", "Desc", true);
Set<BillingCode> activeBCNulls = new HashSet<BillingCode>();
activeBCNulls.add(activeBCNullDeactivated);
BillingCode deactiveBC = SeocObjectGenerator.getBillingCode(3, "code103", "CPT", "Desc", true);
Set<BillingCode> deactiveBCs = new HashSet<BillingCode>();
deactiveBCs.add(deactiveBC);

activeBC.setDeactivated(false);
deactiveBC.setDeactivated(true);

Mockito.when(billingCodeRepository.findByBillingCode("code101")).thenReturn(activeBCs);
Mockito.when(billingCodeRepository.findByBillingCode("code102")).thenReturn(activeBCNulls);
Mockito.when(billingCodeRepository.findByBillingCode("code103")).thenReturn(deactiveBCs);

BillingCode billingCode = genericService.getActiveBillingCode("code101");
assertThat(activeBC.getDeactivated()).isFalse();
assertThat(billingCode).isSameAs(activeBC);

billingCode = genericService.getActiveBillingCode("code102");
assertThat(activeBCNullDeactivated.getDeactivated()).isNull();
assertThat(billingCode).isSameAs(activeBCNullDeactivated);

billingCode = genericService.getActiveBillingCode("code103");
assertThat(deactiveBC.getDeactivated()).isTrue();
assertThat(billingCode).isNull();
}
}