// Path: core/src/main/java/au/com/sensis/stubby/model/StubMessage.java
// public abstract class StubMessage {
// 
//     private List<StubParam> headers;
//     private Object body;
// 
//     protected StubMessage() { }
//     
//     protected StubMessage(StubMessage other) { // copy constructor
//         this.body = (other.body != null) ? DeepCopyUtils.deepCopy(other.body) : null;
//         if (other.headers != null) {
//             this.headers = new ArrayList<StubParam>();
//             for (StubParam param : other.headers) {
//                 headers.add(new StubParam(param));
//             }
//         }
//     }
//     
//     public List<StubParam> getHeaders() {
//         return headers;
//     }
// 
//     public void setHeaders(List<StubParam> headers) {
//         this.headers = headers;
//     }
// 
//     public Object getBody() {
//         return body;
//     }
// 
//     public void setBody(Object body) {
//         this.body = body;
//     }
//     
//     @JsonIgnore
//     public String getHeader(String name) { // get first, case insensitive lookup
//         if (headers != null) {
//             for (StubParam header : headers) {
//                 if (header.getName().equalsIgnoreCase(name)) {
//                     return header.getValue();
//                 }
//             }
//         }
//         return null; // not found
//     }
//     
//     @JsonIgnore
//     public void removeHeader(String name) { // case insensitive lookup
//         if (headers != null) {
//             Iterator<StubParam> iter = headers.iterator();
//             while (iter.hasNext()) {
//                 if (iter.next().getName().equalsIgnoreCase(name)) {
//                     iter.remove();
//                 }
//             }
//         }
//     }
//     
//     @JsonIgnore
//     public void setHeader(String name, String value) { // replace value, case insensitive lookup
//         removeHeader(name);
//         if (headers == null) {
//             headers = new ArrayList<StubParam>();
//         }
//         headers.add(new StubParam(name, value));        
//     }
//     
//     @JsonIgnore
//     public List<String> getHeaders(String name) { // get all, case insensitive lookup
//         List<String> result = new ArrayList<String>();
//         if (headers != null) {
//             for (StubParam header : headers) {
//                 if (header.getName().equalsIgnoreCase(name)) {
//                     result.add(header.getValue());
//                 }
//             }
//         }
//         return result; // empty list if not found
//     }
//     
// }
// 
// Path: core/src/main/java/au/com/sensis/stubby/model/StubRequest.java
// public class StubRequest extends StubMessage {
// 
//     private String method;
//     private String path;
//     private List<StubParam> params;
// 
//     public StubRequest() { }
//     
//     public StubRequest(StubRequest other) { // copy constructor
//         super(other);
//         this.method = other.method;
//         this.path = other.path;
//         if (other.params != null) {
//             this.params = new ArrayList<StubParam>();
//             for (StubParam param : other.params) {
//                 this.params.add(new StubParam(param));
//             }
//         }
//     }
//     
//     public String getMethod() {
//         return method;
//     }
// 
//     public void setMethod(String method) {
//         this.method = method;
//     }
// 
//     public String getPath() {
//         return path;
//     }
// 
//     public void setPath(String path) {
//         this.path = path;
//     }
// 
//     public List<StubParam> getParams() {
//         return params;
//     }
// 
//     public void setParams(List<StubParam> params) {
//         this.params = params;
//     }
//     
//     @JsonIgnore
//     public String getParam(String name) { // get first, case sensitive lookup
//         if (params != null) {
//             for (StubParam param : params) {
//                 if (param.getName().equals(name)) {
//                     return param.getValue();
//                 }
//             }
//         }
//         return null; // not found
//     }
// 
//     @JsonIgnore
//     public List<String> getParams(String name) { // get all, case sensitive lookup
//         List<String> result = new ArrayList<String>();
//         if (params != null) {
//             for (StubParam param : params) {
//                 if (param.getName().equals(name)) {
//                     result.add(param.getValue());
//                 }
//             }
//         }
//         return result; // empty list if not found
//     }
// 
// }
// 
// Path: core/src/main/java/au/com/sensis/stubby/service/model/MatchField.java
// public enum FieldType {
//     PATH,
//     METHOD,
//     QUERY_PARAM,
//     HEADER,
//     BODY;
// }
// 
// Path: core/src/main/java/au/com/sensis/stubby/service/model/MatchField.java
// public enum MatchType {
//     NOT_FOUND,
//     MATCH_FAILURE,
//     MATCH;
// }


import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import au.com.sensis.stubby.model.StubMessage;
import au.com.sensis.stubby.model.StubRequest;
import au.com.sensis.stubby.service.model.MatchField.FieldType;
import au.com.sensis.stubby.service.model.MatchField.MatchType;
package au.com.sensis.stubby.service.model;




public class TextBodyPatternTest {

    private StubMessage request;

    @Before
    public void before() {
        request = new StubRequest();
        request.setHeader("Content-Type", "text/plain");
        request.setBody("foo");
    }

    private void assertRequestMatches(String patternStr) {
        TextBodyPattern pattern = new TextBodyPattern(patternStr);

        MatchField result = pattern.matches(request);

        assertEquals(FieldType.BODY, result.getFieldType());
        assertEquals(MatchType.MATCH, result.getMatchType());
    }

    private void assertRequestDoesNotMatch(String patternStr) {
        TextBodyPattern pattern = new TextBodyPattern(patternStr);

        MatchField result = pattern.matches(request);

// Path: core/src/main/java/au/com/sensis/stubby/model/StubMessage.java
// public abstract class StubMessage {
// 
//     private List<StubParam> headers;
//     private Object body;
// 
//     protected StubMessage() { }
//     
//     protected StubMessage(StubMessage other) { // copy constructor
//         this.body = (other.body != null) ? DeepCopyUtils.deepCopy(other.body) : null;
//         if (other.headers != null) {
//             this.headers = new ArrayList<StubParam>();
//             for (StubParam param : other.headers) {
//                 headers.add(new StubParam(param));
//             }
//         }
//     }
//     
//     public List<StubParam> getHeaders() {
//         return headers;
//     }
// 
//     public void setHeaders(List<StubParam> headers) {
//         this.headers = headers;
//     }
// 
//     public Object getBody() {
//         return body;
//     }
// 
//     public void setBody(Object body) {
//         this.body = body;
//     }
//     
//     @JsonIgnore
//     public String getHeader(String name) { // get first, case insensitive lookup
//         if (headers != null) {
//             for (StubParam header : headers) {
//                 if (header.getName().equalsIgnoreCase(name)) {
//                     return header.getValue();
//                 }
//             }
//         }
//         return null; // not found
//     }
//     
//     @JsonIgnore
//     public void removeHeader(String name) { // case insensitive lookup
//         if (headers != null) {
//             Iterator<StubParam> iter = headers.iterator();
//             while (iter.hasNext()) {
//                 if (iter.next().getName().equalsIgnoreCase(name)) {
//                     iter.remove();
//                 }
//             }
//         }
//     }
//     
//     @JsonIgnore
//     public void setHeader(String name, String value) { // replace value, case insensitive lookup
//         removeHeader(name);
//         if (headers == null) {
//             headers = new ArrayList<StubParam>();
//         }
//         headers.add(new StubParam(name, value));        
//     }
//     
//     @JsonIgnore
//     public List<String> getHeaders(String name) { // get all, case insensitive lookup
//         List<String> result = new ArrayList<String>();
//         if (headers != null) {
//             for (StubParam header : headers) {
//                 if (header.getName().equalsIgnoreCase(name)) {
//                     result.add(header.getValue());
//                 }
//             }
//         }
//         return result; // empty list if not found
//     }
//     
// }
// 
// Path: core/src/main/java/au/com/sensis/stubby/model/StubRequest.java
// public class StubRequest extends StubMessage {
// 
//     private String method;
//     private String path;
//     private List<StubParam> params;
// 
//     public StubRequest() { }
//     
//     public StubRequest(StubRequest other) { // copy constructor
//         super(other);
//         this.method = other.method;
//         this.path = other.path;
//         if (other.params != null) {
//             this.params = new ArrayList<StubParam>();
//             for (StubParam param : other.params) {
//                 this.params.add(new StubParam(param));
//             }
//         }
//     }
//     
//     public String getMethod() {
//         return method;
//     }
// 
//     public void setMethod(String method) {
//         this.method = method;
//     }
// 
//     public String getPath() {
//         return path;
//     }
// 
//     public void setPath(String path) {
//         this.path = path;
//     }
// 
//     public List<StubParam> getParams() {
//         return params;
//     }
// 
//     public void setParams(List<StubParam> params) {
//         this.params = params;
//     }
//     
//     @JsonIgnore
//     public String getParam(String name) { // get first, case sensitive lookup
//         if (params != null) {
//             for (StubParam param : params) {
//                 if (param.getName().equals(name)) {
//                     return param.getValue();
//                 }
//             }
//         }
//         return null; // not found
//     }
// 
//     @JsonIgnore
//     public List<String> getParams(String name) { // get all, case sensitive lookup
//         List<String> result = new ArrayList<String>();
//         if (params != null) {
//             for (StubParam param : params) {
//                 if (param.getName().equals(name)) {
//                     result.add(param.getValue());
//                 }
//             }
//         }
//         return result; // empty list if not found
//     }
// 
// }
// 
// Path: core/src/main/java/au/com/sensis/stubby/service/model/MatchField.java
// public enum FieldType {
//     PATH,
//     METHOD,
//     QUERY_PARAM,
//     HEADER,
//     BODY;
// }
// 
// Path: core/src/main/java/au/com/sensis/stubby/service/model/MatchField.java
// public enum MatchType {
//     NOT_FOUND,
//     MATCH_FAILURE,
//     MATCH;
// }


// Path: core/src/test/java/au/com/sensis/stubby/service/model/TextBodyPatternTest.java
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import au.com.sensis.stubby.model.StubMessage;
import au.com.sensis.stubby.model.StubRequest;
import au.com.sensis.stubby.service.model.MatchField.FieldType;
import au.com.sensis.stubby.service.model.MatchField.MatchType;

package au.com.sensis.stubby.service.model;




public class TextBodyPatternTest {

    private StubMessage request;

    @Before
    public void before() {
        request = new StubRequest();
        request.setHeader("Content-Type", "text/plain");
        request.setBody("foo");
    }

    private void assertRequestMatches(String patternStr) {
        TextBodyPattern pattern = new TextBodyPattern(patternStr);

        MatchField result = pattern.matches(request);

        assertEquals(FieldType.BODY, result.getFieldType());
        assertEquals(MatchType.MATCH, result.getMatchType());
    }

    private void assertRequestDoesNotMatch(String patternStr) {
        TextBodyPattern pattern = new TextBodyPattern(patternStr);

        MatchField result = pattern.matches(request);

        assertEquals(FieldType.BODY, result.getFieldType());