Package org.multibit.mbm.client.interfaces.rest.resources.cart

Source Code of org.multibit.mbm.client.interfaces.rest.resources.cart.AdminCartResourceTest

package org.multibit.mbm.client.interfaces.rest.resources.cart;

import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import org.junit.Test;
import org.multibit.mbm.client.common.pagination.PaginatedList;
import org.multibit.mbm.client.common.pagination.PaginatedLists;
import org.multibit.mbm.client.domain.model.model.Cart;
import org.multibit.mbm.client.domain.model.model.Item;
import org.multibit.mbm.client.domain.model.model.Role;
import org.multibit.mbm.client.domain.model.model.User;
import org.multibit.mbm.client.domain.repositories.CartReadService;
import org.multibit.mbm.client.domain.repositories.ItemReadService;
import org.multibit.mbm.client.infrastructure.persistence.DatabaseLoader;
import org.multibit.mbm.client.interfaces.rest.api.cart.AdminUpdateCartDto;
import org.multibit.mbm.client.interfaces.rest.api.cart.PublicCartItemDto;
import org.multibit.mbm.client.interfaces.rest.api.hal.HalMediaType;
import org.multibit.mbm.client.interfaces.rest.links.cart.CartLinks;
import org.multibit.mbm.testing.BaseJerseyHmacResourceTest;
import org.multibit.mbm.testing.FixtureAsserts;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import java.net.URI;
import java.util.List;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class AdminCartResourceTest extends BaseJerseyHmacResourceTest {

  private final CartReadService cartDao=mock(CartReadService.class);
  private final ItemReadService itemReadService =mock(ItemReadService.class);

  private final AdminCartResource testObject=new AdminCartResource();

  @Override
  protected void setUpResources() {

    // Create the User for authenticated access
    User adminUser = setUpTrentHmacAuthenticator();
    adminUser.setId(1L);

    // Create the supporting Role
    Role customerRole = DatabaseLoader.buildCustomerRole();

    // Create some Customers
    User aliceUser = DatabaseLoader.buildAliceCustomer(customerRole);
    aliceUser.setId(1L);
    aliceUser.getCustomer().setId(1L);
    aliceUser.getCustomer().getCart().setId(1L);

    User bobUser = DatabaseLoader.buildBobCustomer(customerRole);
    bobUser.setId(2L);
    bobUser.getCustomer().setId(2L);
    bobUser.getCustomer().getCart().setId(2L);

    // Configure Alice's Cart with Items
    Cart aliceCart = aliceUser.getCustomer().getCart();

    Item book1 = DatabaseLoader.buildBookItemCryptonomicon();
    book1.setId(1L);
    Item book2 = DatabaseLoader.buildBookItemQuantumThief();
    book2.setId(2L);

    aliceCart.setItemQuantity(book1, 1);
    aliceCart.setItemQuantity(book2, 2);

    // Configure Bob's Cart with Items
    Cart bobCart = bobUser.getCustomer().getCart();

    Item book3 = DatabaseLoader.buildBookItemCompleteWorks();
    book3.setId(3L);
    Item book4 = DatabaseLoader.buildBookItemPlumbing();
    book4.setId(4L);

    bobCart.setItemQuantity(book3, 3);
    bobCart.setItemQuantity(book4, 4);

    // Create some mock results
    List<Cart> cartList1 = Lists.newArrayList(aliceCart);
    List<Cart> cartList2 = Lists.newArrayList(bobCart);

    PaginatedList<Cart> page1 = PaginatedLists.newPaginatedArrayList(1, 2, 1, cartList1);
    PaginatedList<Cart> page2 = PaginatedLists.newPaginatedArrayList(2, 2, 1, cartList2);

    // Configure Cart DAO

    when(cartDao.getById(aliceCart.getId())).thenReturn(Optional.of(aliceCart));
    when(cartDao.getById(bobCart.getId())).thenReturn(Optional.of(bobCart));
    when(cartDao.getPaginatedList(1, 1)).thenReturn(page1);
    when(cartDao.getPaginatedList(1, 2)).thenReturn(page2);
    when(cartDao.saveOrUpdate(aliceCart)).thenReturn(aliceCart);
    when(cartDao.saveOrUpdate(bobCart)).thenReturn(bobCart);

    // Configure Item DAO
    when(itemReadService.getBySKU(book1.getSKU())).thenReturn(Optional.of(book1));
    when(itemReadService.getBySKU(book2.getSKU())).thenReturn(Optional.of(book2));
    when(itemReadService.getBySKU(book3.getSKU())).thenReturn(Optional.of(book3));
    when(itemReadService.getBySKU(book4.getSKU())).thenReturn(Optional.of(book4));

    testObject.setCartDao(cartDao);
    testObject.setItemReadService(itemReadService);

    // Configure resources
    addSingleton(testObject);

  }
  @Test
  public void adminRetrieveCartsAsHalJson() throws Exception {

    String actualResponse = configureAsClient(AdminCartResource.class)
      .queryParam("ps","1")
      .queryParam("pn", "1")
      .accept(HalMediaType.APPLICATION_HAL_JSON)
      .get(String.class);

    FixtureAsserts.assertStringMatchesJsonFixture("Cart list 1 can be retrieved as HAL+JSON", actualResponse, "/fixtures/hal/cart/expected-admin-retrieve-carts-page-1.json");

    actualResponse = configureAsClient(AdminCartResource.class)
      .queryParam("ps","1")
      .queryParam("pn", "2")
      .accept(HalMediaType.APPLICATION_HAL_JSON)
      .get(String.class);

    FixtureAsserts.assertStringMatchesJsonFixture("Cart list 2 can be retrieved as HAL+JSON", actualResponse, "/fixtures/hal/cart/expected-admin-retrieve-carts-page-2.json");

  }

  @Test
  public void adminUpdateCartAsHalJson() throws Exception {

    // Starting condition is Alice has {book1: 1, book2: 2}
    // Ending condition is Alice has {book1: 0, book2: 2, book3: 3}

    AdminUpdateCartDto updateCartRequest = new AdminUpdateCartDto();
    // Add a few new items
    updateCartRequest.getCartItems().add(new PublicCartItemDto("0316184136",3));
    // Remove by setting to zero
    updateCartRequest.getCartItems().add(new PublicCartItemDto("0099410672",0));

    URI uri = UriBuilder.fromPath(CartLinks.ADMIN_SELF_TEMPLATE).build(1);

    String actualResponse = configureAsClient(uri)
      .accept(HalMediaType.APPLICATION_HAL_JSON)
      .entity(updateCartRequest, MediaType.APPLICATION_JSON_TYPE)
      .put(String.class);

    FixtureAsserts.assertStringMatchesJsonFixture("UpdateCart by admin response render to HAL+JSON",actualResponse, "/fixtures/hal/cart/expected-admin-update-cart.json");

  }

}
TOP

Related Classes of org.multibit.mbm.client.interfaces.rest.resources.cart.AdminCartResourceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.