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

1.auth-controller-tests #70

Draft
wants to merge 13 commits into
base: 1.Auth
Choose a base branch
from
Binary file added .DS_Store
Binary file not shown.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
.idea/

# Project exclude target paths
/target/

.DS_Store
Binary file added starter_code/.DS_Store
Binary file not shown.
8 changes: 8 additions & 0 deletions starter_code/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,14 @@
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

</dependencies>
<build>
<plugins>
Expand Down
Binary file added starter_code/src/.DS_Store
Binary file not shown.
Binary file added starter_code/src/main/.DS_Store
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public BCryptPasswordEncoder bCryptPasswordEncoder(){
}
public static void main(String[] args) {
SpringApplication.run(SareetaApplication.class, args);
System.out.println("E-commerce p4 Application started...");
System.out.println("I've just greeted the user!");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController
Expand Down Expand Up @@ -35,20 +36,19 @@ public ResponseEntity<User> findByUserName(@PathVariable String username) {
}

@PostMapping("/create")
public ResponseEntity<User> createUser(@RequestBody CreateUserRequest createUserRequest) {
public ResponseEntity<User> createUser(@Validated @RequestBody CreateUserRequest createUserRequest) {
User user = new User();
user.setUsername(createUserRequest.getUsername());
Cart cart = new Cart();
cartRepository.save(cart);
user.setCart(cart);
if(createUserRequest.getPassword().length()<7 ||
!createUserRequest.getPassword().equals(createUserRequest.getConfirmPassword())){
//System.out.println("Error - Either length is less than 7 or pass and conf pass do not match. Unable to create ",
// createUserRequest.getUsername());
return ResponseEntity.badRequest().build();
}
user.setPassword(bCryptPasswordEncoder.encode(createUserRequest.getPassword()));
userRepository.save(user);
System.out.println("User created successfully...");
return ResponseEntity.ok(user);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ protected void successfulAuthentication(HttpServletRequest req,
.withSubject(((org.springframework.security.core.userdetails.User) auth.getPrincipal()).getUsername())
.withExpiresAt(new Date(System.currentTimeMillis() + SecurityConstants.EXPIRATION_TIME))
.sign(HMAC512(SecurityConstants.SECRET.getBytes()));
// System.out.println("Token=== " + token);
res.addHeader(SecurityConstants.HEADER_STRING, SecurityConstants.TOKEN_PREFIX + token);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@

import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.authentication.HttpStatusEntryPoint;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
Expand All @@ -31,18 +36,29 @@ protected void configure(HttpSecurity http) throws Exception {
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(new JWTAuthenticationVerficationFilter(authenticationManager()))
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

http.exceptionHandling()
.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED));
}

@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
//
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.parentAuthenticationManager(authenticationManagerBean())
auth
// .parentAuthenticationManager(authenticationManagerBean())
.userDetailsService(userDetailsService)
.passwordEncoder(bCryptPasswordEncoder);
}

@Bean
CorsConfigurationSource corsConfigurationSource() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
}
}
Binary file added starter_code/src/test/.DS_Store
Binary file not shown.
Binary file added starter_code/src/test/java/.DS_Store
Binary file not shown.
Binary file added starter_code/src/test/java/com/.DS_Store
Binary file not shown.
Binary file not shown.
Binary file not shown.
27 changes: 27 additions & 0 deletions starter_code/src/test/java/com/example/demo/TestUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.example.demo;

import java.lang.reflect.Field;

public class TestUtils {

public static void injectObjects(Object target, String fieldName, Object toInject) {
boolean wasPrivate = false;

try {
Field declaredFields = target.getClass().getDeclaredField(fieldName);
//check if declaredFields is accessible or not
if (!declaredFields.isAccessible()) {
declaredFields.setAccessible(true);
wasPrivate = true;
}
declaredFields.set(target, toInject);
if(wasPrivate) {
declaredFields.setAccessible(false);
}
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package com.example.demo.controllers;

import com.example.demo.TestUtils;
import com.example.demo.model.persistence.Cart;
import com.example.demo.model.persistence.Item;
import com.example.demo.model.persistence.User;
import com.example.demo.model.persistence.repositories.CartRepository;
import com.example.demo.model.persistence.repositories.ItemRepository;
import com.example.demo.model.persistence.repositories.UserRepository;
import com.example.demo.model.requests.ModifyCartRequest;
import org.mockito.Mockito.*;
import org.junit.Before;
import org.junit.Test;
import org.springframework.http.ResponseEntity;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Optional;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class CartControllerTest {
private CartController cartController;
private CartRepository cartRepository = mock(CartRepository.class);
private UserRepository userRepository = mock(UserRepository.class);
private ItemRepository itemRepository = mock(ItemRepository.class);

@Before
public void setUp() {
cartController = new CartController();
TestUtils.injectObjects(cartController, "cartRepository", cartRepository);
TestUtils.injectObjects(cartController, "userRepository", userRepository);
TestUtils.injectObjects(cartController, "itemRepository", itemRepository);

}

@Test
public void add_to_cart_happy_path() {

ModifyCartRequest modifyCartRequest = new ModifyCartRequest();
modifyCartRequest.setUsername("dani");
modifyCartRequest.setItemId(1);
modifyCartRequest.setQuantity(1);

User user = new User();
Cart cart = new Cart();
Item item = new Item();
ArrayList itemsList = new ArrayList<>();
cart.setItems(itemsList);
user.setCart(cart);
user.setUsername(modifyCartRequest.getUsername());
when(userRepository.findByUsername(modifyCartRequest.getUsername())).thenReturn(user);

item.setId(1L);
item.setName("Round gadget");
item.setPrice(BigDecimal.valueOf(10.99));
Optional<Item> itemOptional = Optional.of(item);
when(itemRepository.findById(modifyCartRequest.getItemId())).thenReturn(itemOptional);

ResponseEntity<Cart> response = cartController.addTocart(modifyCartRequest);
assertNotNull(response);
assertEquals(200, response.getStatusCodeValue());

}

@Test
public void remove_from_cart_happy_path() {

ModifyCartRequest modifyCartRequest = new ModifyCartRequest();
modifyCartRequest.setUsername("dani");
modifyCartRequest.setItemId(1);
modifyCartRequest.setQuantity(1);

User user = new User();
Cart cart = new Cart();
Item item = new Item();
ArrayList itemsList = new ArrayList<>();
cart.setItems(itemsList);
user.setCart(cart);
user.setUsername(modifyCartRequest.getUsername());
when(userRepository.findByUsername(modifyCartRequest.getUsername())).thenReturn(user);

item.setId(1L);
item.setName("Round gadget");
item.setPrice(BigDecimal.valueOf(10.99));
Optional<Item> itemOptional = Optional.of(item);
when(itemRepository.findById(modifyCartRequest.getItemId())).thenReturn(itemOptional);

ResponseEntity<Cart> response = cartController.removeFromcart(modifyCartRequest);
assertNotNull(response);
assertEquals(200, response.getStatusCodeValue());
}

@Test
public void item_not_found_in_cart() {
ModifyCartRequest modifyCartRequest = new ModifyCartRequest();
modifyCartRequest.setUsername("dani");
modifyCartRequest.setItemId(1);
modifyCartRequest.setQuantity(1);

User user = new User();
Cart cart = new Cart();
user.setCart(cart);
user.setUsername(modifyCartRequest.getUsername());
when(userRepository.findByUsername(modifyCartRequest.getUsername())).thenReturn(user);

ResponseEntity<Cart> response = cartController.addTocart(modifyCartRequest);
assertNotNull(response);
assertEquals(404, response.getStatusCodeValue());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package com.example.demo.controllers;

import com.example.demo.TestUtils;
import com.example.demo.model.persistence.Item;
import com.example.demo.model.persistence.repositories.ItemRepository;
import org.junit.Before;
import org.junit.Test;
import org.springframework.http.ResponseEntity;

import java.util.ArrayList;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class ItemControllerTest {
private ItemController itemController;
private ItemRepository itemRepository = mock(ItemRepository.class);

@Before
public void setUp() {
itemController = new ItemController();
TestUtils.injectObjects(itemController, "itemRepository", itemRepository);
}

@Test
public void get_all_items_happy_path() {
ArrayList<Item> items = new ArrayList<>();
Item item = new Item();
item.setName("Round gadget");
items.add(item);
when(itemRepository.findAll()).thenReturn(items);

ResponseEntity response = itemController.getItems();
assertNotNull(response);
assertEquals(200, response.getStatusCodeValue());
}

@Test
public void get_item_by_id_happy_path() {
Long id = 1L;
Item item = new Item();
item.setName("Round gadget");
when(itemRepository.findById(id)).thenReturn(java.util.Optional.of(item));

ResponseEntity<Item> response = itemController.getItemById(id);
assertNotNull(response);
assertEquals(200, response.getStatusCodeValue());
}

@Test
public void get_items_by_name_happy_path() {
String name = "Round gadget";
ArrayList<Item> items = new ArrayList<>();
Item item = new Item();
item.setName("Round gadget");
items.add(item);
when(itemRepository.findByName(name)).thenReturn(items);

ResponseEntity response = itemController.getItemsByName(name);
assertNotNull(response);
assertEquals(200, response.getStatusCodeValue());
}

@Test
public void get_by_id_error_path() {
Long id = 1L;
when(itemRepository.findById(id)).thenReturn(java.util.Optional.empty());

ResponseEntity<Item> response = itemController.getItemById(id);
assertNotNull(response);
assertEquals(404, response.getStatusCodeValue());
}

@Test
public void search_by_name_error_path() {
String name = "Round gadget";
when(itemRepository.findByName(name)).thenReturn(new ArrayList<>());

ResponseEntity response = itemController.getItemsByName(name);
assertNotNull(response);
assertEquals(404, response.getStatusCodeValue());
}

@Test
public void search_by_name_happy_path() {
String name = "Round gadget";
ArrayList<Item> items = new ArrayList<>();
Item item = new Item();
item.setName("Round gadget");
items.add(item);
when(itemRepository.findByName(name)).thenReturn(items);

ResponseEntity response = itemController.getItemsByName(name);
assertNotNull(response);
assertEquals(200, response.getStatusCodeValue());
}
}
Loading