15
15
16
16
import static org .junit .Assert .assertTrue ;
17
17
18
+ import java .io .File ;
19
+ import java .net .URL ;
20
+
18
21
import org .junit .Test ;
19
22
import org .openmrs .module .BaseModuleActivatorTest ;
20
23
import org .openmrs .module .Module ;
21
24
import org .openmrs .module .ModuleFactory ;
22
25
import org .openmrs .module .ModuleUtil ;
23
26
import org .openmrs .module .web .WebModuleUtil ;
27
+ import org .openmrs .util .OpenmrsClassLoader ;
24
28
import org .openmrs .web .Listener ;
25
29
import org .springframework .context .support .AbstractRefreshableApplicationContext ;
26
30
import org .springframework .test .annotation .NotTransactional ;
@@ -96,7 +100,7 @@ public void shouldRefreshOtherModulesOnStartingStoppedModule() {
96
100
97
101
//When OpenMRS is running and you start a stopped module:
98
102
// willRefreshContext() and contextRefreshed() methods get called for all started modules' activators (including the newly started module)
99
- // started() method gets called for ONLY the newly started module's activator
103
+ // willStart() and started() methods get called for ONLY the newly started module's activator
100
104
101
105
//start module3 which was previously stopped
102
106
ModuleFactory .startModule (module );
@@ -113,7 +117,10 @@ public void shouldRefreshOtherModulesOnStartingStoppedModule() {
113
117
assertTrue (moduleTestData .getContextRefreshedCallCount (MODULE2_ID ) == 1 );
114
118
assertTrue (moduleTestData .getContextRefreshedCallCount (MODULE3_ID ) == 1 );
115
119
116
- //started() method gets called for ONLY the newly started module's activator
120
+ //willStart() and started() methods get called for ONLY the newly started module's activator
121
+ assertTrue (moduleTestData .getWillStartCallCount (MODULE1_ID ) == 0 );
122
+ assertTrue (moduleTestData .getWillStartCallCount (MODULE2_ID ) == 0 );
123
+ assertTrue (moduleTestData .getWillStartCallCount (MODULE3_ID ) == 1 );
117
124
assertTrue (moduleTestData .getStartedCallCount (MODULE1_ID ) == 0 );
118
125
assertTrue (moduleTestData .getStartedCallCount (MODULE2_ID ) == 0 );
119
126
assertTrue (moduleTestData .getStartedCallCount (MODULE3_ID ) == 1 );
@@ -143,4 +150,46 @@ public void shouldRefreshContextForAllStartedModulesOnWebStartup() throws Throwa
143
150
assertTrue (moduleTestData .getStartedCallCount (MODULE2_ID ) == 1 );
144
151
assertTrue (moduleTestData .getStartedCallCount (MODULE3_ID ) == 1 );
145
152
}
153
+
154
+ @ Test
155
+ @ NotTransactional
156
+ public void shouldRefreshOtherModulesOnInstallingNewModule () throws Exception {
157
+ //first completely remove module3
158
+ Module module = ModuleFactory .getModuleById (MODULE3_ID );
159
+ ModuleFactory .stopModule (module );
160
+ WebModuleUtil .stopModule (module , ((XmlWebApplicationContext ) applicationContext ).getServletContext ());
161
+ ModuleFactory .unloadModule (module );
162
+
163
+ init (); //to initialize for the condition below:
164
+
165
+ //When OpenMRS is running and you install a new module:
166
+ // willRefreshContext() and contextRefreshed() methods get called for all started modules' activators (including the newly installed module)
167
+ // willStart() and started() methods get called for ONLY the newly installed module's activator
168
+
169
+ //install a new module3
170
+ URL url = OpenmrsClassLoader .getInstance ().getResource ("org/openmrs/module/include/test3-1.0-SNAPSHOT.omod" );
171
+ File file = new File (url .getFile ());
172
+ module = ModuleFactory .loadModule (file );
173
+ ModuleFactory .startModule (module );
174
+ WebModuleUtil .startModule (module , ((XmlWebApplicationContext ) applicationContext ).getServletContext (), false );
175
+
176
+ assertTrue (module .isStarted ());
177
+ assertTrue (ModuleFactory .isModuleStarted (module ));
178
+
179
+ //module1, module2 and module3 should refresh
180
+ assertTrue (moduleTestData .getWillRefreshContextCallCount (MODULE1_ID ) == 1 );
181
+ assertTrue (moduleTestData .getWillRefreshContextCallCount (MODULE2_ID ) == 1 );
182
+ assertTrue (moduleTestData .getWillRefreshContextCallCount (MODULE3_ID ) == 1 );
183
+ assertTrue (moduleTestData .getContextRefreshedCallCount (MODULE1_ID ) == 1 );
184
+ assertTrue (moduleTestData .getContextRefreshedCallCount (MODULE2_ID ) == 1 );
185
+ assertTrue (moduleTestData .getContextRefreshedCallCount (MODULE3_ID ) == 1 );
186
+
187
+ //willStart() and started() methods get called for ONLY the newly installed module's activator
188
+ assertTrue (moduleTestData .getWillStartCallCount (MODULE1_ID ) == 0 );
189
+ assertTrue (moduleTestData .getWillStartCallCount (MODULE2_ID ) == 0 );
190
+ assertTrue (moduleTestData .getWillStartCallCount (MODULE3_ID ) == 1 );
191
+ assertTrue (moduleTestData .getStartedCallCount (MODULE1_ID ) == 0 );
192
+ assertTrue (moduleTestData .getStartedCallCount (MODULE2_ID ) == 0 );
193
+ assertTrue (moduleTestData .getStartedCallCount (MODULE3_ID ) == 1 );
194
+ }
146
195
}
0 commit comments