001/*
002 * Stallion Core: A Modern Web Framework
003 *
004 * Copyright (C) 2015 - 2016 Stallion Software LLC.
005 *
006 * This program is free software: you can redistribute it and/or modify it under the terms of the
007 * GNU General Public License as published by the Free Software Foundation, either version 2 of
008 * the License, or (at your option) any later version. This program is distributed in the hope that
009 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
011 * License for more details. You should have received a copy of the GNU General Public License
012 * along with this program.  If not, see <http://www.gnu.org/licenses/gpl-2.0.html>.
013 *
014 *
015 *
016 */
017
018package io.stallion.testing;
019
020import io.stallion.Context;
021import io.stallion.requests.RequestHandler;
022import io.stallion.requests.StRequest;
023import io.stallion.boot.AppContextLoader;
024import io.stallion.restfulEndpoints.XSRFHooks;
025import io.stallion.users.IUser;
026import io.stallion.users.User;
027import io.stallion.users.UserController;
028
029import javax.servlet.http.Cookie;
030import java.util.List;
031import java.util.Map;
032
033import static io.stallion.utils.Literals.asArray;
034import static io.stallion.utils.Literals.list;
035
036
037public class TestClient {
038    private List<Cookie> cookies = list(new Cookie(XSRFHooks.COOKIE_NAME, "someval"));
039    private AppContextLoader app;
040    public TestClient() {
041        this.app = AppContextLoader.instance();
042    }
043    public TestClient(AppContextLoader app) {
044        this.app = app;
045    }
046
047    public TestClient withUser(String email) {
048        IUser user = UserController.instance().forEmail(email);
049        String val = UserController.instance().userToCookieString(user, false);
050        return withCookie(UserController.USER_COOKIE_NAME, val);
051    }
052
053    public TestClient withUser(Long userId) {
054        IUser user = UserController.instance().forId(userId);
055        String val = UserController.instance().userToCookieString(user, false);
056        return withCookie(UserController.USER_COOKIE_NAME, val);
057    }
058
059
060    public TestClient withCookie(String name, String value) {
061        this.cookies.add(new Cookie(name, value));
062        return this;
063    }
064
065    public MockResponse get(String path) {
066        MockRequest request = new MockRequest(path, "GET");
067        request.addHeader(XSRFHooks.HEADER_NAME, "someval");
068        request.setCookies(asArray(cookies, Cookie.class));
069        MockResponse response = new MockResponse();
070        RequestHandler.instance().handleStallionRequest(request, response);
071        return response;
072    }
073
074    public MockResponse post(String path, Object dataObject) {
075        MockRequest request = new MockRequest(path, "POST").setDataObject(dataObject);
076        request.addHeader(XSRFHooks.HEADER_NAME, "someval");
077        request.setCookies(asArray(cookies, Cookie.class));
078
079
080        MockResponse response = new MockResponse();
081        RequestHandler.instance().handleStallionRequest(request, response);
082        return response;
083    }
084
085    public MockResponse put(String path, Object dataObject) {
086        MockRequest request = new MockRequest(path, "PUT").setDataObject(dataObject);
087        request.addHeader(XSRFHooks.HEADER_NAME, "someval");
088        request.setCookies(asArray(cookies, Cookie.class));
089
090        MockResponse response = new MockResponse();
091        RequestHandler.instance().handleStallionRequest(request, response);
092        return response;
093    }
094
095    public MockResponse post(String path, Map<String, Object> data) {
096        MockRequest request = new MockRequest(path, "POST").setData(data);
097        request.addHeader(XSRFHooks.HEADER_NAME, "someval");
098        request.setCookies(asArray(cookies, Cookie.class));
099
100        MockResponse response = new MockResponse();
101        RequestHandler.instance().handleStallionRequest(request, response);
102        return response;
103    }
104
105    public MockResponse put(String path, Map<String, Object> data) {
106        MockRequest request = new MockRequest(path, "POST").setData(data);
107        request.addHeader(XSRFHooks.HEADER_NAME, "someval");
108        request.setCookies(asArray(cookies, Cookie.class));
109        request.setCookies(new Cookie(XSRFHooks.COOKIE_NAME, "someval"));
110
111        MockResponse response = new MockResponse();
112        RequestHandler.instance().handleStallionRequest(request, response);
113        return response;
114    }
115
116    public MockRequest build(String path, String method) {
117        MockRequest request = new MockRequest(path, method);
118        request.addHeader(XSRFHooks.HEADER_NAME, "someval");
119        request.setCookies(asArray(cookies, Cookie.class));
120        return request;
121    }
122
123    public MockResponse request(StRequest request) {
124        MockResponse response = new MockResponse();
125        RequestHandler.instance().handleStallionRequest(request, response);
126        return response;
127    }
128}