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:
committed by
GitHub Enterprise
parent
33ae31434e
commit
388e00055e
@@ -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>
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,5 +13,5 @@ public interface IExperimentQuery {
|
||||
|
||||
List<ExperimentEntity> findByVertical(String vertical, Long pollingTime);
|
||||
|
||||
void save(ExperimentEntity experiment);
|
||||
ExperimentEntity save(ExperimentEntity experiment);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user