// Path: src/test/java/com/github/rwitzel/couchrepository/model/Product.java
// public class Product extends BaseDocument {
// 
//     private Date lastModification;
// 
//     private String manufacturerId;
// 
//     private String text;
// 
//     private ProductRating rating;
// 
//     private boolean hidden;
// 
//     private Integer numBuyers;
// 
//     private double weight;
// 
//     private BigDecimal price;
// 
//     private List<String> tags;
// 
//     private List<Comment> comments;
//     
//     private int isoProductCode;
// 
//     public Date getLastModification() {
//         return lastModification;
//     }
// 
//     public void setLastModification(Date lastModification) {
//         this.lastModification = lastModification;
//     }
// 
//     public String getText() {
//         return text;
//     }
// 
//     public void setText(String text) {
//         this.text = text;
//     }
// 
//     public ProductRating getRating() {
//         return rating;
//     }
// 
//     public void setRating(ProductRating rating) {
//         this.rating = rating;
//     }
// 
//     public boolean isHidden() {
//         return hidden;
//     }
// 
//     public void setHidden(boolean hidden) {
//         this.hidden = hidden;
//     }
// 
//     public Integer getNumBuyers() {
//         return numBuyers;
//     }
// 
//     public void setNumBuyers(Integer numBuyers) {
//         this.numBuyers = numBuyers;
//     }
// 
//     public double getWeight() {
//         return weight;
//     }
// 
//     public void setWeight(double weight) {
//         this.weight = weight;
//     }
// 
//     public BigDecimal getPrice() {
//         return price;
//     }
// 
//     public void setPrice(BigDecimal price) {
//         this.price = price;
//     }
// 
//     public List<String> getTags() {
//         if (tags == null) {
//             return new ArrayList<String>();
//         }
//         return tags;
//     }
// 
//     public void setTags(List<String> tags) {
//         this.tags = tags;
//     }
// 
//     public List<Comment> getComments() {
//         if (comments == null) {
//             comments = new ArrayList<Comment>();
//         }
//         return comments;
//     }
// 
//     public void setComments(List<Comment> comments) {
//         this.comments = comments;
//     }
// 
//     public String getManufacturerId() {
//         return manufacturerId;
//     }
// 
//     public void setManufacturerId(String manufacturerId) {
//         this.manufacturerId = manufacturerId;
//     }
// 
//     public int getIsoProductCode() {
//         return isoProductCode;
//     }
// 
//     public void setIsoProductCode(int isoProductCode) {
//         this.isoProductCode = isoProductCode;
//     }
// }


import static com.googlecode.catchexception.CatchException.catchException;
import static com.googlecode.catchexception.CatchException.caughtException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.github.rwitzel.couchrepository.model.Product;
package com.github.rwitzel.couchrepository.api;





/**
 * Tests the integration of custom implementations of query methods.
 * 
 * @author rwitzel
 */
public abstract class AbstractCustomImplementationTest extends AbstractAutomaticImplementationTest {

    @Autowired
    private ProductRepository productRepo;
    
    @Test
    public void testDelegateToCustomImplementation() throws Exception {
        
        deleteProductRepoAndCreateSomeProducts();

// Path: src/test/java/com/github/rwitzel/couchrepository/model/Product.java
// public class Product extends BaseDocument {
// 
//     private Date lastModification;
// 
//     private String manufacturerId;
// 
//     private String text;
// 
//     private ProductRating rating;
// 
//     private boolean hidden;
// 
//     private Integer numBuyers;
// 
//     private double weight;
// 
//     private BigDecimal price;
// 
//     private List<String> tags;
// 
//     private List<Comment> comments;
//     
//     private int isoProductCode;
// 
//     public Date getLastModification() {
//         return lastModification;
//     }
// 
//     public void setLastModification(Date lastModification) {
//         this.lastModification = lastModification;
//     }
// 
//     public String getText() {
//         return text;
//     }
// 
//     public void setText(String text) {
//         this.text = text;
//     }
// 
//     public ProductRating getRating() {
//         return rating;
//     }
// 
//     public void setRating(ProductRating rating) {
//         this.rating = rating;
//     }
// 
//     public boolean isHidden() {
//         return hidden;
//     }
// 
//     public void setHidden(boolean hidden) {
//         this.hidden = hidden;
//     }
// 
//     public Integer getNumBuyers() {
//         return numBuyers;
//     }
// 
//     public void setNumBuyers(Integer numBuyers) {
//         this.numBuyers = numBuyers;
//     }
// 
//     public double getWeight() {
//         return weight;
//     }
// 
//     public void setWeight(double weight) {
//         this.weight = weight;
//     }
// 
//     public BigDecimal getPrice() {
//         return price;
//     }
// 
//     public void setPrice(BigDecimal price) {
//         this.price = price;
//     }
// 
//     public List<String> getTags() {
//         if (tags == null) {
//             return new ArrayList<String>();
//         }
//         return tags;
//     }
// 
//     public void setTags(List<String> tags) {
//         this.tags = tags;
//     }
// 
//     public List<Comment> getComments() {
//         if (comments == null) {
//             comments = new ArrayList<Comment>();
//         }
//         return comments;
//     }
// 
//     public void setComments(List<Comment> comments) {
//         this.comments = comments;
//     }
// 
//     public String getManufacturerId() {
//         return manufacturerId;
//     }
// 
//     public void setManufacturerId(String manufacturerId) {
//         this.manufacturerId = manufacturerId;
//     }
// 
//     public int getIsoProductCode() {
//         return isoProductCode;
//     }
// 
//     public void setIsoProductCode(int isoProductCode) {
//         this.isoProductCode = isoProductCode;
//     }
// }


// Path: src/test/java/com/github/rwitzel/couchrepository/api/AbstractCustomImplementationTest.java
import static com.googlecode.catchexception.CatchException.catchException;
import static com.googlecode.catchexception.CatchException.caughtException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.github.rwitzel.couchrepository.model.Product;

package com.github.rwitzel.couchrepository.api;





/**
 * Tests the integration of custom implementations of query methods.
 * 
 * @author rwitzel
 */
public abstract class AbstractCustomImplementationTest extends AbstractAutomaticImplementationTest {

    @Autowired
    private ProductRepository productRepo;
    
    @Test
    public void testDelegateToCustomImplementation() throws Exception {
        
        deleteProductRepoAndCreateSomeProducts();

        List<Product> products = productRepo.findByComment(new Object[] { "authorB", "textB" }, true);