Skip to content

Commit 47eea28

Browse files
committed
Fixed #1113 - NPE thrown when attempting to import multiple stubs via the API with no import options
1 parent eabd3d2 commit 47eea28

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

src/main/java/com/github/tomakehurst/wiremock/core/WireMockApp.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.github.tomakehurst.wiremock.verification.*;
3434
import com.github.tomakehurst.wiremock.verification.diff.PlainTextDiffRenderer;
3535
import com.google.common.base.Function;
36+
import com.google.common.base.MoreObjects;
3637
import com.google.common.base.Optional;
3738
import com.google.common.base.Predicate;
3839
import com.google.common.collect.ImmutableList;
@@ -45,6 +46,7 @@
4546
import static com.github.tomakehurst.wiremock.common.LocalNotifier.notifier;
4647
import static com.github.tomakehurst.wiremock.stubbing.ServeEvent.NOT_MATCHED;
4748
import static com.github.tomakehurst.wiremock.stubbing.ServeEvent.TO_LOGGED_REQUEST;
49+
import static com.google.common.base.MoreObjects.firstNonNull;
4850
import static com.google.common.collect.FluentIterable.from;
4951
import static com.google.common.collect.Iterables.contains;
5052
import static com.google.common.collect.Iterables.transform;
@@ -436,18 +438,20 @@ public void removeStubsByMetadata(StringValuePattern pattern) {
436438
@Override
437439
public void importStubs(StubImport stubImport) {
438440
List<StubMapping> mappings = stubImport.getMappings();
441+
StubImport.Options importOptions = firstNonNull(stubImport.getImportOptions(), StubImport.Options.DEFAULTS);
442+
439443
for (int i = mappings.size() - 1; i >= 0; i--) {
440444
StubMapping mapping = mappings.get(i);
441445
if (mapping.getId() != null && getStubMapping(mapping.getId()).isPresent()) {
442-
if (stubImport.getImportOptions().getDuplicatePolicy() == StubImport.Options.DuplicatePolicy.OVERWRITE) {
446+
if (importOptions.getDuplicatePolicy() == StubImport.Options.DuplicatePolicy.OVERWRITE) {
443447
editStubMapping(mapping);
444448
}
445449
} else {
446450
addStubMapping(mapping);
447451
}
448452
}
449453

450-
if (stubImport.getImportOptions().getDeleteAllNotInImport()) {
454+
if (importOptions.getDeleteAllNotInImport()) {
451455
Iterable<UUID> ids = transform(mappings, new Function<StubMapping, UUID>() {
452456
@Override
453457
public UUID apply(StubMapping input) {

src/test/java/com/github/tomakehurst/wiremock/AdminApiTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -712,4 +712,40 @@ public void updateGlobalSettingsViaPut() {
712712
assertThat(wireMockServer.getGlobalSettings().getSettings().getExtended().getInt("mySetting"), is(123));
713713
}
714714

715+
static final String STUB_IMPORT_JSON = "{\n" +
716+
" \"mappings\": [\n" +
717+
" {\n" +
718+
" \"request\": {\n" +
719+
" \"url\": \"/one\",\n" +
720+
" \"method\": \"GET\"\n" +
721+
" },\n" +
722+
" \"response\": {\n" +
723+
" \"status\": 200\n" +
724+
" }\n" +
725+
" },\n" +
726+
" {\n" +
727+
" \"request\": {\n" +
728+
" \"url\": \"/two\",\n" +
729+
" \"method\": \"GET\"\n" +
730+
" },\n" +
731+
" \"response\": {\n" +
732+
" \"status\": 200\n" +
733+
" }\n" +
734+
" }\n" +
735+
" ]\n" +
736+
"}";
737+
738+
@Test
739+
public void importMultipleStubsWithDefaultParameters() {
740+
WireMockResponse response = testClient.postJson("/__admin/mappings/import", STUB_IMPORT_JSON);
741+
742+
assertThat(response.statusCode(), is(200));
743+
744+
List<StubMapping> allStubs = wm.getStubMappings();
745+
assertThat(allStubs.size(), is(2));
746+
assertThat(allStubs.get(0).getRequest().getUrl(), is("/one"));
747+
assertThat(allStubs.get(1).getRequest().getUrl(), is("/two"));
748+
749+
}
750+
715751
}

0 commit comments

Comments
 (0)