// Path: src/main/java/com/poseidon/builder/AuthoritiesBuilder.java
// public class AuthoritiesBuilder {
// 
//     private Authorities myObject;
// 
// 
//     public AuthoritiesBuilder(){
//         myObject= new Authorities();
//     }
// 
//     public Authorities build(){
//         return myObject;
//     }
// 
//     public AuthoritiesBuilder withUsername(String username){
//         myObject.setUsername(username);
//         return this;
//     }
// 
//     public AuthoritiesBuilder withAuthority(String authority){
//         myObject.setAuthority(authority);
//         return this;
//     }
// 
// 
// 
// }
// 
// Path: src/main/java/com/poseidon/builder/ContaViewBuilder.java
// public class ContaViewBuilder {
// 
//     private ContaView myObject;
// 
//     public ContaViewBuilder(){
//         myObject= new ContaView();
//     }
// 
//     public ContaView build(){
//         return myObject;
//     }
// 
//     public ContaViewBuilder convertUsersThroughContaView(Users users){
//         myObject.setPassword(users.getPassword());
//         myObject.setUsername(users.getUsername());
//         return this;
//     }
// 
//     public ContaViewBuilder withAuthority(String authority){
//         myObject.setRole(authority);
//         return this;
//     }
// 
// 
// 
// 
// 
// }
// 
// Path: src/main/java/com/poseidon/builder/UsersBuilder.java
// public class UsersBuilder {
// 
//     private Users myObject;
//     private List<Users> usersList;
// 
//     public UsersBuilder(){
//         myObject= new Users();
//         usersList= new ArrayList<>();
//     }
// 
//     public Users build(){
//         return myObject;
//     }
// 
//     public List<Users> buildAsList(){
//         return usersList;
//     }
// 
//     public UsersBuilder add(){
//         usersList.add(myObject);
//         myObject= new Users();
//         return this;
//     }
// 
//     public UsersBuilder withPassword(String password){
//        myObject.setPassword(password);
//         return this;
//     }
// 
//     public UsersBuilder withUsername(String username){
//         myObject.setUsername(username);
//         return this;
//     }
// 
// }
// 
// Path: src/main/java/com/poseidon/dao/AuthoritiesRepository.java
// public interface AuthoritiesRepository extends CrudRepository<Authorities, Long>{
// 	
// 	  public Authorities findByUsername(String username);
// 	  
// }
// 
// Path: src/main/java/com/poseidon/dao/UserRepository.java
// public interface UserRepository  extends CrudRepository<Users, Long> {
// 	
//     public Users findByUsername(String username);
//     
// }
// 
// Path: src/test/java/com/poseidon/utils/RedirectAttributesMock.java
// public class RedirectAttributesMock implements RedirectAttributes {
// 
// 
//     private HashMap<String,Object> map=new HashMap<>();
// 
//     @Override
//     public RedirectAttributes addAttribute(String s, Object o) {
//         return null;
//     }
// 
//     @Override
//     public RedirectAttributes addAttribute(Object o) {
//         return null;
//     }
// 
//     @Override
//     public RedirectAttributes addAllAttributes(Collection<?> collection) {
//         return null;
//     }
// 
//     @Override
//     public Model addAllAttributes(Map<String, ?> map) {
//         return null;
//     }
// 
//     @Override
//     public RedirectAttributes mergeAttributes(Map<String, ?> map) {
//         return null;
//     }
// 
//     @Override
//     public boolean containsAttribute(String s) {
//         return false;
//     }
// 
//     @Override
//     public Map<String, Object> asMap() {
//         return null;
//     }
// 
//     @Override
//     public RedirectAttributes addFlashAttribute(String s, Object o) {
//         map.put(s,o);
//         return  this;
//     }
// 
//     @Override
//     public RedirectAttributes addFlashAttribute(Object o) {
//         return null;
//     }
// 
//     @Override
//     public Map<String, ?> getFlashAttributes() {
//         return map;
//     }
// }


import com.poseidon.builder.AuthoritiesBuilder;
import com.poseidon.builder.ContaViewBuilder;
import com.poseidon.builder.UsersBuilder;
import com.poseidon.dao.AuthoritiesRepository;
import com.poseidon.dao.UserRepository;
import com.poseidon.model.*;
import com.poseidon.utils.RedirectAttributesMock;
import org.springframework.web.servlet.ModelAndView;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.util.List;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertTrue;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
        when(userRepository.findAll()).thenReturn(usersList);

        Authorities  authoritiesKakaroto = new AuthoritiesBuilder().withAuthority("ROLE_ADMIN").withUsername("kakaroto").build();
        when(authoritiesRepository.findByUsername(usersList.get(1).getUsername())).thenReturn(authoritiesKakaroto);

        Authorities authoritiesVeggeta = new AuthoritiesBuilder().withAuthority("ROLE_USER").withUsername("Veggeta").build();
        when(authoritiesRepository.findByUsername(usersList.get(0).getUsername())).thenReturn(authoritiesVeggeta);

        String isCadastroConta = "true";
        String isEditarConta = "false";
        String isDeleteConta = "false";
        String isExibirConta = "false";

       ModelAndView response = contaController.returnpage(new ModelAndView(), new CRUDView());

        assertNotNull(response);
        assertNotNull(response.getModelMap().get("contas"));
        Assert.assertNotNull(response.getModelMap().get("crudview"));
    }

    @Test
    public void shouldBuildContaPageForEditar(){

        List<Users> usersList = new UsersBuilder()
                .withPassword("pass").withUsername("Kakaroto").add()
                .withPassword("Bulma").withUsername("Vegetta").add()
                .buildAsList();

        when(userRepository.findAll()).thenReturn(usersList);

// Path: src/main/java/com/poseidon/builder/AuthoritiesBuilder.java
// public class AuthoritiesBuilder {
// 
//     private Authorities myObject;
// 
// 
//     public AuthoritiesBuilder(){
//         myObject= new Authorities();
//     }
// 
//     public Authorities build(){
//         return myObject;
//     }
// 
//     public AuthoritiesBuilder withUsername(String username){
//         myObject.setUsername(username);
//         return this;
//     }
// 
//     public AuthoritiesBuilder withAuthority(String authority){
//         myObject.setAuthority(authority);
//         return this;
//     }
// 
// 
// 
// }
// 
// Path: src/main/java/com/poseidon/builder/ContaViewBuilder.java
// public class ContaViewBuilder {
// 
//     private ContaView myObject;
// 
//     public ContaViewBuilder(){
//         myObject= new ContaView();
//     }
// 
//     public ContaView build(){
//         return myObject;
//     }
// 
//     public ContaViewBuilder convertUsersThroughContaView(Users users){
//         myObject.setPassword(users.getPassword());
//         myObject.setUsername(users.getUsername());
//         return this;
//     }
// 
//     public ContaViewBuilder withAuthority(String authority){
//         myObject.setRole(authority);
//         return this;
//     }
// 
// 
// 
// 
// 
// }
// 
// Path: src/main/java/com/poseidon/builder/UsersBuilder.java
// public class UsersBuilder {
// 
//     private Users myObject;
//     private List<Users> usersList;
// 
//     public UsersBuilder(){
//         myObject= new Users();
//         usersList= new ArrayList<>();
//     }
// 
//     public Users build(){
//         return myObject;
//     }
// 
//     public List<Users> buildAsList(){
//         return usersList;
//     }
// 
//     public UsersBuilder add(){
//         usersList.add(myObject);
//         myObject= new Users();
//         return this;
//     }
// 
//     public UsersBuilder withPassword(String password){
//        myObject.setPassword(password);
//         return this;
//     }
// 
//     public UsersBuilder withUsername(String username){
//         myObject.setUsername(username);
//         return this;
//     }
// 
// }
// 
// Path: src/main/java/com/poseidon/dao/AuthoritiesRepository.java
// public interface AuthoritiesRepository extends CrudRepository<Authorities, Long>{
// 	
// 	  public Authorities findByUsername(String username);
// 	  
// }
// 
// Path: src/main/java/com/poseidon/dao/UserRepository.java
// public interface UserRepository  extends CrudRepository<Users, Long> {
// 	
//     public Users findByUsername(String username);
//     
// }
// 
// Path: src/test/java/com/poseidon/utils/RedirectAttributesMock.java
// public class RedirectAttributesMock implements RedirectAttributes {
// 
// 
//     private HashMap<String,Object> map=new HashMap<>();
// 
//     @Override
//     public RedirectAttributes addAttribute(String s, Object o) {
//         return null;
//     }
// 
//     @Override
//     public RedirectAttributes addAttribute(Object o) {
//         return null;
//     }
// 
//     @Override
//     public RedirectAttributes addAllAttributes(Collection<?> collection) {
//         return null;
//     }
// 
//     @Override
//     public Model addAllAttributes(Map<String, ?> map) {
//         return null;
//     }
// 
//     @Override
//     public RedirectAttributes mergeAttributes(Map<String, ?> map) {
//         return null;
//     }
// 
//     @Override
//     public boolean containsAttribute(String s) {
//         return false;
//     }
// 
//     @Override
//     public Map<String, Object> asMap() {
//         return null;
//     }
// 
//     @Override
//     public RedirectAttributes addFlashAttribute(String s, Object o) {
//         map.put(s,o);
//         return  this;
//     }
// 
//     @Override
//     public RedirectAttributes addFlashAttribute(Object o) {
//         return null;
//     }
// 
//     @Override
//     public Map<String, ?> getFlashAttributes() {
//         return map;
//     }
// }


// Path: src/test/java/com/poseidon/controller/ContaControllerTest.java
import com.poseidon.builder.AuthoritiesBuilder;
import com.poseidon.builder.ContaViewBuilder;
import com.poseidon.builder.UsersBuilder;
import com.poseidon.dao.AuthoritiesRepository;
import com.poseidon.dao.UserRepository;
import com.poseidon.model.*;
import com.poseidon.utils.RedirectAttributesMock;
import org.springframework.web.servlet.ModelAndView;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.util.List;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertTrue;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;

        when(userRepository.findAll()).thenReturn(usersList);

        Authorities  authoritiesKakaroto = new AuthoritiesBuilder().withAuthority("ROLE_ADMIN").withUsername("kakaroto").build();
        when(authoritiesRepository.findByUsername(usersList.get(1).getUsername())).thenReturn(authoritiesKakaroto);

        Authorities authoritiesVeggeta = new AuthoritiesBuilder().withAuthority("ROLE_USER").withUsername("Veggeta").build();
        when(authoritiesRepository.findByUsername(usersList.get(0).getUsername())).thenReturn(authoritiesVeggeta);

        String isCadastroConta = "true";
        String isEditarConta = "false";
        String isDeleteConta = "false";
        String isExibirConta = "false";

       ModelAndView response = contaController.returnpage(new ModelAndView(), new CRUDView());

        assertNotNull(response);
        assertNotNull(response.getModelMap().get("contas"));
        Assert.assertNotNull(response.getModelMap().get("crudview"));
    }

    @Test
    public void shouldBuildContaPageForEditar(){

        List<Users> usersList = new UsersBuilder()
                .withPassword("pass").withUsername("Kakaroto").add()
                .withPassword("Bulma").withUsername("Vegetta").add()
                .buildAsList();

        when(userRepository.findAll()).thenReturn(usersList);

        Authorities  authoritiesKakaroto = new AuthoritiesBuilder().withAuthority("ROLE_ADMIN").withUsername("kakaroto").build();