Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ public void write(T configuration, OutputStream outputStream) {
requireNonNull(configuration, "configuration");
requireNonNull(outputStream, "output stream");
var extractedCommentNodes = extractor.extractCommentNodes(configuration);
var yamlFileWriter = new YamlWriter(outputStream, properties);
var dumpedYaml = tryDump(configuration);
var yamlFileWriter = new YamlWriter(outputStream, properties);
yamlFileWriter.writeYaml(dumpedYaml, extractedCommentNodes);
}

Expand All @@ -84,8 +84,8 @@ public void save(T configuration, Path configurationFile) {
requireNonNull(configurationFile, "configuration file");
tryCreateParentDirectories(configurationFile);
var extractedCommentNodes = extractor.extractCommentNodes(configuration);
var yamlFileWriter = new YamlWriter(configurationFile, properties);
var dumpedYaml = tryDump(configuration);
var yamlFileWriter = new YamlWriter(configurationFile, properties);
yamlFileWriter.writeYaml(dumpedYaml, extractedCommentNodes);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -572,4 +572,65 @@ void tryCreateParentDirectoriesDoesNotThrowIfParentIsNull(boolean createParentDi
Path path = fs.getPath("config.yml");
assertDoesNotThrow(() -> store.tryCreateParentDirectories(path));
}

private record ThrowingWhileSerializingSerializer()
implements Serializer<String, String> {

@Override
public String serialize(String element) {
throw new UnsupportedOperationException(element);
}

@Override
public String deserialize(String element) {
return element;
}
}

@Configuration
private static final class G {
private String content = "-";
}

@Test
void saveDoesNotOverwriteConfigurationFileContentsOnYamlDumpFailure() throws IOException {
YamlConfigurationStore<G> store = new YamlConfigurationStore<>(
G.class,
YamlConfigurationProperties.newBuilder()
.addSerializer(String.class, new ThrowingWhileSerializingSerializer())
.build()
);

String content = "content: abcde";
Files.writeString(yamlFile, content);

G config = store.load(yamlFile);
assertThat(config.content, is("abcde"));
assertThrows(
UnsupportedOperationException.class,
() -> store.save(config, yamlFile)
);
assertThat(readFile(yamlFile), is(content));
}

@Test
void writeDoesNotOverwriteStreamContentsOnYamlDumpFailure() {
YamlConfigurationStore<G> store = new YamlConfigurationStore<>(
G.class,
YamlConfigurationProperties.newBuilder()
.addSerializer(String.class, new ThrowingWhileSerializingSerializer())
.build()
);

String content = "content: abcde";
outputStream.writeBytes(content.getBytes());

G config = store.read(inputFromOutput());
assertThat(config.content, is("abcde"));
assertThrows(
UnsupportedOperationException.class,
() -> store.write(config, outputStream)
);
assertThat(outputStream.toString(), is(content));
}
}