Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Commit

Permalink
fix(server): update campaigns and scenarios on dataset delete
Browse files Browse the repository at this point in the history
  • Loading branch information
rbenyoussef authored and KarimGl committed Feb 2, 2024
1 parent 2c38879 commit fcde71a
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,22 @@ public String executionEnvironment() {
return this.environment;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Campaign campaign = (Campaign) o;
return id.equals(campaign.id) &&
title.equals(campaign.title) &&
description.equals(campaign.description) &&
scenarioIds.equals(campaign.scenarioIds) &&
parallelRun == campaign.parallelRun &&
retryAuto == campaign.retryAuto &&
environment.equals(campaign.environment) &&
externalDatasetId.equals(campaign.externalDatasetId) &&
tags.equals(campaign.tags);
}

private <T> List<T> initListNullOrEmpty(List<T> list) {
if (list != null && !list.isEmpty()) {
return list;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,20 @@ public CampaignBuilder setTags(List<String> tags) {
return this;
}

public CampaignBuilder from(Campaign campaign) {
this.id = campaign.id;
this.title = campaign.title;
this.description = campaign.description;
this.scenarioIds = campaign.scenarioIds;
this.environment = campaign.executionEnvironment();
this.parallelRun = campaign.parallelRun;
this.retryAuto = campaign.retryAuto;
this.externalDatasetId = campaign.externalDatasetId;
this.tags = campaign.tags;

return this;
}

public Campaign build() {
return new Campaign(id, title, description, scenarioIds, environment, parallelRun, retryAuto, externalDatasetId, tags);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@
import static java.util.Optional.ofNullable;
import static java.util.stream.Collectors.toList;

import com.chutneytesting.campaign.domain.CampaignRepository;
import com.chutneytesting.scenario.domain.gwt.GwtTestCase;
import com.chutneytesting.server.core.domain.dataset.DataSet;
import com.chutneytesting.server.core.domain.dataset.DataSetNotFoundException;
import com.chutneytesting.server.core.domain.scenario.AggregatedRepository;
import com.chutneytesting.server.core.domain.scenario.TestCaseMetadataImpl;
import com.chutneytesting.server.core.domain.scenario.campaign.CampaignBuilder;
import java.util.List;
import java.util.Optional;
import org.springframework.stereotype.Component;
Expand All @@ -32,10 +34,12 @@
public class DatasetService {

private final DataSetRepository datasetRepository;
private final CampaignRepository campaignRepository;
private final AggregatedRepository<GwtTestCase> testCaseRepository;

public DatasetService(DataSetRepository dataSetRepository, AggregatedRepository<GwtTestCase> testCaseRepository) {
public DatasetService(DataSetRepository dataSetRepository, CampaignRepository campaignRepository, AggregatedRepository<GwtTestCase> testCaseRepository) {
this.datasetRepository = dataSetRepository;
this.campaignRepository = campaignRepository;
this.testCaseRepository = testCaseRepository;
}

Expand All @@ -62,6 +66,7 @@ public DataSet update(Optional<String> oldId, DataSet dataset) {
oldId.ifPresent(old -> {
if (!dataset.id.equals(newId)) {
updateScenarios(old, newId);
updateCampaigns(old, newId);
datasetRepository.removeById(old);
}
});
Expand All @@ -84,8 +89,22 @@ private void updateScenarios(String oldId, String newId) {
);
}

private void updateCampaigns(String oldId, String newId) {
campaignRepository.findAll().stream()
.filter(c -> oldId.equals(c.externalDatasetId))
.forEach(c -> campaignRepository.createOrUpdate(
CampaignBuilder.builder()
.from(c)
.setExternalDatasetId(newId)
.build())
);
}


public void remove(String datasetName) {
datasetRepository.removeById(datasetName);
updateScenarios(datasetName, "");
updateCampaigns(datasetName, "");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,24 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import com.chutneytesting.campaign.domain.CampaignRepository;
import com.chutneytesting.scenario.domain.gwt.GwtScenario;
import com.chutneytesting.scenario.domain.gwt.GwtTestCase;
import com.chutneytesting.server.core.domain.dataset.DataSet;
import com.chutneytesting.server.core.domain.scenario.AggregatedRepository;
import com.chutneytesting.server.core.domain.scenario.TestCaseMetadataImpl;
import com.chutneytesting.server.core.domain.scenario.campaign.Campaign;
import com.chutneytesting.server.core.domain.scenario.campaign.CampaignBuilder;
import java.util.List;
import org.junit.jupiter.api.Test;

class DatasetServiceTest {

private final DataSetRepository datasetRepository = mock(DataSetRepository.class);
private final CampaignRepository campaignRepository = mock(CampaignRepository.class);
private final AggregatedRepository<GwtTestCase> testCaseRepository = mock(AggregatedRepository.class);

DatasetService sut = new DatasetService(datasetRepository, testCaseRepository);
DatasetService sut = new DatasetService(datasetRepository, campaignRepository, testCaseRepository);

@Test
public void should_sort_dataset_by_name() {
Expand Down Expand Up @@ -77,8 +81,34 @@ public void should_update_dataset_reference_in_scenarios_on_rename() {
}

@Test
void should_prevent_deletion_of_used_dataset() {
// TODO - check if dataset is in used using a count
void should_remove_deleted_dataset_from_campaigns_and_scenarios() {
String datasetId = "dataset_id";

TestCaseMetadataImpl metadata = TestCaseMetadataImpl.builder().withDefaultDataset(datasetId).build();
when(testCaseRepository.findAll()).thenReturn(List.of(metadata));

GwtTestCase testCase = GwtTestCase.builder().withMetadata(metadata).withScenario(mock(GwtScenario.class)).build();
when(testCaseRepository.findById(any())).thenReturn(of(testCase));

Campaign campaign = CampaignBuilder.builder()
.setId(1L)
.setTitle("Campaign")
.setDescription("")
.setEnvironment("Env")
.setTags(List.of())
.setExternalDatasetId(datasetId)
.build();
when(campaignRepository.findAll()).thenReturn(List.of(campaign));

GwtTestCase expectedScenario = GwtTestCase.builder().from(testCase).withMetadata(
TestCaseMetadataImpl.TestCaseMetadataBuilder.from(metadata).build()
).build();
Campaign expectedCampaign = CampaignBuilder.builder().from(campaign).setExternalDatasetId("").build();

sut.remove(datasetId);

verify(testCaseRepository, times(1)).save(expectedScenario);
verify(campaignRepository, times(1)).createOrUpdate(expectedCampaign);
}

@Test
Expand Down

0 comments on commit fcde71a

Please sign in to comment.