Skip to content

Commit 419b4ad

Browse files
authored
Merge branch 'main' into renovate/minor-updates
2 parents c79a93b + 96f6d60 commit 419b4ad

68 files changed

Lines changed: 3991 additions & 644 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/semgrep-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
env:
2222
SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
2323
container:
24-
image: semgrep/semgrep@sha256:3dab091ee3247fce7e4ed3df9f92b3bd72692c083295f53cec3f135b86404db1
24+
image: semgrep/semgrep@sha256:a3d49dc967b8534a6a76628e50c51cbfe33eb7195dc2feab1fdc0f100852c8ef
2525
if: (github.actor != 'dependabot[bot]')
2626
steps:
2727
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

advent-of-calm/website/package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

advent-of-calm/website/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@
2323
"typescript": "^5.6.3"
2424
},
2525
"devDependencies": {
26-
"@types/node": "^20.19.37"
26+
"@types/node": "^22.19.15"
2727
}
2828
}

calm-hub-ui/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"web-vitals": "^5.0.1"
4040
},
4141
"devDependencies": {
42-
"@eslint/js": "^9.25.0",
42+
"@eslint/js": "^10.0.0",
4343
"@tailwindcss/typography": "^0.5.16",
4444
"@testing-library/cypress": "^10.1.0",
4545
"@testing-library/jest-dom": "^6.6.3",
@@ -75,7 +75,7 @@
7575
"express": "5.2.1",
7676
"nth-check": "2.1.1",
7777
"postcss": "8.5.8",
78-
"rollup": "4.60.0"
78+
"rollup": "4.60.1"
7979
},
8080
"overrides": {
8181
"d3-selection": "3.0.0",

calm-hub/src/integration-test/java/integration/MongoSchemaIntegration.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
import org.slf4j.Logger;
1313
import org.slf4j.LoggerFactory;
1414

15-
import java.util.ArrayList;
16-
1715
import static io.restassured.RestAssured.given;
1816
import static org.hamcrest.Matchers.*;
1917

@@ -39,18 +37,15 @@ public void setupSchemas() {
3937
try (MongoClient mongoClient = MongoClients.create(mongoUri)) {
4038
MongoDatabase database = mongoClient.getDatabase(mongoDatabase);
4139

42-
// Ensure the 'namespaces' collection exists
43-
if (!database.listCollectionNames().into(new ArrayList<>()).contains("schemas")) {
44-
database.createCollection("schemas");
45-
}
46-
47-
Document schemaStub = new Document();
48-
schemaStub.put("version", "2024-04");
49-
schemaStub.put("schemas", new Document()
50-
.append("calm.json", CALM_TEST_SCHEMA)
51-
.append("interface.json", INTERFACE_TEST_SCHEMA));
40+
if (database.getCollection("schemas").countDocuments() == 0) {
41+
Document schemaStub = new Document();
42+
schemaStub.put("version", "2024-04");
43+
schemaStub.put("schemas", new Document()
44+
.append("calm.json", CALM_TEST_SCHEMA)
45+
.append("interface.json", INTERFACE_TEST_SCHEMA));
5246

53-
database.getCollection("schemas").insertOne(schemaStub);
47+
database.getCollection("schemas").insertOne(schemaStub);
48+
}
5449
}
5550
}
5651

calm-hub/src/integration-test/java/integration/MongoSetup.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,28 @@
33
import com.mongodb.client.MongoDatabase;
44
import org.bson.Document;
55

6-
import java.util.ArrayList;
76
import java.util.Arrays;
87

98
public class MongoSetup {
109

1110
public static void namespaceSetup(MongoDatabase database) {
12-
// Ensure the 'namespaces' collection exists
13-
if (!database.listCollectionNames().into(new ArrayList<>()).contains("namespaces")) {
14-
database.createCollection("namespaces");
15-
// Insert multiple documents into 'namespaces'
11+
if (database.getCollection("namespaces").countDocuments() == 0) {
1612
database.getCollection("namespaces").insertMany(Arrays.asList(
1713
new Document("name", "finos").append("description", "FINOS namespace")
1814
));
1915
}
2016
}
2117

2218
public static void domainSetup(MongoDatabase database) {
23-
// Ensure the 'namespaces' collection exists
24-
if (!database.listCollectionNames().into(new ArrayList<>()).contains("domains")) {
25-
database.createCollection("domains");
26-
// Insert multiple documents into 'namespaces'
19+
if (database.getCollection("domains").countDocuments() == 0) {
2720
database.getCollection("domains").insertMany(Arrays.asList(
2821
new Document("name", "security")
2922
));
3023
}
3124
}
3225

3326
public static void counterSetup(MongoDatabase database) {
34-
//Setup Counter
35-
if (!database.listCollectionNames().into(new ArrayList<>()).contains("counters")) {
36-
database.createCollection("counters");
27+
if (database.getCollection("counters").countDocuments() == 0) {
3728
Document patternStoreCounter = new Document("_id", "patternStoreCounter").append("sequence_value", 0);
3829
Document architectureStoreCounter = new Document("_id", "architectureStoreCounter").append("sequence_value", 0);
3930
Document adrStoreCounter = new Document("_id", "adrStoreCounter").append("sequence_value", 0);
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
package integration;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
6+
import io.quarkus.test.junit.QuarkusTest;
7+
import io.quarkus.test.junit.TestProfile;
8+
import org.finos.calm.domain.adr.Adr;
9+
import org.finos.calm.domain.adr.AdrMeta;
10+
import org.finos.calm.domain.adr.Decision;
11+
import org.finos.calm.domain.adr.Link;
12+
import org.finos.calm.domain.adr.NewAdrRequest;
13+
import org.finos.calm.domain.adr.Option;
14+
import org.finos.calm.domain.adr.Status;
15+
import org.junit.jupiter.api.*;
16+
17+
import java.util.List;
18+
19+
import static io.restassured.RestAssured.given;
20+
import static org.hamcrest.MatcherAssert.assertThat;
21+
import static org.hamcrest.Matchers.*;
22+
23+
@QuarkusTest
24+
@TestProfile(NitriteIntegrationTestProfile.class)
25+
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
26+
public class NitriteAdrIntegration {
27+
28+
private ObjectMapper objectMapper;
29+
30+
private final String TITLE = "<b>My ADR</b><script><img>";
31+
private final String EXPECTED_TITLE = "<b>My ADR</b>";
32+
private final String PROBLEM_STATEMENT = "<a>My problem is...</a>";
33+
private final String EXPECTED_PROBLEM_STATEMENT = "My problem is...";
34+
private final List<String> DECISION_DRIVERS = List.of("a", "b", "c");
35+
private final Option OPTION_A = new Option("Option A", "optionDescription", List.of("a"), List.of("b"));
36+
private final Option OPTION_B = new Option("Option B", "optionDescription", List.of("c"), List.of("d"));
37+
private final List<Option> CONSIDERED_OPTIONS = List.of(OPTION_A, OPTION_B);
38+
private final String RATIONALE = "This is the best option";
39+
private final Decision DECISION_OUTCOME = new Decision(OPTION_A, RATIONALE);
40+
private final List<Link> LINKS = List.of(new Link("abc", "http://abc.com"));
41+
42+
private final NewAdrRequest newAdr = new NewAdrRequest(TITLE, PROBLEM_STATEMENT, DECISION_DRIVERS,
43+
CONSIDERED_OPTIONS, DECISION_OUTCOME, LINKS);
44+
45+
private final Adr adr = new Adr.AdrBuilder(newAdr).setTitle(EXPECTED_TITLE).setContextAndProblemStatement(EXPECTED_PROBLEM_STATEMENT).setStatus(Status.draft).build();
46+
47+
@BeforeEach
48+
public void setup() {
49+
NitriteSetup.namespaceSetup();
50+
this.objectMapper = new ObjectMapper();
51+
objectMapper.registerModule(new JavaTimeModule());
52+
}
53+
54+
@Test
55+
@Order(1)
56+
void end_to_end_verify_get_with_no_adrs() {
57+
given()
58+
.when().get("/calm/namespaces/finos/adrs")
59+
.then()
60+
.statusCode(200)
61+
.body("values", empty());
62+
}
63+
64+
@Test
65+
@Order(2)
66+
void end_to_end_verify_create_an_adr() throws JsonProcessingException {
67+
given()
68+
.body(objectMapper.writeValueAsString(newAdr))
69+
.header("Content-Type", "application/json")
70+
.when().post("/calm/namespaces/finos/adrs")
71+
.then()
72+
.statusCode(201)
73+
.header("Location", containsString("calm/namespaces/finos/adrs/1"));
74+
}
75+
76+
@Test
77+
@Order(3)
78+
void end_to_end_verify_get_adr_revision() {
79+
AdrMeta expectedAdrMeta = new AdrMeta.AdrMetaBuilder()
80+
.setNamespace("finos")
81+
.setId(1)
82+
.setRevision(1)
83+
.setAdr(adr)
84+
.build();
85+
86+
AdrMeta actualAdrMeta = given()
87+
.when().get("/calm/namespaces/finos/adrs/1/revisions/1")
88+
.then()
89+
.statusCode(200)
90+
.extract()
91+
.body()
92+
.as(AdrMeta.class);
93+
assertThat(actualAdrMeta, is(expectedAdrMeta));
94+
}
95+
96+
@Test
97+
@Order(4)
98+
void end_to_end_verify_get_adr() {
99+
AdrMeta actualAdrMeta = given()
100+
.when().get("/calm/namespaces/finos/adrs/1")
101+
.then()
102+
.statusCode(200)
103+
.extract()
104+
.body()
105+
.as(AdrMeta.class);
106+
107+
AdrMeta expectedAdrMeta = new AdrMeta.AdrMetaBuilder()
108+
.setNamespace("finos")
109+
.setId(1)
110+
.setRevision(1)
111+
.setAdr(adr)
112+
.build();
113+
assertThat(actualAdrMeta, is(expectedAdrMeta));
114+
}
115+
116+
@Test
117+
@Order(5)
118+
void end_to_end_verify_update_an_adr() throws JsonProcessingException {
119+
given()
120+
.body(objectMapper.writeValueAsString(newAdr))
121+
.header("Content-Type", "application/json")
122+
.when().post("/calm/namespaces/finos/adrs/1")
123+
.then()
124+
.statusCode(201)
125+
.header("Location", containsString("calm/namespaces/finos/adrs/1"));
126+
}
127+
128+
@Test
129+
@Order(6)
130+
void end_to_end_verify_get_revisions() {
131+
given()
132+
.when().get("/calm/namespaces/finos/adrs/1/revisions")
133+
.then()
134+
.statusCode(200)
135+
.body("values", hasSize(2))
136+
.body("values[0]", equalTo(1))
137+
.body("values[1]", equalTo(2));
138+
}
139+
140+
@Test
141+
@Order(7)
142+
void end_to_end_verify_update_an_adr_status() {
143+
given()
144+
.when().post("/calm/namespaces/finos/adrs/1/status/proposed")
145+
.then()
146+
.statusCode(201)
147+
.header("Location", containsString("calm/namespaces/finos/adrs/1"));
148+
}
149+
150+
@Test
151+
@Order(8)
152+
void end_to_end_verify_status_changed() {
153+
given()
154+
.when().get("/calm/namespaces/finos/adrs/1/revisions/3")
155+
.then()
156+
.statusCode(200)
157+
.body("adr.status", equalTo("proposed"));
158+
}
159+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package integration;
2+
3+
import io.quarkus.test.junit.QuarkusTest;
4+
import io.quarkus.test.junit.TestProfile;
5+
import org.junit.jupiter.api.*;
6+
7+
import static io.restassured.RestAssured.given;
8+
import static org.hamcrest.Matchers.*;
9+
10+
@QuarkusTest
11+
@TestProfile(NitriteIntegrationTestProfile.class)
12+
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
13+
public class NitriteArchitectureIntegration {
14+
15+
public static final String ARCHITECTURE = "{\"name\": \"demo-pattern\"}";
16+
17+
@BeforeEach
18+
public void setup() {
19+
NitriteSetup.namespaceSetup();
20+
}
21+
22+
@Test
23+
@Order(1)
24+
void end_to_end_get_with_no_architecture() {
25+
given()
26+
.when().get("/calm/namespaces/finos/architectures")
27+
.then()
28+
.statusCode(200)
29+
.body("values", empty());
30+
}
31+
32+
@Test
33+
@Order(2)
34+
void end_to_end_create_an_architecture() {
35+
String payload = """
36+
{
37+
"name": "name",
38+
"description": "description",
39+
"architectureJson": "{\\"name\\": \\"demo-pattern\\"}"
40+
}
41+
""";
42+
43+
given()
44+
.body(payload)
45+
.header("Content-Type", "application/json")
46+
.when().post("/calm/namespaces/finos/architectures")
47+
.then()
48+
.statusCode(201)
49+
.header("Location", containsString("calm/namespaces/finos/architectures/1"));
50+
}
51+
52+
@Test
53+
@Order(3)
54+
void end_to_end_verify_versions() {
55+
given()
56+
.when().get("/calm/namespaces/finos/architectures/1/versions")
57+
.then()
58+
.statusCode(200)
59+
.body("values", hasSize(1))
60+
.body("values[0]", equalTo("1.0.0"));
61+
}
62+
63+
@Test
64+
@Order(4)
65+
void end_to_end_verify_architecture() {
66+
given()
67+
.when().get("/calm/namespaces/finos/architectures/1/versions/1.0.0")
68+
.then()
69+
.statusCode(200)
70+
.body(equalTo(ARCHITECTURE));
71+
}
72+
}

0 commit comments

Comments
 (0)