Skip to content

Commit

Permalink
TRUNK-3586 Update unit testing environment to use mocks
Browse files Browse the repository at this point in the history
  • Loading branch information
rkorytkowski committed Aug 6, 2014
1 parent 338e771 commit 586ec24
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
32 changes: 32 additions & 0 deletions api/src/test/java/org/openmrs/api/context/ContextMockHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,17 @@
*/
package org.openmrs.api.context;

import static org.mockito.Mockito.when;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import org.mockito.InjectMocks;
import org.openmrs.Person;
import org.openmrs.PersonName;
import org.openmrs.Role;
import org.openmrs.User;
import org.openmrs.api.AdministrationService;
import org.openmrs.api.CohortService;
import org.openmrs.api.ConceptService;
Expand All @@ -33,12 +40,16 @@
import org.openmrs.api.UserService;
import org.openmrs.api.VisitService;
import org.openmrs.messagesource.MessageSourceService;
import org.openmrs.util.RoleConstants;

/**
* Helps to mock or spy on services. It can be used with {@link InjectMocks}. See
* {@link org.openmrs.module.ModuleUtilTest} for example. In general you should always try to refactor code first so
* that this class is not needed. In practice it is mostly enough to replace calls to
* Context.get...Service with fields, which are injected through a constructor.
* <p>
* ContextMockHelper is available in tests extending {@link org.openmrs.test.BaseContextMockTest} and
* {@link org.openmrs.test.BaseContextSensitiveTest}.
*
* @deprecated Avoid using this by not calling Context.get...Service() in your code.
* @since 1.11
Expand Down Expand Up @@ -93,6 +104,27 @@ public class ContextMockHelper {
public ContextMockHelper() {
}

public void authenticateMockUser() {
User user = new User();
user.setUuid("1010d442-e134-11de-babe-001e378eb67e");
user.setUserId(1);
user.setUsername("admin");
user.addRole(new Role(RoleConstants.SUPERUSER));

Person person = new Person();
person.setUuid("6adb7c42-cfd2-4301-b53b-ff17c5654ff7");
person.setId(1);
person.addName(new PersonName("Bob", "", "Smith"));
Calendar calendar = Calendar.getInstance();
calendar.set(1980, 01, 01);
person.setBirthdate(calendar.getTime());
person.setGender("male");
user.setPerson(person);

when(userContext.getAuthenticatedUser()).thenReturn(user);
when(userContext.isAuthenticated()).thenReturn(true);
}

public void revertMocks() {
for (Map.Entry<Class<?>, Object> realService : realServices.entrySet()) {
Context.getServiceContext().setService(realService.getKey(), realService.getValue());
Expand Down
8 changes: 1 addition & 7 deletions api/src/test/java/org/openmrs/test/BaseContextMockTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,11 @@
*/
package org.openmrs.test;

import static org.mockito.Mockito.when;

import org.junit.After;
import org.junit.Before;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.openmrs.User;
import org.openmrs.api.context.ContextMockHelper;
import org.openmrs.api.context.UserContext;
import org.openmrs.module.ModuleUtilTest;
Expand All @@ -37,9 +34,6 @@ public abstract class BaseContextMockTest {
@Mock
protected UserContext userContext;

@Mock
protected User authenticatedUser;

@InjectMocks
protected ContextMockHelper contextMockHelper;

Expand All @@ -50,7 +44,7 @@ public abstract class BaseContextMockTest {
public void initMocks() {
MockitoAnnotations.initMocks(this);

when(userContext.getAuthenticatedUser()).thenReturn(authenticatedUser);
contextMockHelper.authenticateMockUser();
}

@After
Expand Down

0 comments on commit 586ec24

Please sign in to comment.