Sai Prakash | Make Create Experiment Return ExperimentEntity On Success (#19)

* Sai Prakash | Make Create Experiment Return ExperimentEntity On Success

* Sai Prakash | Make Create Experiment Return LitmusExperiment On Success

* Sai Prakash | Test Cases
This commit is contained in:
Mandhadi Reddy
2022-08-17 10:55:48 +05:30
committed by GitHub Enterprise
parent 33ae31434e
commit 388e00055e
7 changed files with 107 additions and 8 deletions

View File

@@ -80,6 +80,26 @@
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.4.Final</version>
</dependency>
</dependencies>

View File

@@ -1,5 +1,6 @@
package com.navi.medici.controller.v1;
import com.navi.medici.entity.ExperimentEntity;
import com.navi.medici.request.v1.LitmusExperiment;
import com.navi.medici.request.v1.LitmusExperimentStrategyUpdate;
import com.navi.medici.response.LitmusExperimentCollection;
@@ -30,8 +31,8 @@ public class ExperimentController {
@PostMapping(value = "/create", consumes = MediaType.APPLICATION_JSON_VALUE)
@Timed(value = "litmus.create.experiment", percentiles = {0.95, 0.99})
public void createExperiment(@RequestBody LitmusExperiment litmusExperimentRequest) {
experimentService.create(litmusExperimentRequest);
public ResponseEntity<LitmusExperiment> createExperiment(@RequestBody LitmusExperiment litmusExperimentRequest) {
return ResponseEntity.ok(experimentService.create(litmusExperimentRequest));
}

View File

@@ -1,5 +1,6 @@
package com.navi.medici.service.experiment;
import com.navi.medici.entity.ExperimentEntity;
import com.navi.medici.request.v1.LitmusExperiment;
import com.navi.medici.request.v1.LitmusExperimentStrategyUpdate;
import com.navi.medici.response.LitmusExperimentCollection;
@@ -8,7 +9,7 @@ import java.util.List;
public interface ExperimentService {
void create(LitmusExperiment litmusExperimentRequest);
LitmusExperiment create(LitmusExperiment litmusExperimentRequest);
LitmusExperimentCollection fetchAllExperiments();

View File

@@ -29,7 +29,7 @@ public record ExperimentServiceImpl(IExperimentQuery experimentQuery,
JacksonUtils jacksonUtils) implements ExperimentService {
@Override
public void create(LitmusExperiment litmusExperimentRequest) {
public LitmusExperiment create(LitmusExperiment litmusExperimentRequest) {
var existingExperimentCheck = experimentQuery.findByName(litmusExperimentRequest.getName());
if (existingExperimentCheck.isPresent()) {
throw new ExperimentAlreadyExistException(String.format("experiment %s already exist in the system", litmusExperimentRequest.getName()));
@@ -48,7 +48,8 @@ public record ExperimentServiceImpl(IExperimentQuery experimentQuery,
.endTime(litmusExperimentRequest.getEndTime())
.build();
experimentQuery.save(experiment);
return build(experimentQuery.save(experiment));
}

View File

@@ -0,0 +1,76 @@
package com.navi.medici.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.navi.medici.controller.v1.ExperimentController;
import com.navi.medici.exceptions.ExperimentAlreadyExistException;
import com.navi.medici.request.v1.LitmusExperiment;
import com.navi.medici.service.experiment.ExperimentService;
import com.navi.medici.strategy.ActivationStrategy;
import com.navi.medici.util.JacksonUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.mockito.ArgumentMatchers.any;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@ExtendWith(MockitoExtension.class)
public class ExperimentControllerTest {
@InjectMocks
private ExperimentController experimentController;
@Mock
private ExperimentService experimentService;
private MockMvc mockMvc;
private JacksonUtils jacksonUtils;
@BeforeEach
public void setup() {
jacksonUtils = new JacksonUtils(new ObjectMapper());
mockMvc = MockMvcBuilders.standaloneSetup(experimentController).build();
}
@Test
public void shouldCreateExperiment() throws Exception {
Map<String, String> parameters = new HashMap<>();
parameters.put("rollout", "10");
ActivationStrategy activationStrategy = ActivationStrategy.builder()
.name("flexibleRollout")
.parameters(parameters)
.build();
LitmusExperiment litmusExperiment = LitmusExperiment.builder()
.name("sample-experiment")
.enabled(true)
.archived(false)
.strategies(List.of(activationStrategy))
.vertical("SA")
.build();
Mockito.when(experimentService.create(any())).thenReturn(litmusExperiment);
MockHttpServletRequestBuilder request
= MockMvcRequestBuilders.post("/v1/experiments/create")
.contentType(MediaType.APPLICATION_JSON)
.content(jacksonUtils.objectToString(litmusExperiment));
mockMvc.perform(request)
.andExpect(status().isOk());
}
}

View File

@@ -37,7 +37,7 @@ public class ExperimentQueryImpl implements IExperimentQuery {
}
@Override
public void save(ExperimentEntity experiment) {
experimentRepository.save(experiment);
public ExperimentEntity save(ExperimentEntity experiment) {
return experimentRepository.save(experiment);
}
}

View File

@@ -13,5 +13,5 @@ public interface IExperimentQuery {
List<ExperimentEntity> findByVertical(String vertical, Long pollingTime);
void save(ExperimentEntity experiment);
ExperimentEntity save(ExperimentEntity experiment);
}