package net.contextfw.web.commons.cloud.session; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import org.junit.Test; public class GetSetMongoSessionTest extends AbstractSessionTest { public static class A { private String a1; private long a2; public String getA1() { return a1; } public void setA1(String a1) { this.a1 = a1; } public long getA2() { return a2; } public void setA2(long a2) { this.a2 = a2; } } @Test(expected=NoSessionException.class) public void Exception_On_Get_When_No_Open_Session() { CloudSession session = getBasicSession( mockPageContext( mockRequest(null, null), mockResponse(null)), mockSessionHolder(null)); session.get(A.class); } @Test public void Null_On_Get_After_Expiration() { CloudSession session = openValidSession(ResponseExpect.ADD_COOKIE_TWICE); session.set(new A()); assertNotNull(session.get(A.class)); session.expireSession(); assertNull(session.get(A.class)); } @Test(expected=IllegalArgumentException.class) public void Exception_On_Get_Null_Key() { openValidSession().get(null); } @Test(expected=IllegalArgumentException.class) public void Exception_On_Set_Null_Key() { openValidSession().set(null); } @Test(expected=IllegalArgumentException.class) public void Exception_On_Unset_Null_Key() { openValidSession().remove((String) null); } @Test(expected=NoSessionException.class) public void Exception_On_Set_When_No_Open_Session() { CloudSession session = getBasicSession( mockPageContext( mockRequest(null, null), mockResponse(null)), mockSessionHolder(null)); session.set(new A()); } @Test public void Get_Null_When_Not_Set() { CloudSession session = openValidSession(); assertNull(session.get(A.class)); } @Test public void Get_Non_Null_When_Set_1() { CloudSession session = openValidSession(); A a = new A(); a.setA1("a"); a.setA2(1l); session.set(a); A testable = session.get(A.class); assertEquals(a.getA1(), testable.getA1()); assertEquals(a.getA2(), testable.getA2()); } @Test public void Get_Non_Null_When_Set_2() { CloudSession session = openValidSession(); A a = new A(); a.setA1("a"); a.setA2(1l); session.set("foo", a); A testable = session.get("foo", A.class); assertEquals(a.getA1(), testable.getA1()); assertEquals(a.getA2(), testable.getA2()); } @Test public void Get_Null_When_Set_Null() { CloudSession session = openValidSession(); A a = new A(); a.setA1("a"); a.setA2(1l); session.set("foo", a); session.set("foo", null); assertNull(session.get("foo", A.class)); } @Test public void Set_After_Lazy_Session() { CloudSession session = openLazySession(ResponseExpect.ADD_COOKIE); session.set(new A()); } @Test public void Get_Null_When_Unset_1() { CloudSession session = openValidSession(); A a = new A(); a.setA1("a"); a.setA2(1l); session.set(a); session.remove(A.class); assertNull(session.get(A.class)); } @Test public void Get_Null_When_Unset_2() { CloudSession session = openValidSession(); A a = new A(); a.setA1("a"); a.setA2(1l); session.set("foo", a); session.remove("foo"); assertNull(session.get("foo", A.class)); session.closeSession(); session.openSession(OpenMode.LAZY); assertNull(session.get("foo", A.class)); } @Test public void Get_After_ReOpen() { CloudSession session = openValidSession(ResponseExpect.ADD_COOKIE_THRICE); session.set(getA1()); session.closeSession(); session.openSession(OpenMode.LAZY); A a = session.get(A.class); assertNotNull(a); assertEquals("a1", a.getA1()); a.setA1("a11"); session.set(a); session.closeSession(); session.openSession(OpenMode.LAZY); assertEquals("a11", session.get(A.class).getA1()); } private A getA1() { A a1 = new A(); a1.setA1("a1"); a1.setA2(1l); return a1; } @Test public void Set_Get_Multiple() { CloudSession session = openValidSession(); A a1 = new A(); a1.setA1("a1"); a1.setA2(1l); A a2 = new A(); a2.setA1("a2"); a2.setA2(2l); session.set("foo", a1); session.set(a2); A t1 = session.get("foo", A.class); A t2 = session.get(A.class); assertEquals(a1.getA1(), t1.getA1()); assertEquals(a1.getA2(), t1.getA2()); assertEquals(a2.getA1(), t2.getA1()); assertEquals(a2.getA2(), t2.getA2()); } private CloudSession openValidSession() { return openValidSession(ResponseExpect.ADD_COOKIE); } private CloudSession openValidSession(ResponseExpect responseExpect) { mockSession(); CloudSession session = getBasicSession( mockPageContext( mockRequest(null, null), mockResponse(responseExpect, null)), mockSessionHolder(FOOBAR)); session.openSession(OpenMode.EXISTING); return session; } private CloudSession openLazySession(ResponseExpect responseExpect) { CloudSession session = getBasicSession( mockPageContext( mockRequest(RequestExpect.NO_COOKIES), mockResponse(responseExpect, null)), mockSessionHolder(FOOBAR)); session.openSession(OpenMode.LAZY); return session; } }