Skip to content

Commit

Permalink
Rename ADR types (#716)
Browse files Browse the repository at this point in the history
  • Loading branch information
grahampacker-ms committed Jan 21, 2025
1 parent c4f6eb5 commit a189af3
Show file tree
Hide file tree
Showing 14 changed files with 313 additions and 315 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@
import org.bson.Document;
import org.eclipse.microprofile.config.ConfigProvider;
import org.finos.calm.domain.adr.Adr;
import org.finos.calm.domain.adr.AdrBuilder;
import org.finos.calm.domain.adr.AdrContent;
import org.finos.calm.domain.adr.AdrDecision;
import org.finos.calm.domain.adr.AdrDecisionBuilder;
import org.finos.calm.domain.adr.AdrLinkBuilder;
import org.finos.calm.domain.adr.AdrOption;
import org.finos.calm.domain.adr.AdrOptionBuilder;
import org.finos.calm.domain.adr.AdrStatus;
import org.finos.calm.domain.adr.NewAdr;
import org.finos.calm.domain.adr.NewAdrBuilder;
import org.finos.calm.domain.adr.AdrMeta;
import org.finos.calm.domain.adr.AdrMetaBuilder;
import org.finos.calm.domain.adr.Decision;
import org.finos.calm.domain.adr.DecisionBuilder;
import org.finos.calm.domain.adr.LinkBuilder;
import org.finos.calm.domain.adr.NewAdrRequest;
import org.finos.calm.domain.adr.NewAdrRequestBuilder;
import org.finos.calm.domain.adr.Option;
import org.finos.calm.domain.adr.OptionBuilder;
import org.finos.calm.domain.adr.Status;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
Expand Down Expand Up @@ -50,27 +50,27 @@ public class MongoAdrIntegration {
private final String TITLE = "My ADR";
private final String PROBLEM_STATEMENT = "My problem is...";
private final List<String> DECISION_DRIVERS = List.of("a", "b", "c");
private final AdrOption OPTION_A = AdrOptionBuilder.builder().name("Option 1").description("optionDescription")
private final Option OPTION_A = OptionBuilder.builder().name("Option 1").description("optionDescription")
.positiveConsequences(List.of("a")).negativeConsequences(List.of("b")).build();
private final AdrOption OPTION_B = AdrOptionBuilder.builder().name("Option 2").description("optionDescription")
private final Option OPTION_B = OptionBuilder.builder().name("Option 2").description("optionDescription")
.positiveConsequences(List.of("c")).negativeConsequences(List.of("d")).build();
private final List<AdrOption> CONSIDERED_OPTIONS = List.of(OPTION_A, OPTION_B);
private final List<Option> CONSIDERED_OPTIONS = List.of(OPTION_A, OPTION_B);
private final String RATIONALE = "This is the best option";
private final AdrDecision DECISION_OUTCOME = AdrDecisionBuilder.builder()
private final Decision DECISION_OUTCOME = DecisionBuilder.builder()
.rationale(RATIONALE)
.chosenOption(OPTION_A)
.build();

private final NewAdr newAdr = NewAdrBuilder.builder()
private final NewAdrRequest newAdr = NewAdrRequestBuilder.builder()
.title(TITLE)
.contextAndProblemStatement(PROBLEM_STATEMENT)
.decisionDrivers(DECISION_DRIVERS)
.consideredOptions(CONSIDERED_OPTIONS)
.decisionOutcome(DECISION_OUTCOME)
.links(List.of(AdrLinkBuilder.builder().rel("abc").href("http://abc.com").build()))
.links(List.of(LinkBuilder.builder().rel("abc").href("http://abc.com").build()))
.build();

private final AdrContent adrContent = AdrContent.builderFromNewAdr(newAdr).status(AdrStatus.draft).build();
private final Adr adr = Adr.builderFromNewAdr(newAdr).status(Status.draft).build();

@BeforeEach
public void setupAdrs() {
Expand Down Expand Up @@ -124,41 +124,41 @@ void end_to_end_verify_create_an_adr() throws JsonProcessingException {
@Test
@Order(3)
void end_to_end_verify_get_adr_revision() throws JsonProcessingException {
Adr expectedAdr = AdrBuilder.builder()
AdrMeta expectedAdrMeta = AdrMetaBuilder.builder()
.namespace("finos")
.id(1)
.revision(1)
.adrContent(adrContent)
.adrContent(adr)
.build();

Adr actualAdr = given()
AdrMeta actualAdrMeta = given()
.when().get("/calm/namespaces/finos/adrs/1/revisions/1")
.then()
.statusCode(200)
.extract()
.body()
.as(Adr.class);
assertEquals(expectedAdr, actualAdr);
.as(AdrMeta.class);
assertEquals(expectedAdrMeta, actualAdrMeta);
}

@Test
@Order(4)
void end_to_end_verify_get_adr() {
Adr result = given()
AdrMeta actualAdrMeta = given()
.when().get("/calm/namespaces/finos/adrs/1")
.then()
.statusCode(200)
.extract()
.body()
.as(Adr.class);
.as(AdrMeta.class);

Adr expectedAdr = AdrBuilder.builder()
AdrMeta expectedAdrMeta = AdrMetaBuilder.builder()
.namespace("finos")
.id(1)
.revision(1)
.adrContent(adrContent)
.adrContent(adr)
.build();
assertEquals(expectedAdr, result);
assertEquals(expectedAdrMeta, actualAdrMeta);
}

@Test
Expand Down
58 changes: 53 additions & 5 deletions calm-hub/src/main/java/org/finos/calm/domain/adr/Adr.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,61 @@
package org.finos.calm.domain.adr;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import io.soabase.recordbuilder.core.RecordBuilder;

/**
* Represents an ADR and the associated namespace, id, and revision.
* The ADR is represented as a String in JSON format.
*/
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

@RecordBuilder.Options(enableWither = false)
@RecordBuilder
public record Adr(String namespace, int id, int revision, AdrContent adrContent) {
public record Adr(
String title,
Status status,
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
LocalDateTime creationDateTime,
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
LocalDateTime updateDateTime,
String contextAndProblemStatement,
List<String> decisionDrivers,
List<Option> consideredOptions,
Decision decisionOutcome,
List<Link> links

) {

public static AdrBuilder builderFromNewAdr(NewAdrRequest newAdrRequest) {
return AdrBuilder.builder()
.title(newAdrRequest.title())
.contextAndProblemStatement(newAdrRequest.contextAndProblemStatement())
.decisionDrivers(newAdrRequest.decisionDrivers())
.consideredOptions(newAdrRequest.consideredOptions())
.decisionOutcome(newAdrRequest.decisionOutcome())
.links(newAdrRequest.links());
}

// does not include datetimes in equals
@Override
public boolean equals(Object o) {
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
Adr that = (Adr) o;
return Objects.equals(title, that.title) &&
status == that.status &&
Objects.equals(contextAndProblemStatement, that.contextAndProblemStatement) &&
Objects.equals(decisionDrivers, that.decisionDrivers) &&
Objects.equals(consideredOptions, that.consideredOptions) &&
Objects.equals(decisionOutcome, that.decisionOutcome) &&
Objects.equals(links, that.links);
}

@Override
public int hashCode() {
return Objects.hash(title, status, contextAndProblemStatement, decisionDrivers, consideredOptions, decisionOutcome, links);
}
}
61 changes: 0 additions & 61 deletions calm-hub/src/main/java/org/finos/calm/domain/adr/AdrContent.java

This file was deleted.

13 changes: 13 additions & 0 deletions calm-hub/src/main/java/org/finos/calm/domain/adr/AdrMeta.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.finos.calm.domain.adr;

import io.soabase.recordbuilder.core.RecordBuilder;

/**
* Represents an ADR and the associated namespace, id, and revision.
* The ADR is represented as a String in JSON format.
*/
@RecordBuilder.Options(enableWither = false)
@RecordBuilder
public record AdrMeta(String namespace, int id, int revision, Adr adrContent) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@

@RecordBuilder.Options(enableWither = false)
@RecordBuilder
public record AdrDecision(AdrOption chosenOption, String rationale) {
public record Decision(Option chosenOption, String rationale) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@

@RecordBuilder.Options(enableWither = false)
@RecordBuilder
public record AdrLink(String rel, String href) {
public record Link(String rel, String href) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@

@RecordBuilder.Options(enableWither = false)
@RecordBuilder
public record NewAdr(
public record NewAdrRequest(
String title,
String contextAndProblemStatement,
List<String> decisionDrivers,
List<AdrOption> consideredOptions,
AdrDecision decisionOutcome,
List<AdrLink> links
List<Option> consideredOptions,
Decision decisionOutcome,
List<Link> links
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@

@RecordBuilder.Options(enableWither = false)
@RecordBuilder
public record AdrOption(String name, String description, List<String> positiveConsequences, List<String> negativeConsequences) {
public record Option(String name, String description, List<String> positiveConsequences, List<String> negativeConsequences) {
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.finos.calm.domain.adr;

public enum AdrStatus {
public enum Status {
draft,
proposed,
accepted,
Expand Down
Loading

0 comments on commit a189af3

Please sign in to comment.