Skip to content

Commit

Permalink
✨ : add user information in job lifecycle
Browse files Browse the repository at this point in the history
  • Loading branch information
cdubuisson committed Aug 9, 2019
1 parent 0cfe94f commit 2a7be79
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 27 deletions.
16 changes: 16 additions & 0 deletions src/main/java/io/codeka/gaia/bo/Job.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.codeka.gaia.bo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.codeka.gaia.teams.bo.User;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.DBRef;

import java.io.StringWriter;
import java.io.Writer;
Expand Down Expand Up @@ -34,6 +36,16 @@ public class Job {

private String cliVersion;

@DBRef
private User user;

public Job(User user) {
if (user == null) {
throw new AssertionError("A job must have a non null user!");
}
this.user = user;
}

public String getId() {
return id;
}
Expand Down Expand Up @@ -123,4 +135,8 @@ public Long getExecutionTime() {
public void setExecutionTime(Long executionTime) {
this.executionTime = executionTime;
}

public User getUser() {
return user;
}
}
15 changes: 8 additions & 7 deletions src/main/java/io/codeka/gaia/controller/StackController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import io.codeka.gaia.repository.StackRepository;
import io.codeka.gaia.repository.TerraformModuleRepository;
import io.codeka.gaia.runner.StackRunner;
import io.codeka.gaia.teams.bo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
Expand Down Expand Up @@ -55,15 +56,15 @@ public String editStack(@PathVariable String stackId, Model model){
}

@GetMapping("/stacks/{stackId}/apply")
public String applyStack(@PathVariable String stackId, Model model){
public String applyStack(@PathVariable String stackId, Model model, User user){
// checking if the stack exists
// TODO throw an exception (404) if not
if(stackRepository.existsById(stackId)){
model.addAttribute("stackId", stackId);
}

// create a new job
var job = new Job();
var job = new Job(user);
job.setId(UUID.randomUUID().toString());
job.setStackId(stackId);

Expand All @@ -80,15 +81,15 @@ public String applyStack(@PathVariable String stackId, Model model){
}

@GetMapping("/stacks/{stackId}/preview")
public String previewStack(@PathVariable String stackId, Model model){
public String previewStack(@PathVariable String stackId, Model model, User user){
// checking if the stack exists
// TODO throw an exception (404) if not
if(stackRepository.existsById(stackId)){
model.addAttribute("stackId", stackId);
}

// create a new job
var job = new Job();
var job = new Job(user);
job.setId(UUID.randomUUID().toString());
job.setStackId(stackId);

Expand Down Expand Up @@ -125,15 +126,15 @@ public Job getJob(@PathVariable String stackId, @PathVariable String jobId){
}

@GetMapping("/stacks/{stackId}/stop")
public String stopStack(@PathVariable String stackId, Model model){
public String stopStack(@PathVariable String stackId, Model model, User user){
// checking if the stack exists
// TODO throw an exception (404) if not
if(stackRepository.existsById(stackId)){
model.addAttribute("stackId", stackId);
}

// create a new job
var job = new Job();
var job = new Job(user);
job.setId(UUID.randomUUID().toString());
job.setStackId(stackId);

Expand All @@ -149,4 +150,4 @@ public String stopStack(@PathVariable String stackId, Model model){
return "job";
}

}
}
2 changes: 2 additions & 0 deletions src/main/resources/templates/stack.html
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@

<div th:replace="vue_templates/stack-vars"></div>
<div th:replace="vue_templates/breadcrumb"></div>
<div th:replace="vue_templates/user-badge"></div>

<template id="stack-controls">
<div class="page_controls">
Expand Down Expand Up @@ -150,6 +151,7 @@ <h2><span><i class="fas fa-history"></i> Job history</span></h2>
<span class="job_attr_id">Date</span><span class="job_attr_value">{{job.startDateTime | dateTime}}</span>
({{job.executionTime}}&nbsp;ms)
</div>
<div><span class="job_attr_id">User</span><user-badge :user="job.user" :css-class="'job_attr_value'"></user-badge></div>
</div>
</li>
</ul>
Expand Down
32 changes: 24 additions & 8 deletions src/test/java/io/codeka/gaia/bo/JobTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.codeka.gaia.bo;

import io.codeka.gaia.teams.bo.User;
import org.junit.jupiter.api.Test;

import java.io.PrintWriter;
Expand All @@ -8,12 +9,13 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

class JobTest {

@Test
void getLogs_shouldReturnOutputStreamResult() {
var job = new Job();
var job = new Job(new User());

PrintWriter printWriter = new PrintWriter(job.getLogsWriter());
printWriter.println("Test Line 1");
Expand All @@ -26,7 +28,7 @@ void getLogs_shouldReturnOutputStreamResult() {

@Test
void start_shouldSetStatusToRunning() {
var job = new Job();
var job = new Job(new User());

job.start(null);

Expand All @@ -35,7 +37,7 @@ void start_shouldSetStatusToRunning() {

@Test
void start_shouldSetType() {
var job = new Job();
var job = new Job(new User());

job.start(JobType.RUN);

Expand All @@ -44,7 +46,7 @@ void start_shouldSetType() {

@Test
void start_shouldSetStartDateTime() {
var job = new Job();
var job = new Job(new User());
job.setStartDateTime(null);

job.start(null);
Expand All @@ -54,7 +56,7 @@ void start_shouldSetStartDateTime() {

@Test
void end_shouldSetStatusToFinished() {
var job = new Job();
var job = new Job(new User());
job.setStartDateTime(LocalDateTime.now());

job.end();
Expand All @@ -64,7 +66,7 @@ void end_shouldSetStatusToFinished() {

@Test
void end_shouldSetEndDateTime() {
var job = new Job();
var job = new Job(new User());
job.setStartDateTime(LocalDateTime.now());
job.setEndDateTime(null);
job.setExecutionTime(null);
Expand All @@ -78,7 +80,7 @@ void end_shouldSetEndDateTime() {

@Test
void fail_shouldSetStatusToFinished() {
var job = new Job();
var job = new Job(new User());
job.setStartDateTime(LocalDateTime.now());

job.fail();
Expand All @@ -88,7 +90,7 @@ void fail_shouldSetStatusToFinished() {

@Test
void fail_shouldSetEndDateTime() {
var job = new Job();
var job = new Job(new User());
job.setStartDateTime(LocalDateTime.now());
job.setEndDateTime(null);
job.setExecutionTime(null);
Expand All @@ -100,4 +102,18 @@ void fail_shouldSetEndDateTime() {
assertThat(job.getExecutionTime()).isNotNull().isEqualTo(timer);
}

@Test
void job_shouldSetUser() {
var user = new User("test");

var job = new Job(user);

assertThat(job.getUser()).isNotNull().isEqualTo(user);
}

@Test
void job_shouldThrowAnExceptionIfUserIsNull() {
assertThrows(AssertionError.class, () -> new Job(null));
}

}
11 changes: 10 additions & 1 deletion src/test/java/io/codeka/gaia/repository/JobRepositoryIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import io.codeka.gaia.bo.Job;
import io.codeka.gaia.bo.JobStatus;
import io.codeka.gaia.teams.bo.User;
import io.codeka.gaia.teams.repository.UserRepository;
import io.codeka.gaia.test.MongoContainer;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -23,12 +25,18 @@ class JobRepositoryIT {
@Autowired
JobRepository jobRepository;

@Autowired
UserRepository userRepository;

@Container
private static MongoContainer mongo = new MongoContainer();

@Test
void jobShouldBeSavedWithLogs() throws IOException {
var job = new Job();
var user = new User("test_it");
userRepository.save(user);

var job = new Job(user);
job.setId("12");
job.setStackId("42");

Expand All @@ -45,6 +53,7 @@ void jobShouldBeSavedWithLogs() throws IOException {
assertEquals("42", job.getStackId());
assertEquals(JobStatus.FINISHED, job.getStatus());
assertEquals("some logs", job.getLogs());
assertEquals(user, job.getUser());
}

}
5 changes: 2 additions & 3 deletions src/test/java/io/codeka/gaia/runner/StackRunnerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@
import io.codeka.gaia.bo.*;
import io.codeka.gaia.repository.JobRepository;
import io.codeka.gaia.repository.StackRepository;
import org.hamcrest.Matchers;
import io.codeka.gaia.teams.bo.User;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Answers;
import org.mockito.ArgumentMatchers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
Expand Down Expand Up @@ -65,7 +64,7 @@ void setUp() throws Exception {
when(dockerClient.createContainer(any())).thenReturn(containerCreation);

stack = new Stack();
job = new Job();
job = new Job(new User());
module = new TerraformModule();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import io.codeka.gaia.bo.TerraformModule;
import io.codeka.gaia.repository.JobRepository;
import io.codeka.gaia.repository.TerraformModuleRepository;
import io.codeka.gaia.teams.bo.User;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
Expand All @@ -18,7 +19,7 @@
import java.util.List;
import java.util.Optional;

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
Expand Down Expand Up @@ -60,7 +61,7 @@ void stacksWithOneRunJob_shouldHaveCostEqualToRunningTime(){
when(moduleRepository.findById("42")).thenReturn(Optional.of(module));

// a job started two days ago
var job = new Job();
var job = new Job(new User());
job.start(JobType.RUN);
job.end();
job.setStartDateTime(LocalDateTime.now().minusDays(2));
Expand All @@ -85,13 +86,13 @@ void stacksWithOneRunJobAndOneStopJob_shouldHaveCostEqualToRunningTime(){
when(moduleRepository.findById("42")).thenReturn(Optional.of(module));

// a job started two days ago
var job = new Job();
var job = new Job(new User());
job.start(JobType.RUN);
job.end();
job.setStartDateTime(LocalDateTime.now().minusDays(2));

// a job stopped one day ago
var jobStop = new Job();
var jobStop = new Job(new User());
jobStop.start(JobType.STOP);
jobStop.end();
jobStop.setStartDateTime(LocalDateTime.now().minusDays(1));
Expand All @@ -117,19 +118,19 @@ void stacksWithOneRunJobAndOneStopJobAndRelaunchedOneHourAgo_shouldHaveCostEqual
when(moduleRepository.findById("42")).thenReturn(Optional.of(module));

// a job started two days ago
var job = new Job();
var job = new Job(new User());
job.start(JobType.RUN);
job.end();
job.setStartDateTime(LocalDateTime.now().minusDays(2));

// a job stopped one day ago
var jobStop = new Job();
var jobStop = new Job(new User());
jobStop.start(JobType.STOP);
jobStop.end();
jobStop.setStartDateTime(LocalDateTime.now().minusDays(1));

// a job started 6 hours ago
var jobRelaunch = new Job();
var jobRelaunch = new Job(new User());
jobRelaunch.start(JobType.RUN);
jobRelaunch.end();
jobRelaunch.setStartDateTime(LocalDateTime.now().minusHours(1));
Expand All @@ -151,7 +152,7 @@ void stacksWithModuleHavingNoCost_shouldHaveZeroCost(){
stack.setModuleId("42");

// a job started two days ago
var job = new Job();
var job = new Job(new User());
job.start(JobType.RUN);
job.end();
job.setStartDateTime(LocalDateTime.now().minusDays(2));
Expand Down

0 comments on commit 2a7be79

Please sign in to comment.