Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Delete task #8

Open
wants to merge 36 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
1695326
Testes Unitarios da aplicacao
rodrigofa1305 Apr 1, 2021
eaa2a38
Testando os Testes
rodrigofa1305 Apr 1, 2021
32856f8
Correção do Teste Unitário
rodrigofa1305 Apr 1, 2021
c7a4765
pipeline
rodrigofa1305 Apr 5, 2021
ed1f051
pipeline evolucao
rodrigofa1305 Apr 5, 2021
086dcf8
pipeline evolucao para test
rodrigofa1305 Apr 5, 2021
32b514e
pipeline evolucao para test com Sonar Qube
rodrigofa1305 Apr 5, 2021
a200d22
pipeline evolucao para test com Sonar Qube 2
rodrigofa1305 Apr 5, 2021
61beded
pipeline evolucao para test com Sonar Qube 3
rodrigofa1305 Apr 5, 2021
ae6364f
pipeline evolucao para test com Sonar Qube 4
rodrigofa1305 Apr 5, 2021
07ff190
pipeline evolucao para test com Sonar Qube 5
rodrigofa1305 Apr 5, 2021
88efc05
pipeline evolucao para test com Sonar Qube 6
rodrigofa1305 Apr 5, 2021
00f9ccc
Deploy backend
rodrigofa1305 Apr 6, 2021
f953142
Deploy backend 2
rodrigofa1305 Apr 6, 2021
a5a006c
Deploy backend 3
rodrigofa1305 Apr 6, 2021
d45693d
Deploy backend 4
rodrigofa1305 Apr 6, 2021
17139cc
Deploy backend 5
rodrigofa1305 Apr 6, 2021
22ce3ac
Deploy backend 6
rodrigofa1305 Apr 6, 2021
cf796ba
Evolucao do Pipeline
rodrigofa1305 Apr 7, 2021
ff88704
Evolucao do Pipeline 2
rodrigofa1305 Apr 7, 2021
a5e6988
Evolucao do Pipeline 3
rodrigofa1305 Apr 7, 2021
60978ff
Estrutura de Producao
rodrigofa1305 Apr 7, 2021
e245114
Estrutura de Producao 1
rodrigofa1305 Apr 7, 2021
2524c59
jenkinsfile
rodrigofa1305 Apr 7, 2021
a5086de
jenkinsfile
rodrigofa1305 Apr 7, 2021
3b3c545
Ajuste no QualityGate
rodrigofa1305 Apr 8, 2021
edc574a
QualityGate
rodrigofa1305 Apr 8, 2021
be9030a
QualityGate 2
rodrigofa1305 Apr 8, 2021
d613bf6
Adicionando Post Actions
rodrigofa1305 Apr 8, 2021
363081e
Adicionando Post Actions
rodrigofa1305 Apr 8, 2021
3193a80
Adicionando Post Actions
rodrigofa1305 Apr 8, 2021
c8f7442
Adicionando Post Actions
rodrigofa1305 Apr 8, 2021
07f1ddc
Adicionando Post Actions
rodrigofa1305 Apr 8, 2021
97b3f2c
Adicionando Post Actions
rodrigofa1305 Apr 8, 2021
adba29f
Update na base de Producao
rodrigofa1305 Apr 9, 2021
e82371f
Delete Id
rodrigofa1305 Apr 9, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
FROM tomcat:8.5.50-jdk8-openjdk

ARG WAR_FILE
ARG CONTEXT

COPY ${WAR_FILE} /usr/local/tomcat/webapps/${CONTEXT}.war
91 changes: 91 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
pipeline {
agent any
stages {
stage ('Build Backend'){
steps {
bat 'mvn clean package -DskipTest=true'
}
}
stage ('Unit Test'){
steps {
bat 'mvn test'
}
}
stage ('Sonar Analysis'){
environment{
scannerHome = tool 'SONAR_SCANNER'
}
steps {
withSonarQubeEnv('SONAR_LOCAL'){
bat "${scannerHome}/bin/sonar-scanner -e -Dsonar.projectKey=DeployBack -Dsonar.host.url=http://localhost:9000 -Dsonar.login=0f445d2a90d58958a91fdbe10852696ba2ba2a0b -Dsonar.java.binaries=target -Dsonar.coverage.exclusions=**/.mvn/**,**/src/test/**,**/model/**,**Application.java"
}
}
}
/*stage ('Quality Gate'){
steps {
sleep(30)
timeout(time: 1, unit: 'MINUTES'){
waitForQualityGate abortPipeline: true
}
}
}*/
stage ('Deploy Backend'){
steps {
deploy adapters: [tomcat8(credentialsId: 'TomcatLogin', path: '', url: 'http://localhost:8001')], contextPath: 'tasks-backend', war: 'target/tasks-backend.war'
}
}
stage ('API Test'){
steps {
dir('api-test') {
git branch: 'main', credentialsId: 'github_login', url: 'https://github.com/rodrigofa1305/tasks-api-test'
bat 'mvn test'
}
}
}
stage ('Deploy Frontend'){
steps {
dir('frontend') {
git branch: 'master', credentialsId: 'github_login', url: 'https://github.com/rodrigofa1305/tasks-frontend'
bat 'mvn clean package'
deploy adapters: [tomcat8(credentialsId: 'TomcatLogin', path: '', url: 'http://localhost:8001')], contextPath: 'tasks', war: 'target/tasks.war'
}
}
}
stage ('Funcional Test'){
steps {
dir('funcional-test') {
git branch: 'main', credentialsId: 'github_login', url: 'https://github.com/rodrigofa1305/tasks-funcional-tests'
bat 'mvn test'
}
}
}
stage ('Deploy Producao'){
steps {
dir('funcional-test') {
bat 'docker-compose build'
bat 'docker-compose up -d'
}
}
}
stage ('HealthCheck'){
steps {
sleep(270)
dir('funcional-test') {
bat 'mvn verify -Dskip.surefire.tests'
}
}
}
}
post{
always{
junit allowEmptyResults: true, testResults: 'target/surefire-reports/*.xml, api-test/target/surefire-reports/*.xml, funcional-test/target/surefire-reports/*.xml, funcional-test/target/failsafe-reports/*.xml'
archiveArtifacts artifacts: 'target/tasks-backend.war, frontend/target/tasks.war', onlyIfSuccessful: true
}
unsuccessful{
emailext attachLog: true, body: 'See the attached log below', subject: 'Build $BUILD_NUMBER has failed', to: 'rodrigofa1305+jenkins@gmail.com'
}
fixed{
emailext attachLog: true, body: 'See the attached log below', subject: 'Build is Fine!', to: 'rodrigofa1305+jenkins@gmail.com'
}
}
}
62 changes: 62 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
version: "3"
services:
db:
container_name: pg-prod
image: postgres:9.6
networks:
- prod_net_back
environment:
- POSTGRES_PASSWORD=passwd
- POSTGRES_DB=tasks
volumes:
- prod_postgresql:/var/lib/postgresql
- prod_postgresql_data:/var/lib/postgresql/data

backend:
container_name: backend-prod
image: back_prod:build_${BUILD_NUMBER}
build:
context: .
args:
- WAR_FILE=target/tasks-backend.war
- CONTEXT=tasks-backend
networks:
- prod_net_back
- prod_net_front
#ports:
# - 9998:8080
environment:
- DATABASE_HOST=db
- DATABASE_PORT=5432
- DATABASE_USER=postgres
- DATABASE_PASSWD=passwd
- DATABASE_UPDATE=none
depends_on:
- db

frontend:
container_name: frontend-prod
image: front_prod:build_${BUILD_NUMBER}
build:
context: .
args:
- WAR_FILE=frontend/target/tasks.war
- CONTEXT=tasks
networks:
- prod_net_front
ports:
- 9999:8080
environment:
- BACKEND_HOST=backend
- BACKEND_PORT=8080
- APP_VERSION=build_${BUILD_NUMBER}
#depends_on:
# - backend

networks:
prod_net_front:
prod_net_back:

volumes:
prod_postgresql:
prod_postgresql_data:
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import br.ce.wcaquino.taskbackend.model.Task;
Expand Down Expand Up @@ -42,4 +45,10 @@ public ResponseEntity<Task> save(@RequestBody Task todo) throws ValidationExcept
Task saved = todoRepo.save(todo);
return new ResponseEntity<Task>(saved, HttpStatus.CREATED);
}

@DeleteMapping(value = "/{id}")
@ResponseStatus(code = HttpStatus.NO_CONTENT)
public void delete(@PathVariable Long id){
todoRepo.deleteById(id);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package br.ce.wcaquino.taskbackend.controller;

import java.time.LocalDate;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

import br.ce.wcaquino.taskbackend.model.Task;
import br.ce.wcaquino.taskbackend.repo.TaskRepo;
import br.ce.wcaquino.taskbackend.utils.ValidationException;

public class TaskControllerTest {

@Mock
private TaskRepo taskRepo;

@InjectMocks
private TaskController controller;

@Before
public void SetupContext() {
MockitoAnnotations.initMocks(this);
}

@Test
public void naoDeveSalvarTarefaSemDescricao() {
Task todo = new Task();
todo.setDueDate(LocalDate.now());
try {
controller.save(todo);
Assert.fail("Não Deveria Chegar Nesse Ponto!!");
} catch (ValidationException e) {
Assert.assertEquals("Fill the task description", e.getMessage());
}
}

@Test
public void naoDeveSalvarTarefaSemData() {
Task todo = new Task();
todo.setTask("Descricao");
try {
controller.save(todo);
Assert.fail("Não Deveria Chegar Nesse Ponto!!");
} catch (ValidationException e) {
Assert.assertEquals("Fill the due date", e.getMessage());
}
}

@Test
public void naoDeveSalvarTarefaComDataPassada() {
Task todo = new Task();
todo.setTask("Descricao");
todo.setDueDate(LocalDate.of(2021, 03, 30));
try {
controller.save(todo);
Assert.fail("Não Deveria Chegar Nesse Ponto!!");
} catch (ValidationException e) {
Assert.assertEquals("Due date must not be in past", e.getMessage());
}
}

@Test
public void DeveSalvarTarefaComSucesso() throws ValidationException {
Task todo = new Task();
todo.setTask("Descricao");
todo.setDueDate(LocalDate.now());
controller.save(todo);
Mockito.verify(taskRepo).save(todo);
}
}
27 changes: 27 additions & 0 deletions src/test/java/br/ce/wcaquino/taskbackend/utils/DateUtilsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package br.ce.wcaquino.taskbackend.utils;

import java.time.LocalDate;

import org.junit.Assert;
import org.junit.Test;

public class DateUtilsTest {

@Test
public void deveRetornarTrueParaDatasFuturas() {
LocalDate date = LocalDate.of(2030, 01, 01);
Assert.assertTrue(DateUtils.isEqualOrFutureDate(date));
}

@Test
public void deveRetornarFalseParaDatasFuturas() {
LocalDate date = LocalDate.of(2021, 03, 30);
Assert.assertFalse(DateUtils.isEqualOrFutureDate(date));
}

@Test
public void deveRetornartrueParaDataAtual() {
LocalDate date = LocalDate.now();
Assert.assertTrue(DateUtils.isEqualOrFutureDate(date));
}
}