Fix empty keys in EnvironmentChangedEvent on resetting the Environment (#229)

When the Environment is resetted the EnvironmentChangedEvent always
contains an empty keySet, since the live view of the cleared map was
used. This commit fixes this.
This commit is contained in:
Johannes Edmeier
2017-07-25 17:58:15 +02:00
committed by Spencer Gibb
parent 2250c836a4
commit 94a42737ec
2 changed files with 46 additions and 2 deletions

View File

@@ -0,0 +1,45 @@
package org.springframework.cloud.context.environment;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.mock.env.MockEnvironment;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
public class EnvironmentManagerTest {
@Test
public void testCorrectEvents() {
MockEnvironment environment = new MockEnvironment();
ApplicationEventPublisher publisher = mock(ApplicationEventPublisher.class);
EnvironmentManager environmentManager = new EnvironmentManager(environment);
environmentManager.setApplicationEventPublisher(publisher);
environmentManager.setProperty("foo", "bar");
assertThat(environment.getProperty("foo")).isEqualTo("bar");
ArgumentCaptor<ApplicationEvent> eventCaptor = ArgumentCaptor.forClass(ApplicationEvent.class);
verify(publisher, times(1)).publishEvent(eventCaptor.capture());
assertThat(eventCaptor.getValue()).isInstanceOf(EnvironmentChangeEvent.class);
EnvironmentChangeEvent event = (EnvironmentChangeEvent) eventCaptor.getValue();
assertThat(event.getKeys()).containsExactly("foo");
reset(publisher);
environmentManager.reset();
assertThat(environment.getProperty("foo")).isNull();
verify(publisher, times(1)).publishEvent(eventCaptor.capture());
assertThat(eventCaptor.getValue()).isInstanceOf(EnvironmentChangeEvent.class);
event = (EnvironmentChangeEvent) eventCaptor.getValue();
assertThat(event.getKeys()).containsExactly("foo");
}
}