Hybris Mockito: Exception: No LocaleProvider for (detached) model

I am writing facade level test cases in my Hybris project. I am instantiating the model and setting name and code. The model has some attributes Localized, because of this I get an no LocaleProvider

Exception.

java.lang.IllegalStateException: there is no LocaleProvider for (detached) model de.hybris.platform.servicelayer.model.ItemModelContextImpl@66c677a7
at de.hybris.platform.servicelayer.model.ItemModelContextImpl.getLocaleProvider(ItemModelContextImpl.java:481)
at de.hybris.platform.servicelayer.model.ItemModelContextImpl.getCurrentLocale(ItemModelContextImpl.java:469)
at de.hybris.platform.servicelayer.model.ItemModelContextImpl.toDataLocale(ItemModelContextImpl.java:406)
at de.hybris.platform.servicelayer.model.ItemModelContextImpl.getLocalizedValue(ItemModelContextImpl.java:323)
at de.hybris.platform.catalog.model.classification.ClassificationAttributeModel.getName(ClassificationAttributeModel.java:227)
at de.hybris.platform.catalog.model.classification.ClassificationAttributeModel.getName(ClassificationAttributeModel.java:217)

      

Here is the test class

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Locale.class, Config.class })
public class HCCB2BClassificationFacadeUnitTest {

@InjectMocks
private final HCCB2BClassificationFacade hccb2bClassificationFacade = new HCCB2BClassificationFacadeImpl();

@Mock
HCCB2BClassificationService hccb2bClassificationService = new HCCB2BClassificationServiceImpl();

@Mock
private SessionService sessionService;

@Mock
private HCCB2BClassificationDAO hccb2bClassificationDAO;

@Mock
private SearchRestrictionService searchRestrictionService;

@Before
public void setUp() throws SystemException {
    MockitoAnnotations.initMocks(this);
    ClassAttributeAssignmentModel classAttributeAssignmentModel = new ClassAttributeAssignmentModel();
    ClassificationAttributeModel classificationAttributeModel = new ClassificationAttributeModel();
    classificationAttributeModel.setCode("Procedure");
    classificationAttributeModel.setName("Procedure",Locale.ENGLISH); //Localized Variable
    classAttributeAssignmentModel.setClassificationAttribute(classificationAttributeModel);
    List<ClassAttributeAssignmentModel> classAttributeAssignmentModelList=new ArrayList<ClassAttributeAssignmentModel>();
    classAttributeAssignmentModelList.add(classAttributeAssignmentModel);
    Mockito.doReturn(null).when(sessionService).getAttribute("attributeDTOList");
    Mockito.when(hccb2bClassificationService.getClassAttributeAssignmentList(ClassificationAttributeLevel.LEVEL1,"FAC001")).thenReturn(classAttributeAssignmentModelList);
}

@Test
public void getClassificationAttributeList() {
    HCCB2BCategoryParameter categoryParamter = new HCCB2BCategoryParameter();         
    categoryParamter.setCategoryCode("FAC001");      
    Assert.assertNotNull(hccb2bClassificationFacade.getClassificationAttributeList(categoryParamter));
}

      

You can see here that I am instantiating ClassificationAttributeModel

and setting the code and name of this. The name is localized here, so I gave Locale.English as well. But whenever I run this I get No LocaleProvider Exception.

Actually on my facade where it is called attributeValue.getName()

you get the same exception.

Example:

dto.setName(classificationModel.getName());

Can't I ignore this locale behavior or an alternative solution for this. Please, help.

+3


source to share


1 answer


Solution received ....

I need to set the LocaleProvider using StubLocaleProvider

and then assign it to the ItemModelContext.

import de.hybris.platform.servicelayer.internal.model.impl.LocaleProvider;

LocaleProvider localeProvider = new StubLocaleProvider (Locale.ENGLISH);



Testing class -

    ClassificationAttributeModel classificationAttributeModel = new ClassificationAttributeModel();
    LocaleProvider localeProvider = new StubLocaleProvider(Locale.ENGLISH);
    ItemModelContextImpl itemModelContext = (ItemModelContextImpl) classificationAttributeModel.getItemModelContext();
    itemModelContext.setLocaleProvider(localeProvider);
    classificationAttributeModel.setCode("Procedure");
    classificationAttributeModel.setName("Procedure");

      

+5


source







All Articles