// Path: app/src/main/java/de/czyrux/store/core/data/util/TimeDelayer.java
// public class TimeDelayer {
// 
//     private static final int MAX_DEFAULT_DELAY = 2000; // 2 sec
//     private final Random random;
// 
//     public TimeDelayer() {
//         random = new Random(System.nanoTime());
//     }
// 
//     public void delay(int maxTime) {
//         try {
//             Thread.sleep(random.nextInt(maxTime));
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
//     }
// 
//     public void delay() {
//         delay(MAX_DEFAULT_DELAY);
//     }
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/domain/cart/CartProduct.java
// public class CartProduct extends Product {
// 
//     public final int quantity;
// 
//     public CartProduct(String sku, String title, String imageUrl, double price, int quantity) {
//         super(sku, title, imageUrl, price);
//         this.quantity = quantity;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         if (!super.equals(o)) return false;
// 
//         CartProduct product = (CartProduct) o;
// 
//         return quantity == product.quantity;
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = super.hashCode();
//         result = 31 * result + quantity;
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         final StringBuilder sb = new StringBuilder("CartProduct{");
//         sb.append("quantity=").append(quantity);
//         sb.append('}');
//         return sb.toString();
//     }
// }
// 
// Path: app/src/test/java/de/czyrux/store/test/CartFakeCreator.java
// public class CartFakeCreator {
// 
//     public static Cart emptyCart() {
//         return new Cart(Collections.emptyList());
//     }
// 
//     public static Cart cartWithElements(CartProduct... products) {
//         return new Cart(Arrays.asList(products));
//     }
// }
// 
// Path: app/src/test/java/de/czyrux/store/test/CartProductFakeCreator.java
// public class CartProductFakeCreator {
// 
//     private static final String DEFAULT_SKU = "ada300343";
//     private static final int DEFAULT_QUANTITY = 1;
// 
//     private CartProductFakeCreator() {
//     }
// 
//     public static CartProduct createProduct() {
//         return createProduct(DEFAULT_SKU, DEFAULT_QUANTITY);
//     }
// 
//     public static CartProduct createProduct(String sku) {
//         return createProduct(sku, DEFAULT_QUANTITY);
//     }
// 
//     public static CartProduct createProduct(String sku, int quantity) {
//         return new CartProduct(sku, "Adidas Perf", "someImage", 23.5f, quantity);
//     }
// }


import org.junit.Before;
import org.junit.Test;
import de.czyrux.store.core.data.util.TimeDelayer;
import de.czyrux.store.core.domain.cart.CartProduct;
import de.czyrux.store.test.CartFakeCreator;
import de.czyrux.store.test.CartProductFakeCreator;
import static org.mockito.Mockito.mock;
package de.czyrux.store.core.data.sources;




public class InMemoryCartDataSourceTest {

    private InMemoryCartDataSource cartDataSource;

    @Before
    public void setUp() throws Exception {

// Path: app/src/main/java/de/czyrux/store/core/data/util/TimeDelayer.java
// public class TimeDelayer {
// 
//     private static final int MAX_DEFAULT_DELAY = 2000; // 2 sec
//     private final Random random;
// 
//     public TimeDelayer() {
//         random = new Random(System.nanoTime());
//     }
// 
//     public void delay(int maxTime) {
//         try {
//             Thread.sleep(random.nextInt(maxTime));
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
//     }
// 
//     public void delay() {
//         delay(MAX_DEFAULT_DELAY);
//     }
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/domain/cart/CartProduct.java
// public class CartProduct extends Product {
// 
//     public final int quantity;
// 
//     public CartProduct(String sku, String title, String imageUrl, double price, int quantity) {
//         super(sku, title, imageUrl, price);
//         this.quantity = quantity;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         if (!super.equals(o)) return false;
// 
//         CartProduct product = (CartProduct) o;
// 
//         return quantity == product.quantity;
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = super.hashCode();
//         result = 31 * result + quantity;
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         final StringBuilder sb = new StringBuilder("CartProduct{");
//         sb.append("quantity=").append(quantity);
//         sb.append('}');
//         return sb.toString();
//     }
// }
// 
// Path: app/src/test/java/de/czyrux/store/test/CartFakeCreator.java
// public class CartFakeCreator {
// 
//     public static Cart emptyCart() {
//         return new Cart(Collections.emptyList());
//     }
// 
//     public static Cart cartWithElements(CartProduct... products) {
//         return new Cart(Arrays.asList(products));
//     }
// }
// 
// Path: app/src/test/java/de/czyrux/store/test/CartProductFakeCreator.java
// public class CartProductFakeCreator {
// 
//     private static final String DEFAULT_SKU = "ada300343";
//     private static final int DEFAULT_QUANTITY = 1;
// 
//     private CartProductFakeCreator() {
//     }
// 
//     public static CartProduct createProduct() {
//         return createProduct(DEFAULT_SKU, DEFAULT_QUANTITY);
//     }
// 
//     public static CartProduct createProduct(String sku) {
//         return createProduct(sku, DEFAULT_QUANTITY);
//     }
// 
//     public static CartProduct createProduct(String sku, int quantity) {
//         return new CartProduct(sku, "Adidas Perf", "someImage", 23.5f, quantity);
//     }
// }


// Path: app/src/test/java/de/czyrux/store/core/data/sources/InMemoryCartDataSourceTest.java
import org.junit.Before;
import org.junit.Test;
import de.czyrux.store.core.data.util.TimeDelayer;
import de.czyrux.store.core.domain.cart.CartProduct;
import de.czyrux.store.test.CartFakeCreator;
import de.czyrux.store.test.CartProductFakeCreator;
import static org.mockito.Mockito.mock;

package de.czyrux.store.core.data.sources;




public class InMemoryCartDataSourceTest {

    private InMemoryCartDataSource cartDataSource;

    @Before
    public void setUp() throws Exception {

        TimeDelayer timeDelayer = mock(TimeDelayer.class);