Package

Source Code of FriendshipUserTest

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import static play.test.Helpers.DELETE;
import static play.test.Helpers.GET;
import static play.test.Helpers.POST;
import static play.test.Helpers.PUT;
import static play.test.Helpers.contentAsString;
import static play.test.Helpers.fakeApplication;
import static play.test.Helpers.routeAndCall;
import static play.test.Helpers.running;

import java.util.UUID;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;

import play.mvc.Http.Status;
import play.mvc.Result;
import play.test.FakeRequest;
import core.AbstractTest;
import core.TestConfig;


public class FriendshipUserTest extends AbstractTest{

   public static final String USER1_TEST = "user1"
   public static final String USER2_TEST = "user2";
   public static final String USER3_TEST = "user3";
  
   public static final String USER4_TEST = "user4";
   public static final String USER5_TEST = "user4";
 
  
  @Override
  public String getRouteAddress()
  {
    return "/follow";
  }
 
  @Override
  public String getMethod()
  {
    return POST;
  }
 
  @Override
  protected void assertContent(String s)
  {
  }
 
  public String routeCreateNewUser(String username)
  {
    String sFakeUser = username + "-" + UUID.randomUUID();
    // Prepare test user
    JsonNode node = updatePayloadFieldValue("/adminUserCreatePayload.json", "username", sFakeUser);

    // Create user
    FakeRequest request = new FakeRequest(POST, "/user");
    request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
    request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
    request = request.withJsonBody(node, POST);
    Result result = routeAndCall(request);
    assertRoute(result, "Create user.", Status.CREATED, null, false);

    return sFakeUser;
  }
 
  public void routeCreateNewFollowRelationship(String follower,String toFollow)
  {
   
    FakeRequest request = new FakeRequest(POST, getRouteAddress()+"/"+toFollow);
    request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
    request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(follower, "passw1"));
   
    Result result = routeAndCall(request);
    assertRoute(result, "Create friendship.", Status.CREATED, "+39334060606",true);
    assertRoute(result, "Create friendship. 2", Status.CREATED, "\"visibleByTheUser\":null",true);
  }
 
  public void routeCreateNewUnexistentFollowRelationship(String follower,String toFollow)
  {
   
    FakeRequest request = new FakeRequest(POST, getRouteAddress()+"/"+toFollow);
    request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
    request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(follower, "passw1"));
   
    Result result = routeAndCall(request);
    assertRoute(result, "Create friendship.", Status.NOT_FOUND, "User "+toFollow+" does not exists.", true);

   
  }
 
  public void routeDeleteFollowRelationship(String follower,String toUnfollow)
  {
   
    FakeRequest request = new FakeRequest(DELETE, getRouteAddress()+"/"+toUnfollow);
    request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
    request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(follower, "passw1"));
   
    Result result = routeAndCall(request);
    assertRoute(result, "Delete friendship.", Status.OK, null, false);
    //now if I ask for the ex-friend profile, I couldn't see its FriendAttributes fields
   
    request = new FakeRequest(GET, "/user/"+toUnfollow);
    request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
    request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(follower, "passw1"));
    result = routeAndCall(request);
    assertRoute(result, "Check no friendship.", Status.OK, null, false);
    String resultString = contentAsString(result);
    if (resultString.contains("+39334060606")) assertFail("FriendshipUserTest (routeDeleteFollowRelationship) failed! The ex-friend still see private fields!");
   
  }
 
  public void routeDeleteUnexistentFollowRelationship(String follower,String toUnfollow)
  {
   
    FakeRequest request = new FakeRequest(DELETE, getRouteAddress()+"/"+toUnfollow);
    request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
    request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(follower, "passw1"));
   
    Result result = routeAndCall(request);
    assertRoute(result, "Delete friendship.", Status.NOT_FOUND, null, false);

   
  }
  public void routeCreateCollectionForTest()
  {
   
    FakeRequest request = new FakeRequest(POST, "/admin/collection/testFriendship");
    request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
    request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
   
    Result result = routeAndCall(request);
   
  }
 
  public String routeCreateDocument(String owner)
  {
   
    FakeRequest request = new FakeRequest(POST, "/document/testFriendship");
    request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
    request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(owner, "passw1"));
    request = request.withJsonBody(getPayload("/documentCreatePayload.json"));
    Result result = routeAndCall(request);
    assertRoute(result, "Create document.", Status.OK, null, false);
    return contentAsString(result);
   
  }
 
  @Test
  public void createUsersAndFollow(){
    running
    (
      getFakeApplication(),
      new Runnable()
      {
        public void run()
        {
         
          routeCreateCollectionForTest();
         
          String firstUser  = routeCreateNewUser(USER1_TEST);
          String secondUser = routeCreateNewUser(USER2_TEST);
          assertNotNull(firstUser,"First User creation");
          assertNotNull(secondUser,"Second User creation");
          routeCreateNewFollowRelationship(firstUser, secondUser);
          String content = routeCreateDocument(secondUser);
          JSONObject result = (JSONObject)toJSON(content);
          try {
            String uuid = result.getJSONObject("data").getString("id");
            assertNotNull(uuid);
            FakeRequest fk = new FakeRequest(GET, "/document/testFriendship/"+uuid);
            fk = fk.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
            fk = fk.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(firstUser, "passw1"));
            Result getDocumentResult = routeAndCall(fk);
            assertRoute(getDocumentResult, "Get document by friend", Status.NOT_FOUND, null, false);
           
            //the owner of the doc gives grant to its friends
            fk = new FakeRequest(PUT, "/document/testFriendship/"+uuid+"/read/role/friends_of_"+secondUser);
            fk = fk.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
            fk = fk.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(secondUser, "passw1"));
            Result res = routeAndCall(fk);
            assertRoute(res, "Change the document permission", Status.OK, null, false);
           
            //now the friend reload the doc and read it
            fk = new FakeRequest(GET, "/document/testFriendship/"+uuid);
            fk = fk.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
            fk = fk.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(firstUser, "passw1"));
            getDocumentResult = routeAndCall(fk);
            assertRoute(getDocumentResult, "Get document by friend 2", Status.OK, null, false);
            JSONObject createdDocument = (JSONObject)toJSON(contentAsString(getDocumentResult));
            String author = createdDocument.getJSONObject("data").getString("_author");
            assertEquals(secondUser,author);
           
            FakeRequest theFolloweds = new FakeRequest(GET, "/following");
            theFolloweds = theFolloweds.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
            theFolloweds = theFolloweds.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(firstUser, "passw1"));
           
            Result getTheFollowedResult = routeAndCall(theFolloweds);
            JSONObject followedJson = (JSONObject)toJSON(contentAsString(getTheFollowedResult));
            String followed = followedJson.getJSONArray("data").getJSONObject(0).getJSONObject("user").getString("name");
            assertEquals(followed,secondUser);
           
            //check the followers
            FakeRequest followers = new FakeRequest(GET, "/followers");
            followers = followers.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
            followers = followers.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(secondUser, "passw1"));
            Result getFollowersResult = routeAndCall(followers);
            JSONObject followersJson = (JSONObject)toJSON(contentAsString(getFollowersResult));
            String follower = followersJson.getJSONArray("data").getJSONObject(0).getJSONObject("user").getString("name");
            assertEquals(follower,firstUser);
           
            //the first user get the followers of the second one
            followers = new FakeRequest(GET, "/followers/"+secondUser);
            followers = followers.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
            followers = followers.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(firstUser, "passw1"));
            getFollowersResult = routeAndCall(followers);
            followersJson = (JSONObject)toJSON(contentAsString(getFollowersResult));
            follower = followersJson.getJSONArray("data").getJSONObject(0).getJSONObject("user").getString("name");
            assertEquals("test: GET /followers/:secondUser firstUser="+firstUser+" secondUser="+secondUser,follower,firstUser);

            //the second user get the followed by the first one
            FakeRequest followeds = new FakeRequest(GET, "/following/"+firstUser);
            followeds = followeds.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
            followeds = followeds.withHeader(TestConfig.KEY_AUTH, TestConfig.encodeAuth(secondUser, "passw1"));
            Result getFollowedsResult = routeAndCall(followeds);
            JSONObject followedsJson = (JSONObject)toJSON(contentAsString(getFollowedsResult));
            followed = followedsJson.getJSONArray("data").getJSONObject(0).getJSONObject("user").getString("name");
            assertEquals("test: GET /following/:firstUser firstUser="+firstUser+" secondUser="+secondUser,followed,secondUser);
           
            routeDeleteFollowRelationship(firstUser,secondUser);
            getDocumentResult = routeAndCall(fk);
            assertRoute(getDocumentResult, "Get document by unknows", Status.NOT_FOUND, null, false);
          } catch (JSONException e) {
            fail();
          }
         
         
        }
      });
  }
 
  @Test
  public void unexistentUserFollow(){
    running
    (
      getFakeApplication(),
      new Runnable()
      {
        public void run()
        {
         
          routeCreateCollectionForTest();
         
          String firstUser  = routeCreateNewUser(USER3_TEST);
          assertNotNull(firstUser,"First User creation");
         
          routeCreateNewUnexistentFollowRelationship(firstUser, "unexistent");
         
         
        }
      });
  }
 
  @Test
  public void unexistentFollow(){
    running
    (
      getFakeApplication(),
      new Runnable()
      {
        public void run()
        {
         
         
         
          String firstUser  = routeCreateNewUser(USER4_TEST);
          String secondUser  = routeCreateNewUser(USER5_TEST);
          assertNotNull(firstUser,"First User creation");
          assertNotNull(secondUser,"Second User creation");
         
          routeDeleteUnexistentFollowRelationship(firstUser,secondUser);
         
         
        }
      });
  }
}
TOP

Related Classes of FriendshipUserTest

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.