Skip to content

Commit c1688c1

Browse files
authored
feat(server, ui): Show dataset usage in dataset page (#204)
1 parent 1043a71 commit c1688c1

File tree

23 files changed

+340
-29
lines changed

23 files changed

+340
-29
lines changed

chutney/server-core/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@
7272
<groupId>org.springframework</groupId>
7373
<artifactId>spring-web</artifactId>
7474
</dependency>
75+
<dependency>
76+
<groupId>org.springframework.data</groupId>
77+
<artifactId>spring-data-commons</artifactId>
78+
<scope>compile</scope>
79+
</dependency>
7580

7681
<!-- Test -->
7782
<dependency>

chutney/server-core/src/main/java/com/chutneytesting/server/core/domain/dataset/DataSet.java

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import static java.time.temporal.ChronoUnit.MILLIS;
1111
import static java.util.Collections.emptyList;
1212
import static java.util.Collections.emptyMap;
13+
import static java.util.Collections.emptySet;
1314
import static java.util.Optional.ofNullable;
1415
import static java.util.stream.Collectors.toList;
1516
import static org.apache.commons.lang3.StringUtils.isNotBlank;
@@ -19,13 +20,14 @@
1920
import java.util.List;
2021
import java.util.Map;
2122
import java.util.Objects;
23+
import java.util.Set;
2224
import java.util.stream.Collectors;
2325
import org.apache.commons.lang3.StringUtils;
2426

2527
public class DataSet {
2628

2729
public static Comparator<DataSet> datasetComparator = Comparator.comparing(DataSet::getName, String.CASE_INSENSITIVE_ORDER);
28-
public static DataSet NO_DATASET = new DataSet(null, null, null, null, null, emptyMap(), emptyList());
30+
public static DataSet NO_DATASET = new DataSet(null, null, null, null, null, emptyMap(), emptyList(), emptySet(), emptyMap(), emptySet());
2931

3032
public final String id;
3133
public final String name;
@@ -34,15 +36,21 @@ public class DataSet {
3436
public final List<String> tags;
3537
public final Map<String, String> constants;
3638
public final List<Map<String, String>> datatable;
39+
public final Set<String> campaignUsage;
40+
public final Map<String, Set<String>> scenarioInCampaignUsage;
41+
public final Set<String> scenarioUsage;
3742

38-
private DataSet(String id, String name, String description, Instant creationDate, List<String> tags, Map<String, String> constants, List<Map<String, String>> datatable) {
43+
private DataSet(String id, String name, String description, Instant creationDate, List<String> tags, Map<String, String> constants, List<Map<String, String>> datatable, Set<String> campaignUsage, Map<String, Set<String>> scenarioInCampaignUsage, Set<String> scenarioUsage) {
3944
this.id = id;
4045
this.name = name;
4146
this.description = description;
4247
this.creationDate = creationDate;
4348
this.tags = tags;
4449
this.constants = constants;
4550
this.datatable = datatable;
51+
this.campaignUsage = campaignUsage;
52+
this.scenarioInCampaignUsage = scenarioInCampaignUsage;
53+
this.scenarioUsage = scenarioUsage;
4654
}
4755

4856
private String getName() {
@@ -88,6 +96,9 @@ public static class DataSetBuilder {
8896
private List<String> tags;
8997
private Map<String, String> constants;
9098
private List<Map<String, String>> datatable;
99+
public Set<String> campaignUsage;
100+
public Set<String> scenarioUsage;
101+
public Map<String, Set<String>> scenarioInCampaignUsage;
91102

92103
private DataSetBuilder() {
93104
}
@@ -104,7 +115,10 @@ public DataSet build() {
104115
ofNullable(creationDate).orElseGet(() -> Instant.now().truncatedTo(MILLIS)),
105116
(ofNullable(tags).orElse(emptyList())).stream().map(String::toUpperCase).map(String::strip).collect(toList()),
106117
cleanConstants(ofNullable(constants).orElse(emptyMap())),
107-
cleanDatatable(ofNullable(datatable).orElse(emptyList()))
118+
cleanDatatable(ofNullable(datatable).orElse(emptyList())),
119+
ofNullable(campaignUsage).orElse(emptySet()),
120+
ofNullable(scenarioInCampaignUsage).orElse(emptyMap()),
121+
ofNullable(scenarioUsage).orElse(emptySet())
108122
);
109123
}
110124

@@ -147,6 +161,21 @@ public DataSetBuilder withDatatable(List<Map<String, String>> datatable) {
147161
return this;
148162
}
149163

164+
public DataSetBuilder withScenarioUsage(Set<String> scenarioUsage) {
165+
this.scenarioUsage = scenarioUsage;
166+
return this;
167+
}
168+
169+
public DataSetBuilder withCampaignUsage(Set<String> campaignUsage) {
170+
this.campaignUsage = campaignUsage;
171+
return this;
172+
}
173+
174+
public DataSetBuilder withScenarioInCampaign(Map<String, Set<String>> scenarioInCampaignUsage) {
175+
this.scenarioInCampaignUsage = scenarioInCampaignUsage;
176+
return this;
177+
}
178+
150179
public DataSetBuilder fromDataSet(DataSet dataset) {
151180
return new DataSetBuilder()
152181
.withId(dataset.id)
@@ -155,7 +184,10 @@ public DataSetBuilder fromDataSet(DataSet dataset) {
155184
.withCreationDate(dataset.creationDate)
156185
.withTags(dataset.tags)
157186
.withConstants(dataset.constants)
158-
.withDatatable(dataset.datatable);
187+
.withDatatable(dataset.datatable)
188+
.withCampaignUsage(dataset.campaignUsage)
189+
.withScenarioUsage(dataset.scenarioUsage)
190+
.withScenarioInCampaign(dataset.scenarioInCampaignUsage);
159191
}
160192

161193
private Map<String, String> cleanConstants(Map<String, String> constants) {

chutney/server-core/src/main/java/com/chutneytesting/server/core/domain/scenario/AggregatedRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public interface AggregatedRepository<T extends TestCase> {
2020

2121
List<TestCaseMetadata> findAll();
2222

23+
List<TestCaseMetadata> findAllByDatasetId(String datasetId);
24+
2325
void removeById(String testCaseId);
2426

2527
Optional<Integer> lastVersion(String testCaseId);

chutney/server/src/main/java/com/chutneytesting/campaign/domain/CampaignRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ public interface CampaignRepository {
3333
List<Campaign> findCampaignsByScenarioId(String scenarioId);
3434

3535
List<Campaign> findCampaignsByEnvironment(String environment);
36+
37+
List<Campaign> findCampaignsByDatasetId(String datasetId);
3638
}

chutney/server/src/main/java/com/chutneytesting/campaign/infra/CampaignJpaRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ void saveWithExplicitId(
2424
String description);
2525

2626
List<CampaignEntity> findByEnvironment(String environment);
27+
List<CampaignEntity> findByDatasetId(String dataset);
2728
}

chutney/server/src/main/java/com/chutneytesting/campaign/infra/CampaignScenarioJpaRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@
1515
public interface CampaignScenarioJpaRepository extends CrudRepository<CampaignScenarioEntity, Long>, JpaSpecificationExecutor<CampaignScenarioEntity> {
1616

1717
List<CampaignScenarioEntity> findAllByScenarioId(String scenarioId);
18+
List<CampaignScenarioEntity> findAllByDatasetId(String datasetId);
1819
}

chutney/server/src/main/java/com/chutneytesting/campaign/infra/DatabaseCampaignRepository.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,14 @@ public List<Campaign> findCampaignsByEnvironment(String environment) {
136136
.map(CampaignEntity::toDomain)
137137
.toList();
138138
}
139+
140+
@Override
141+
public List<Campaign> findCampaignsByDatasetId(String datasetId) {
142+
if (isNullOrEmpty(datasetId)) {
143+
return emptyList();
144+
}
145+
return campaignJpaRepository.findByDatasetId(datasetId).stream()
146+
.map(CampaignEntity::toDomain)
147+
.toList();
148+
}
139149
}

chutney/server/src/main/java/com/chutneytesting/dataset/api/DataSetController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ public DataSetController(DatasetService datasetService) {
4242

4343
@PreAuthorize("hasAuthority('DATASET_READ') or hasAuthority('SCENARIO_WRITE') or hasAuthority('CAMPAIGN_WRITE')")
4444
@GetMapping(path = "", produces = MediaType.APPLICATION_JSON_VALUE)
45-
public List<DataSetDto> findAll() {
46-
return datasetService.findAll()
45+
public List<DataSetDto> findAll(@RequestParam("usage") Optional<Boolean> query) {
46+
return datasetService.findAll(query.orElse(false))
4747
.stream()
4848
.map(DataSetMapper::toDto)
4949
.collect(Collectors.toList());

chutney/server/src/main/java/com/chutneytesting/dataset/api/DataSetDto.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import static java.time.Instant.now;
1111
import static java.util.Collections.emptyList;
12+
import static java.util.Collections.emptyMap;
1213
import static java.util.stream.Collectors.counting;
1314
import static java.util.stream.Collectors.groupingBy;
1415

@@ -19,6 +20,7 @@
1920
import java.util.List;
2021
import java.util.Map;
2122
import java.util.Optional;
23+
import java.util.Set;
2224
import org.immutables.value.Value;
2325

2426
@Value.Immutable
@@ -57,6 +59,21 @@ default List<List<KeyValue>> datatable() {
5759
return emptyList();
5860
}
5961

62+
@Value.Default()
63+
default List<String> scenarioUsage() {
64+
return emptyList();
65+
}
66+
67+
@Value.Default()
68+
default List<String> campaignUsage() {
69+
return emptyList();
70+
}
71+
72+
@Value.Default()
73+
default Map<String, Set<String>> scenarioInCampaignUsage() {
74+
return emptyMap();
75+
}
76+
6077
default List<String> duplicatedHeaders() {
6178
if(!datatable().isEmpty()) {
6279
List<String> headers = datatable().get(0).stream().map(KeyValue::key).toList();

chutney/server/src/main/java/com/chutneytesting/dataset/api/DataSetMapper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public static DataSetDto toDto(DataSet dataSet) {
2828
if (dataSet.tags != null) datasetBuilder.tags(dataSet.tags);
2929
if (dataSet.description != null) datasetBuilder.description(dataSet.description);
3030
if (dataSet.creationDate != null) datasetBuilder.lastUpdated(dataSet.creationDate);
31+
if (dataSet.campaignUsage != null) datasetBuilder.campaignUsage(dataSet.campaignUsage);
32+
if (dataSet.scenarioUsage != null) datasetBuilder.scenarioUsage(dataSet.scenarioUsage);
33+
if (dataSet.scenarioInCampaignUsage != null) datasetBuilder.scenarioInCampaignUsage(dataSet.scenarioInCampaignUsage);
3134
return datasetBuilder.build();
3235
}
3336

0 commit comments

Comments
 (0)