feat(ui-api): extension for QQQ UI API 1.6.0 (operationIds, BasicErrorResponseV1, QQQ 4.1.0-RC.15) #17
No files matched your search
@@ -46,6 +46,8 @@ Following [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [Semantic
|
||||
|
||||
### Changed
|
||||
|
||||
- UI API extension data-analysis 1.5.0 (requires QQQ 4.1.0-RC.15, UI API 1.6.0): operationIds, standard error responses with BasicErrorResponseV1, extension tags, contract validation for operationIds and schema references, and HTTP error envelope regression assertions.
|
||||
|
||||
- Pin QQQ 4.1.0-RC.7 and replace the temporary help loader with core bundle registration and startup sync.
|
||||
|
||||
- Boolean pivot/crosstab headers now say Yes / No / (Blank). Pivot measures use human labels such as Count, Average Amount, Sum of Amount, Distinct Email, Median Amount and 90th percentile of Amount.
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<properties>
|
||||
<qqq.snapshot.version>4.1.0-RC.7</qqq.snapshot.version>
|
||||
<qqq.snapshot.version>4.1.0-RC.15</qqq.snapshot.version>
|
||||
</properties>
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
|
||||
@@ -76,7 +76,7 @@ public class DataAnalysisApi
|
||||
*******************************************************************************/
|
||||
public static MiddlewareSpecExtension extension()
|
||||
{
|
||||
return (new MiddlewareSpecExtension().withName("data-analysis").withSemanticVersion("1.4.0")
|
||||
return (new MiddlewareSpecExtension().withName("data-analysis").withSemanticVersion("1.5.0")
|
||||
.withDescription("Profiles, pivots, comparisons, distribution shifts, correlations, scatter samples, crosstabs and anomaly watch previews as the signed-in user.")
|
||||
.withSpec(SavedApi.Run.class).withSpec(SavedApi.ListSaved.class).withSpec(SavedApi.Star.class).withSpec(SavedApi.Unstar.class)
|
||||
.withSpec(SavedApi.Sql.class).withSpec(AnalysisFileSpec.class).withSpec(AnalysisFileSpec.Saved.class)
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -136,6 +136,13 @@ class DataAnalysisApiTest extends EngineFixture
|
||||
}
|
||||
var response = invoker.invoke(request);
|
||||
assertThat(response.getStatus()).as(response.getBody()).isEqualTo(status);
|
||||
if(status >= 400)
|
||||
{
|
||||
for(String field : List.of("error", "code", "message", "traceId"))
|
||||
{
|
||||
assertThat(response.getJson().path(field).asText()).as(field).isNotBlank();
|
||||
}
|
||||
}
|
||||
return (response.getJson());
|
||||
}
|
||||
|
||||
@@ -282,7 +289,7 @@ class DataAnalysisApiTest extends EngineFixture
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
** Generated fragment is committed verbatim and has all fourteen operations.
|
||||
** Generated fragment matches the committed contract and validates all references.
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
void contract() throws Exception
|
||||
@@ -296,8 +303,9 @@ class DataAnalysisApiTest extends EngineFixture
|
||||
Files.createDirectories(path.getParent());
|
||||
Files.writeString(path, yaml);
|
||||
}
|
||||
assertThat(Files.exists(path)).as("Regenerate with ./mvnw -o test -Dtest=DataAnalysisApiTest#contract -Dopenapi.write=true -Dqqq.snapshot.version=4.1.0-DATAANALYSIS-SNAPSHOT").isTrue();
|
||||
assertThat(Files.exists(path)).as("Regenerate with ./mvnw -o test -Dtest=DataAnalysisApiTest#contract -Dopenapi.write=true -Dqqq.snapshot.version=4.1.99-SNAPSHOT").isTrue();
|
||||
assertThat(Files.readString(path).replace("\r\n", "\n")).as("OpenAPI changed: regenerate with -Dopenapi.write=true").isEqualTo(yaml.replace("\r\n", "\n"));
|
||||
assertThat(UiApiContract.check(yaml, Files.readString(path), null, 1, "-Dopenapi.write=true")).isEmpty();
|
||||
}
|
||||
@Test
|
||||
void pivotHttp() throws Exception
|
||||
@@ -364,7 +372,7 @@ class DataAnalysisApiTest extends EngineFixture
|
||||
}
|
||||
relationshipCountDrills(call(HttpMethod.POST, "/tables/{table}/crosstab", Map.of("rowField", "status", "columnField", "customer"), 200));
|
||||
// All new schemas are discoverable from the same served OpenAPI catalog.
|
||||
assertThat(com.kingsrook.qbits.dataanalysis.api.DataAnalysisApi.extension().getSemanticVersion()).isEqualTo("1.4.0");
|
||||
assertThat(com.kingsrook.qbits.dataanalysis.api.DataAnalysisApi.extension().getSemanticVersion()).isEqualTo("1.5.0");
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
Reference in new issue
Block a user