Hi guys,
I am currently trying to implement a AOP Before Advice (https://wiki.openmrs.org/display/docs/OpenMRS+AOP).
The final goal is to ensure that a visit cannot be closed if there is no diagnosis entered. But for now, this advice is just a dumb class that throws a APIException any time the VisitService.endVisit(visit) method is called.
public class BeforeEndVisitAdvice implements MethodBeforeAdvice{
	protected static final Log log = LogFactory.getLog(BeforeEndVisitAdvice.class);
	@Override
	public void before(Method method, Object[] args, Object target) throws Throwable {
		if ( method.getName().equals("endVisit") && (target instanceof VisitService) ) {
			log.error("Dumb 'before advice' that just returns an APIException");
			throw new APIException();
		}
		return;		
	}
}
This works just fine at runtime: the APIException is thrown.
Now the test looks like this for now:
public class BeforeEndVisitAdviceTest  extends BaseModuleContextSensitiveTest {
	protected final Log log = LogFactory.getLog(BeforeEndVisitAdvice.class);
	@Autowired
	private VisitService visitService;
	@Autowired
	private PatientService patientService;
	@Autowired
	private LocationService locationService;	
	@Autowired
	private AdtService adtService;
	
	@Before
	public void before() {
	}
	@Test(expected=APIException.class)
	@Verifies(value = "should fail ending a visit that has no diagnosis", method = "before(Method, Object[], Object)")
	public void shouldFailEndVisitWithNoDiagnosis() {
		VisitDomainWrapper activeVisitWrapper = adtService.getActiveVisit(patientService.getPatient(2), locationService.getLocation(1));  
		
		List<Diagnosis> diags = activeVisitWrapper.getUniqueDiagnoses(true, true);
		visitService.endVisit(activeVisitWrapper.getVisit(), new Date());		
	}
}
But when running the tests (from Eclipse or Maven) no APIException is returned.
The BeforeEndVisitAdvice.before(...) method is never called.
I have had a look at AuthorizationAdviceTest.java and did not see anything particular there that I may have forgotten. Looks like it should just work out of the box.
Do I need to initialize/start/configure the advice somewhere when running tests? What did I miss?
