@Override public void contextRefreshed() { // initialize all resources and search handlers Context.getService(RestService.class).initialize(); log.info("Clearing caches..."); ConversionUtil.clearCache(); ReflectionUtil.clearCaches(); SwaggerSpecificationCreator.clearCache(); }
/** * @verifies fail if failed to instantiate a resource * @see RestServiceImpl#initialize() */ @Test public void initialize_shouldFailIfFailedToInstantiateAResource() throws Exception { List<Class<? extends Resource>> resources = new ArrayList<Class<? extends Resource>>(); resources.add(InstantiateExceptionAnimalResource_1_9.class); when(openmrsClassScanner.getClasses(Resource.class, true)).thenReturn(resources); setCurrentOpenmrsVersion("1.9.10"); expectedException.expect(APIException.class); expectedException.expectMessage("Failed to instantiate " + InstantiateExceptionAnimalResource_1_9.class.toString()); restService.initialize(); }
/** * @verifies fail if failed to get resource classes * @see RestServiceImpl#initialize() */ @Test public void initialize_shouldFailIfFailedToGetResourceClasses() throws Exception { IOException ioException = new IOException("some"); when(openmrsClassScanner.getClasses(Resource.class, true)).thenThrow(ioException); expectedException.expect(APIException.class); expectedException.expectMessage("Cannot access REST resources"); expectedException.expectCause(is(ioException)); restService.initialize(); }
/** * @verifies fail if two resources with same name and order are found * @see RestServiceImpl#initialize() */ @Test public void initialize_shouldFailIfTwoResourcesWithSameNameAndOrderAreFound() throws Exception { List<Class<? extends Resource>> resources = new ArrayList<Class<? extends Resource>>(); resources.add(AnimalResource_1_9.class); resources.add(DuplicateNameAndOrderAnimalResource_1_9.class); when(openmrsClassScanner.getClasses(Resource.class, true)).thenReturn(resources); setCurrentOpenmrsVersion("1.9.10"); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Two resources with the same name (v1/animal) must not have the same order"); restService.initialize(); }
/** * @verifies initialize resources and search handlers * @see RestServiceImpl#initialize() */ @Test public void initialize_shouldInitializeResourcesAndSearchHandlers() throws Exception { List<Class<? extends Resource>> resources = new ArrayList<Class<? extends Resource>>(); resources.add(AnimalResource_1_9.class); when(openmrsClassScanner.getClasses(Resource.class, true)).thenReturn(resources); SearchHandler searchHandler1 = mock(SearchHandler.class); SearchConfig searchConfig1 = new SearchConfig("default", "v1/concept", "1.9.*", new SearchQuery.Builder( "Search for concepts").withRequiredParameters("source").withOptionalParameters("code").build()); when(searchHandler1.getSearchConfig()).thenReturn(searchConfig1); when(restHelperService.getRegisteredSearchHandlers()).thenReturn(asList(searchHandler1)); setCurrentOpenmrsVersion("1.9.10"); RestUtil.disableContext(); //to avoid a Context call restService.initialize(); assertThat(restService.getSearchHandlers("v1/concept").size(), is(1)); assertThat(restService.getSearchHandlers("v1/concept").iterator().next(), is(searchHandler1)); assertThat(restService.getResourceByName("v1/animal"), instanceOf(AnimalResource_1_9.class)); }
restService.initialize(); assertThat(restService.getAllSearchHandlers().size(), is(1)); assertThat(restService.getAllSearchHandlers(), hasItem(searchHandler1)); when(restHelperService.getRegisteredSearchHandlers()).thenReturn(asList(searchHandler1, searchHandler2)); restService.initialize(); assertThat(restService.getAllSearchHandlers().size(), is(2)); assertThat(restService.getAllSearchHandlers(), hasItem(searchHandler1));
restService.initialize(); List<SearchHandler> searchHandlers = restService.getAllSearchHandlers(); assertThat(searchHandlers.size(), is(4));
/** * @verifies fail if two search handlers for the same resource have the same id * @see RestServiceImpl#initialize() */ @Test public void initialize_shouldFailIfTwoSearchHandlersForTheSameResourceHaveTheSameId() throws Exception { SearchHandler searchHandler1 = mock(SearchHandler.class); SearchConfig searchConfig1 = new SearchConfig("conceptByMapping", "v1/concept", "1.8.*", new SearchQuery.Builder( "description").withRequiredParameters("source").withOptionalParameters("code").build()); when(searchHandler1.getSearchConfig()).thenReturn(searchConfig1); SearchHandler searchHandler2 = mock(SearchHandler.class); SearchConfig searchConfig2 = new SearchConfig("conceptByMapping", "v1/concept", "1.8.*", new SearchQuery.Builder( "description").withRequiredParameters("source").withOptionalParameters("code").build()); when(searchHandler2.getSearchConfig()).thenReturn(searchConfig2); setCurrentOpenmrsVersion("1.8.10"); when(restHelperService.getRegisteredSearchHandlers()).thenReturn(asList(searchHandler1, searchHandler2)); RestUtil.disableContext(); //to avoid a Context call expectedException.expect(IllegalStateException.class); expectedException.expectMessage(startsWith("Two search handlers (")); expectedException .expectMessage(endsWith("for the same resource (v1/concept) must not have the same ID (conceptByMapping)")); restService.initialize(); } }
@Before public void init() throws Exception { // init REST Context.getService(RestService.class).initialize(); Context.getAdministrationService().saveGlobalProperty( new GlobalProperty(RestConstants.SWAGGER_QUIET_DOCS_GLOBAL_PROPERTY_NAME, "true")); // ensure GP is written to database before we count the rows Context.flushSession(); beforeCounts = getRowCounts(); }