diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..c456c4a3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,25 @@
+/target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+/build/
diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 00000000..01e67997
Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 00000000..cd0d451c
--- /dev/null
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..a661cf18
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,6 @@
+FROM java:8
+
+MAINTAINER Cleverson de Melo
+
+ADD /target/gastos-v1.jar gastos-v1.jar
+ENTRYPOINT ["java","-jar", "gastos-v1.jar"]
\ No newline at end of file
diff --git a/README.md b/README.md
index 15d8f685..b63e10f8 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,76 @@
+# Api gastos
+
+Para este projeto é necessário utilizar o banco de dados NO SQL mongodb para inclusão, alteração e consulta dos dados.
+
+Para rodar o projeto basta ter o docker e docker compose instalado na maquina e utilizar o seguinte comando para gerar os container com a imagem do projeto e do mongodb:
+
+docker-compose -f docker-compose.yml up -d
+
+
Versões utilizadas
+-Java v1.8
+-Framework SpringBoot v2.1.2
+-Maven para gerenciar as dependencias do projeto
+-Utilização mongorepository para gerenciamento do repositório
+-Banco de dados Mongodb v3.4.6
+-IDE Eclipse Mars.2 Release (4.5.2)
+-Utilizado Oauth2 v2.1.0 com auto configure para autenticação da api
+
+ EndPoints Disponiveis
+
+POST
+http://localhost:8080/oauth/token
+
+Utilizar Header Authorization Basic dXN1YXJpb2FwaTpzb2V1c2Vp
+Body do tipo form-data com esse parametros:
+grant_type: password
+username: santander
+password: san123
+
+Após efetuar esta autenticação será gerado o token para utilização dos endpoits da api.
+
+ Endpoints da API
+
+Lembrando que o uso só será liberado após a autenticaçao onde irá retornar o token do tipo Bearer.
+
+Utilizar no header o parametro Authorization: Bearer Token-gerado e Content-Type: "application/json"
+
+GET Lista de gastos
+http://localhost:8080/api/gastos/{codigousuario}
+
+GET Detalhe do gasto
+http://localhost:8080/api/gastos/{codigousuario}/{id}
+
+POST Criar gasto
+http://localhost:8080/api/gastos/
+Body
+{
+ "descricao": "Descricao",
+ "valor": 1500.00,
+ "codigousuario": 1,
+ "data": "2019-02-08T19:50:00"
+}
+
+PUT alterar gasto
+{
+ "descricao": "Descricao",
+ "valor": 1500.00,
+ "codigousuario": 1,
+ "data": "2019-02-08T19:50:00",
+ "idCategoria": "5c5cb2b2aa2d1652ae3a17ea",
+ "id": "5c5cb2b2aa2d1652ae3a17e9"
+}
+
+GET Sugestão de categorias
+http://localhost:8080/api/categorias/{categoria}
+
+Para este recurso caso digite uma letra como a por exemplo, irá retornar todas as categorais com a existentes na base, caso digite loja, irá retornar as categorias cujo tenha loja na Base, método não é case sensitive, irá trazer o dado caso esteja maiusculo ou minusculo.
+
+As funcionalidades de atributição automatica da categoria está definido no serviço.
+
+Foram criada todas as funcionalidades solicitadas no teste.
+
+Qualquer dúvida sigo a disposição.
+
# Show me the code
### # DESAFIO:
@@ -74,3 +147,4 @@ Faça um fork desse desse repositório em seu Github e nos envie um Pull Request
### # Importante: não há prazo de entrega, faça com qualidade!
# BOA SORTE!
+>>>>>>> 8be82c72211a7dee780f0a0a5695cddf9065985d
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..8842581a
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,22 @@
+version: '3'
+services:
+ gastos:
+ container_name: gastos-v1
+ image: gastos-v1:latest
+ ports:
+ - '8080:8080'
+ links:
+ - mongo
+ volumes:
+ - /application/application.properties
+ mongo:
+ container_name: mongo
+ image: mongo
+ environment:
+ - MONGO_DATA_DIR=/data/db
+ - MONGO_LOG_DIR=/dev/null
+ volumes:
+ - ./data/db:/data/db
+ ports:
+ - 27017:27017
+ command: mongod --smallfiles --logpath=/dev/null
\ No newline at end of file
diff --git a/mvnw b/mvnw
new file mode 100755
index 00000000..5551fde8
--- /dev/null
+++ b/mvnw
@@ -0,0 +1,286 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ export JAVA_HOME="`/usr/libexec/java_home`"
+ else
+ export JAVA_HOME="/Library/Java/Home"
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ M2_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ M2_HOME=`cd "$M2_HOME" && pwd`
+
+ cd "$saveddir"
+ # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --unix "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+ # TODO classpath?
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="`which javac`"
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=`which readlink`
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+ if $darwin ; then
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="`which java`"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+ if [ -z "$1" ]
+ then
+ echo "Path not specified to find_maven_basedir"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+ if [ -d "${wdir}" ]; then
+ wdir=`cd "$wdir/.."; pwd`
+ fi
+ # end of workaround
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found .mvn/wrapper/maven-wrapper.jar"
+ fi
+else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+ fi
+ jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
+ while IFS="=" read key value; do
+ case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+ esac
+ done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Downloading from: $jarUrl"
+ fi
+ wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+
+ if command -v wget > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found wget ... using wget"
+ fi
+ wget "$jarUrl" -O "$wrapperJarPath"
+ elif command -v curl > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found curl ... using curl"
+ fi
+ curl -o "$wrapperJarPath" "$jarUrl"
+ else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Falling back to using Java to download"
+ fi
+ javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+ if [ -e "$javaClass" ]; then
+ if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Compiling MavenWrapperDownloader.java ..."
+ fi
+ # Compiling the Java class
+ ("$JAVA_HOME/bin/javac" "$javaClass")
+ fi
+ if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ # Running the downloader
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Running MavenWrapperDownloader.java ..."
+ fi
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+ fi
+ fi
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+ echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+ MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
new file mode 100644
index 00000000..e5cfb0ae
--- /dev/null
+++ b/mvnw.cmd
@@ -0,0 +1,161 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
+FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO (
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ echo Found %WRAPPER_JAR%
+) else (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %DOWNLOAD_URL%
+ powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"
+ echo Finished downloading %WRAPPER_JAR%
+)
+@REM End of extension
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 00000000..3d2b2016
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,67 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.1.2.RELEASE
+
+
+ br.com.gestao
+ gastos
+ v1
+ gastos
+ Projeto Gestão de Gastos Para o Santander
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-web-services
+
+
+ org.springframework.security.oauth.boot
+ spring-security-oauth2-autoconfigure
+ 2.1.0.RELEASE
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/src/main/java/br/com/gestao/gastos/GastosApplication.java b/src/main/java/br/com/gestao/gastos/GastosApplication.java
new file mode 100644
index 00000000..875f4aef
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/GastosApplication.java
@@ -0,0 +1,14 @@
+package br.com.gestao.gastos;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class GastosApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(GastosApplication.class, args);
+ }
+
+}
+
diff --git a/src/main/java/br/com/gestao/gastos/config/SegurancaConfig.java b/src/main/java/br/com/gestao/gastos/config/SegurancaConfig.java
new file mode 100644
index 00000000..f4a72e36
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/config/SegurancaConfig.java
@@ -0,0 +1,33 @@
+package br.com.gestao.gastos.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.crypto.password.NoOpPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+
+@EnableWebSecurity
+@EnableAuthorizationServer
+@EnableResourceServer
+public class SegurancaConfig extends WebSecurityConfigurerAdapter{
+
+ @Bean
+ @Override
+ protected AuthenticationManager authenticationManager() throws Exception {
+ return super.authenticationManager();
+ }
+
+ @Override
+ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+ auth.inMemoryAuthentication().withUser("santander").password("san123").roles("ADMIN");
+ }
+
+ @Bean
+ public PasswordEncoder PasswordEncoder() {
+ return NoOpPasswordEncoder.getInstance();
+ }
+}
diff --git a/src/main/java/br/com/gestao/gastos/controller/CategoriasController.java b/src/main/java/br/com/gestao/gastos/controller/CategoriasController.java
new file mode 100644
index 00000000..07151b34
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/controller/CategoriasController.java
@@ -0,0 +1,29 @@
+package br.com.gestao.gastos.controller;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import br.com.gestao.gastos.model.Categorias;
+import br.com.gestao.gastos.service.CategoriasService;
+
+@RestController
+@RequestMapping("/api")
+public class CategoriasController {
+
+ @Autowired
+ private CategoriasService categoriasService;
+
+ @RequestMapping(value = "/categorias/{categoria}", produces="application/json", method = RequestMethod.GET)
+ public ResponseEntity> getCategoria(@PathVariable String categoria){
+ List categorias = categoriasService.listaCategoriasSugeridas(categoria);
+ return new ResponseEntity<>(categorias, HttpStatus.OK);
+ }
+
+}
diff --git a/src/main/java/br/com/gestao/gastos/controller/GastosController.java b/src/main/java/br/com/gestao/gastos/controller/GastosController.java
new file mode 100644
index 00000000..f99a70a3
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/controller/GastosController.java
@@ -0,0 +1,51 @@
+package br.com.gestao.gastos.controller;
+
+import java.util.List;
+
+import javax.validation.Valid;
+
+import org.bson.types.ObjectId;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import br.com.gestao.gastos.model.Gastos;
+import br.com.gestao.gastos.service.GastosService;
+
+@RestController
+@RequestMapping("/api")
+public class GastosController {
+
+ @Autowired
+ private GastosService gastosService;
+
+ @RequestMapping(value = "/gastos/{codigousuario}", produces="application/json", method = RequestMethod.GET)
+ public ResponseEntity> getListaDeGastos(@PathVariable int codigousuario, @RequestParam(value = "data", required=false) String data) {
+ List gastos = gastosService.listaDeGastos(codigousuario, data);
+ return new ResponseEntity<>(gastos, HttpStatus.OK);
+ }
+
+ @RequestMapping(value = "/gastos/{codigousuario}/{id}", produces="application/json", method = RequestMethod.GET)
+ public ResponseEntity getDetalheGasto(@PathVariable int codigousuario, @PathVariable ObjectId id) {
+ Gastos gastos = gastosService.detalheGasto(codigousuario, id);
+ return new ResponseEntity<>(gastos, HttpStatus.OK);
+ }
+
+ @RequestMapping(value = "/gastos", method = RequestMethod.POST)
+ public ResponseEntity criarGastos(@Valid @RequestBody Gastos gastos) {
+ gastosService.criarGasto(gastos);
+ return new ResponseEntity<>(null, HttpStatus.CREATED);
+ }
+
+ @RequestMapping(value = "/gastos", method = RequestMethod.PUT)
+ public ResponseEntity alterarGasto(@Valid @RequestBody Gastos gastos) {
+ gastosService.alterarGasto(gastos);
+ return new ResponseEntity<>(gastos, HttpStatus.NO_CONTENT);
+ }
+}
diff --git a/src/main/java/br/com/gestao/gastos/model/Categorias.java b/src/main/java/br/com/gestao/gastos/model/Categorias.java
new file mode 100644
index 00000000..9312fbf3
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/model/Categorias.java
@@ -0,0 +1,40 @@
+package br.com.gestao.gastos.model;
+
+import org.bson.types.ObjectId;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document(collection = "categorias")
+public class Categorias {
+
+ @Id
+ private ObjectId _id;
+
+ @Indexed
+ private String categoria;
+
+ public Categorias() {}
+
+ public Categorias(ObjectId _id, String categoria) {
+ this._id = _id;
+ this.categoria = categoria;
+ }
+
+ public String getId() {
+ return _id.toHexString();
+ }
+
+ public void setId(ObjectId _id) {
+ this._id = _id;
+ }
+
+ public String getCategoria() {
+ return categoria;
+ }
+
+ public void setCategoria(String categoria) {
+ this.categoria = categoria;
+ }
+
+}
diff --git a/src/main/java/br/com/gestao/gastos/model/Gastos.java b/src/main/java/br/com/gestao/gastos/model/Gastos.java
new file mode 100644
index 00000000..cbcab9ae
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/model/Gastos.java
@@ -0,0 +1,79 @@
+package br.com.gestao.gastos.model;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import org.bson.types.ObjectId;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document(collection = "gastos")
+public class Gastos {
+
+ @Id
+ private ObjectId _id;
+
+ private ObjectId idcategoria;
+
+ private String descricao;
+
+ private BigDecimal valor;
+
+ private int codigousuario;
+
+ @Indexed
+ private LocalDateTime data;
+
+ public Gastos() {}
+
+ public Gastos(ObjectId _id, String descricao, BigDecimal valor, int codigousuario, LocalDateTime data, ObjectId idcategoria) {
+ this._id = _id;
+ this.descricao = descricao;
+ this.valor = valor;
+ this.codigousuario = codigousuario;
+ this.data = data;
+ this.idcategoria = idcategoria;
+ }
+
+ public String getId() {
+ return _id.toHexString();
+ }
+ public void setId(ObjectId _id) {
+ this._id = _id;
+ }
+
+ public String getDescricao() {
+ return descricao;
+ }
+ public void setDescricao(String descricao) {
+ this.descricao = descricao;
+ }
+ public BigDecimal getValor() {
+ return valor;
+ }
+ public void setValor(BigDecimal valor) {
+ this.valor = valor;
+ }
+ public int getCodigousuario() {
+ return codigousuario;
+ }
+ public void setCodigousuario(int codigousuario) {
+ this.codigousuario = codigousuario;
+ }
+ public LocalDateTime getData() {
+ return data;
+ }
+ public void setData(LocalDateTime data) {
+ this.data = data;
+ }
+
+ public String getIdCategoria() {
+ return (idcategoria == null) ? null : idcategoria.toHexString();
+ }
+
+ public void setIdCategoria(ObjectId idcategoria) {
+ this.idcategoria = idcategoria;
+ }
+
+}
diff --git a/src/main/java/br/com/gestao/gastos/repository/CategoriasRepository.java b/src/main/java/br/com/gestao/gastos/repository/CategoriasRepository.java
new file mode 100644
index 00000000..24523e97
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/repository/CategoriasRepository.java
@@ -0,0 +1,18 @@
+package br.com.gestao.gastos.repository;
+
+import java.util.List;
+
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.Query;
+
+import br.com.gestao.gastos.model.Categorias;
+
+public interface CategoriasRepository extends MongoRepository {
+
+ @Query("{ 'categoria': ?0 }")
+ Categorias findByNomeCategoria(String categoria);
+
+ @Query("{ 'categoria': {$regex: ?0, $options: 'i'} }")
+ List findCategoriasSugeridas(String categoria);
+
+}
diff --git a/src/main/java/br/com/gestao/gastos/repository/GastosRepository.java b/src/main/java/br/com/gestao/gastos/repository/GastosRepository.java
new file mode 100644
index 00000000..ece6d783
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/repository/GastosRepository.java
@@ -0,0 +1,24 @@
+package br.com.gestao.gastos.repository;
+
+import java.time.LocalDate;
+import java.util.List;
+
+import org.bson.types.ObjectId;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.Query;
+
+import br.com.gestao.gastos.model.Gastos;
+
+public interface GastosRepository extends MongoRepository {
+
+ @Query("{ 'codigousuario': ?0 }")
+ List findAllByCodigoUsuario(int codigousuario, Sort sort);
+
+ @Query("{ '_id': ?0, 'codigousuario': ?1 }")
+ Gastos findByIdAndCodigoUsuario(ObjectId id, int codigousuario);
+
+ @Query("{ 'codigousuario' : ?0, 'data': {$gte: ?1, $lte: ?2} }")
+ List findAllByCodigoUsuarioData(int codigousuario, LocalDate dataInicio, LocalDate dataFim, Sort sort);
+
+}
diff --git a/src/main/java/br/com/gestao/gastos/service/CategoriasService.java b/src/main/java/br/com/gestao/gastos/service/CategoriasService.java
new file mode 100644
index 00000000..9283eda4
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/service/CategoriasService.java
@@ -0,0 +1,11 @@
+package br.com.gestao.gastos.service;
+
+import java.util.List;
+
+import br.com.gestao.gastos.model.Categorias;
+
+public interface CategoriasService {
+
+ List listaCategoriasSugeridas(String categoria);
+
+}
diff --git a/src/main/java/br/com/gestao/gastos/service/CategoriasServiceImpl.java b/src/main/java/br/com/gestao/gastos/service/CategoriasServiceImpl.java
new file mode 100644
index 00000000..b36079bb
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/service/CategoriasServiceImpl.java
@@ -0,0 +1,27 @@
+package br.com.gestao.gastos.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import br.com.gestao.gastos.model.Categorias;
+import br.com.gestao.gastos.repository.CategoriasRepository;
+
+@Service
+public class CategoriasServiceImpl implements CategoriasService {
+
+ private CategoriasRepository categoriasRepository;
+
+ @Autowired
+ public CategoriasServiceImpl(CategoriasRepository categoriasRepository) {
+ this.categoriasRepository = categoriasRepository;
+ }
+
+ @Override
+ public List listaCategoriasSugeridas(String categoria) {
+ List categorias = categoriasRepository.findCategoriasSugeridas(".*"+categoria+".*");
+ return categorias;
+ }
+
+}
diff --git a/src/main/java/br/com/gestao/gastos/service/GastosService.java b/src/main/java/br/com/gestao/gastos/service/GastosService.java
new file mode 100644
index 00000000..dcd7eea2
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/service/GastosService.java
@@ -0,0 +1,19 @@
+package br.com.gestao.gastos.service;
+
+import java.util.List;
+
+import org.bson.types.ObjectId;
+
+import br.com.gestao.gastos.model.Gastos;
+
+public interface GastosService {
+
+ List listaDeGastos(int codigousuario, String data);
+
+ Gastos detalheGasto(int codigousuario, ObjectId id);
+
+ Gastos criarGasto(Gastos gastos);
+
+ Gastos alterarGasto(Gastos gastos);
+
+}
diff --git a/src/main/java/br/com/gestao/gastos/service/GastosServiceImpl.java b/src/main/java/br/com/gestao/gastos/service/GastosServiceImpl.java
new file mode 100644
index 00000000..08bbd8f1
--- /dev/null
+++ b/src/main/java/br/com/gestao/gastos/service/GastosServiceImpl.java
@@ -0,0 +1,88 @@
+package br.com.gestao.gastos.service;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bson.types.ObjectId;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.stereotype.Service;
+
+import br.com.gestao.gastos.model.Categorias;
+import br.com.gestao.gastos.model.Gastos;
+import br.com.gestao.gastos.repository.CategoriasRepository;
+import br.com.gestao.gastos.repository.GastosRepository;
+
+@Service
+public class GastosServiceImpl implements GastosService {
+
+ private GastosRepository gastosRepository;
+ private CategoriasRepository categeoriasRepository;
+
+ @Autowired
+ public GastosServiceImpl(GastosRepository gastosRepository, CategoriasRepository categoriasRepository) {
+ this.gastosRepository = gastosRepository;
+ this.categeoriasRepository = categoriasRepository;
+ }
+
+ @Override
+ public List listaDeGastos(int codigousuario, String data) {
+ List gastos = new ArrayList<>();
+ if (data == null) {
+ gastos = gastosRepository.findAllByCodigoUsuario(codigousuario, new Sort(Direction.DESC, "data"));
+ } else {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
+ LocalDate dataInicio = LocalDate.parse(data, formatter);
+ LocalDate dataFim = dataInicio.plusDays(1);
+ gastos = gastosRepository.findAllByCodigoUsuarioData(codigousuario, dataInicio, dataFim,
+ new Sort(Direction.DESC, "data"));
+ }
+ return gastos;
+ }
+
+ @Override
+ public Gastos detalheGasto(int codigousuario, ObjectId id) {
+ Gastos gastos = new Gastos();
+ gastos = gastosRepository.findByIdAndCodigoUsuario(id, codigousuario);
+ return gastos;
+ }
+
+ @Override
+ public Gastos criarGasto(Gastos gastos) {
+ gastos.setId(ObjectId.get());
+ // gastos.setData(LocalDateTime.now());
+ return validaGasto(gastos);
+ }
+
+ @Override
+ public Gastos alterarGasto(Gastos gastos) {
+ return validaGasto(gastos);
+ }
+
+ public Gastos validaGasto(Gastos gastos) {
+ Categorias categoria = new Categorias();
+ categoria = getCategoria(gastos);
+ if (categoria != null && categoria.getCategoria().equals(gastos.getDescricao())) {
+ gastos.setIdCategoria(new ObjectId(categoria.getId()));
+ } else {
+ if (gastos.getDescricao() != null) {
+ categoria = new Categorias();
+ ObjectId idCategoria = ObjectId.get();
+ categoria.setId(idCategoria);
+ categoria.setCategoria(gastos.getDescricao());
+ categeoriasRepository.save(categoria);
+ gastos.setIdCategoria(idCategoria);
+ }
+ }
+ gastosRepository.save(gastos);
+ return null;
+ }
+
+ public Categorias getCategoria(Gastos gastos) {
+ return categeoriasRepository.findByNomeCategoria(gastos.getDescricao());
+ }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 00000000..50661f3e
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,6 @@
+spring.data.mongodb.host=127.0.0.1
+spring.data.mongodb.port=27017
+spring.data.mongodb.database=santander
+security.oauth2.client.scope=password
+security.oauth2.client.client-id=usuarioapi
+security.oauth2.client.client-secret=soeusei
\ No newline at end of file
diff --git a/src/test/java/br/com/gestao/gastos/GastosApplicationTests.java b/src/test/java/br/com/gestao/gastos/GastosApplicationTests.java
new file mode 100644
index 00000000..191f316b
--- /dev/null
+++ b/src/test/java/br/com/gestao/gastos/GastosApplicationTests.java
@@ -0,0 +1,17 @@
+package br.com.gestao.gastos;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class GastosApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+
diff --git a/src/test/java/br/com/gestao/gastos/controller/CategoriasControllerTests.java b/src/test/java/br/com/gestao/gastos/controller/CategoriasControllerTests.java
new file mode 100644
index 00000000..a495aafc
--- /dev/null
+++ b/src/test/java/br/com/gestao/gastos/controller/CategoriasControllerTests.java
@@ -0,0 +1,30 @@
+package br.com.gestao.gastos.controller;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import br.com.gestao.gastos.GastosApplicationTests;
+
+public class CategoriasControllerTests extends GastosApplicationTests{
+
+ private MockMvc mockMvc;
+
+ @Autowired
+ private CategoriasController categoriasController;
+
+ @Before
+ public void setUp() {
+ this.mockMvc = MockMvcBuilders.standaloneSetup(categoriasController).build();
+ }
+
+ @Test
+ public void testGETCategoriasController() throws Exception {
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/api/categorias/recarga"))
+ .andExpect(MockMvcResultMatchers.status().isOk());
+ }
+}
diff --git a/src/test/java/br/com/gestao/gastos/controller/GastosControllerTests.java b/src/test/java/br/com/gestao/gastos/controller/GastosControllerTests.java
new file mode 100644
index 00000000..1799735f
--- /dev/null
+++ b/src/test/java/br/com/gestao/gastos/controller/GastosControllerTests.java
@@ -0,0 +1,66 @@
+package br.com.gestao.gastos.controller;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import org.bson.types.ObjectId;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import br.com.gestao.gastos.GastosApplicationTests;
+import br.com.gestao.gastos.model.Gastos;
+import br.com.gestao.gastos.service.GastosService;
+
+public class GastosControllerTests extends GastosApplicationTests {
+
+ private MockMvc mockMvc;
+
+ @Autowired
+ private GastosController gastosController;
+
+ @Autowired
+ private GastosService gastosService;
+
+ @Before
+ public void setUp() {
+ this.mockMvc = MockMvcBuilders.standaloneSetup(gastosController).build();
+ }
+
+ @Test
+ public void testGETGastosController() throws Exception {
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/api/gastos/1"))
+ .andExpect(MockMvcResultMatchers.status().isOk());
+ }
+
+ @Test
+ public void testGETGastosDetalheController() throws Exception {
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/api/gastos/1/5c5bcc6c0000000000000000"))
+ .andExpect(MockMvcResultMatchers.status().isOk());
+ }
+
+ @Test
+ public void testPOSTGastoController() throws Exception {
+ String json = "{\"descricao\":\"Recarga Bilhete Unico\",\"valor\":200,\"codigousuario\":1,\"data\":\"2019-02-08T19:50:00\"}";
+ this.mockMvc.perform(MockMvcRequestBuilders.post("/api/gastos")
+ .contentType(MediaType.APPLICATION_JSON_UTF8_VALUE).content(json))
+ .andExpect(MockMvcResultMatchers.status().isCreated());
+ }
+
+ @Test
+ public void testPUTAddressController() throws Exception {
+ String json = "{\"descricao\":\"Recarga Bilhete Unico\",\"valor\":200,\"codigousuario\":1,\"data\":\"2019-02-08T19:50:00\"}";
+ Gastos gasto = (new Gastos(new ObjectId("5c5bcc6c0000000000000000"), "Recarga Bilhete Unico",
+ new BigDecimal(200), 1, LocalDateTime.now(), new ObjectId("5c5bcc6c0000000000000001")));
+ gastosService.alterarGasto(gasto);
+ this.mockMvc.perform(MockMvcRequestBuilders.put("/api/gastos").contentType(MediaType.APPLICATION_JSON_UTF8)
+ .content(json))
+ .andExpect(MockMvcResultMatchers.status().isNoContent());
+ }
+
+}