package org.societies.useragent.feedback;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.societies.api.internal.schema.useragent.feedback.NegotiationDetailsBean;
import org.societies.api.internal.schema.useragent.feedback.UserFeedbackPrivacyNegotiationEvent;
import org.societies.api.internal.useragent.model.ExpProposalType;
import org.societies.api.schema.identity.RequestorBean;
import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.*;
import org.societies.api.schema.useragent.feedback.FeedbackMethodType;
import org.societies.api.schema.useragent.feedback.FeedbackStage;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
public class PrivacyPolicyNegotiationHistoryRepositoryTest {
private PrivacyPolicyNegotiationHistoryRepository privacyPolicyNegotiationRepository;
@Before
public void setupTest() {
privacyPolicyNegotiationRepository = new PrivacyPolicyNegotiationHistoryRepository();
privacyPolicyNegotiationRepository.setSessionFactory(HibernateUtil.getSessionFactory());
privacyPolicyNegotiationRepository.truncate();
}
@After
public void tearDownTest() {
// privacyPolicyNegotiationRepository.truncate();
}
@Test
@Ignore("Ignore until we fix issue with hibernate mappings")
public void ignore_create_get_create_list_delete_get_list() throws Exception {
// public void create_get_create_list_delete_get_list() throws Exception {
RequestorBean requestorBean1 = new RequestorBean();
requestorBean1.setRequestorId("req1");
SecureRandom random = new SecureRandom();
String guid1 = new BigInteger(130, random).toString(32);
ResponsePolicy responsePolicy1 = buildResponsePolicy(guid1, requestorBean1);
NegotiationDetailsBean negotiationDetails1 = new NegotiationDetailsBean();
negotiationDetails1.setRequestor(requestorBean1);
negotiationDetails1.setNegotiationID(new BigInteger(130, random).intValue());
UserFeedbackPrivacyNegotiationEvent event1 = new UserFeedbackPrivacyNegotiationEvent();
event1.setNegotiationDetails(negotiationDetails1);
event1.setRequestId(guid1);
event1.setResponsePolicy(responsePolicy1);
event1.setMethod(FeedbackMethodType.GET_EXPLICIT_FB);
event1.setStage(FeedbackStage.PENDING_USER_RESPONSE);
event1.setType(ExpProposalType.PRIVACY_NEGOTIATION);
RequestorBean requestorBean2 = new RequestorBean();
requestorBean2.setRequestorId("req2");
String guid2 = new BigInteger(230, random).toString(32);
ResponsePolicy responsePolicy2 = buildResponsePolicy(guid2, requestorBean2);
NegotiationDetailsBean negotiationDetails2 = new NegotiationDetailsBean();
negotiationDetails2.setRequestor(requestorBean2);
negotiationDetails2.setNegotiationID(new BigInteger(130, random).intValue());
UserFeedbackPrivacyNegotiationEvent event2 = new UserFeedbackPrivacyNegotiationEvent();
event2.setNegotiationDetails(negotiationDetails2);
event2.setRequestId(guid2);
event2.setResponsePolicy(responsePolicy2);
event2.setMethod(FeedbackMethodType.GET_EXPLICIT_FB);
event2.setStage(FeedbackStage.PENDING_USER_RESPONSE);
event2.setType(ExpProposalType.PRIVACY_NEGOTIATION);
// create
privacyPolicyNegotiationRepository.insert(event1);
Assert.assertEquals(guid1, event1.getRequestId());
// get
final UserFeedbackPrivacyNegotiationEvent returnedEvent1 = privacyPolicyNegotiationRepository.getByRequestId(guid1);
Assert.assertNotNull(returnedEvent1);
compareItems(event1, returnedEvent1);
// create
privacyPolicyNegotiationRepository.insert(event2);
Assert.assertEquals(guid2, event2.getRequestId());
// get
final UserFeedbackPrivacyNegotiationEvent returnedEvent2 = privacyPolicyNegotiationRepository.getByRequestId(guid2);
Assert.assertNotNull(returnedEvent2);
compareItems(event2, returnedEvent2);
// list
final List<UserFeedbackPrivacyNegotiationEvent> list1 = privacyPolicyNegotiationRepository.listIncomplete();
Assert.assertNotNull(list1);
Assert.assertEquals(2, list1.size());
}
private static void compareItems(UserFeedbackPrivacyNegotiationEvent expectedEvent, UserFeedbackPrivacyNegotiationEvent actualEvent) {
Assert.assertEquals(expectedEvent.getMethod(), actualEvent.getMethod());
Assert.assertEquals(expectedEvent.getType(), actualEvent.getType());
Assert.assertEquals(expectedEvent.getRequestId(), actualEvent.getRequestId());
ResponsePolicy expectedPolicy = expectedEvent.getResponsePolicy();
ResponsePolicy actualPolicy = actualEvent.getResponsePolicy();
Assert.assertNotNull(expectedPolicy);
Assert.assertNotNull(actualPolicy);
Assert.assertEquals(expectedPolicy.getNegotiationStatus(), actualPolicy.getNegotiationStatus());
Assert.assertEquals(expectedPolicy.getResponsePolicyId(), actualPolicy.getResponsePolicyId());
Assert.assertEquals(expectedPolicy.getResponseItems().size(), actualPolicy.getResponseItems().size());
NegotiationDetailsBean expectedNegotiation = expectedEvent.getNegotiationDetails();
NegotiationDetailsBean actualNegotiation = actualEvent.getNegotiationDetails();
Assert.assertNotNull(expectedNegotiation);
Assert.assertNotNull(actualNegotiation);
Assert.assertEquals(expectedNegotiation.getNegotiationID(), actualNegotiation.getNegotiationID());
}
private static ResponsePolicy buildResponsePolicy(String guid, RequestorBean requestorBean) {
List<ResponseItem> responseItems = new ArrayList<ResponseItem>();
responseItems.add(buildResponseItem("http://this.is.a.win/", "Location"));
responseItems.add(buildResponseItem("http://paddy.rules/", "Status"));
responseItems.add(buildResponseItem("http://something.something.something/", "Hair colour"));
ResponsePolicy responsePolicy = new ResponsePolicy();
responsePolicy.setRequestor(requestorBean);
responsePolicy.setNegotiationStatus(NegotiationStatus.ONGOING);
responsePolicy.setResponseItems(responseItems);
responsePolicy.setResponsePolicyId(guid);
return responsePolicy;
}
private static ResponseItem buildResponseItem(String uri, String dataType) {
Action action1 = new Action();
action1.setActionConstant(ActionConstants.CREATE);
action1.setOptional(true);
Action action2 = new Action();
action2.setActionConstant(ActionConstants.DELETE);
action2.setOptional(false);
Action action3 = new Action();
action3.setActionConstant(ActionConstants.READ);
action3.setOptional(false);
Action action4 = new Action();
action4.setActionConstant(ActionConstants.WRITE);
action4.setOptional(true);
Condition condition1 = new Condition();
condition1.setConditionConstant(ConditionConstants.DATA_RETENTION_IN_HOURS);
condition1.setValue("1");
condition1.setOptional(false);
Condition condition2 = new Condition();
condition2.setConditionConstant(ConditionConstants.RIGHT_TO_ACCESS_HELD_DATA);
condition2.setValue("2");
condition2.setOptional(true);
Condition condition3 = new Condition();
condition3.setConditionConstant(ConditionConstants.RIGHT_TO_OPTOUT);
condition3.setValue("3");
condition3.setOptional(false);
Condition condition4 = new Condition();
condition4.setConditionConstant(ConditionConstants.STORE_IN_SECURE_STORAGE);
condition4.setValue("4");
condition4.setOptional(true);
Resource resource = new Resource();
resource.setDataIdUri(uri);
resource.setDataType(dataType);
RequestItem requestItem = new RequestItem();
requestItem.getActions().add(action1);
requestItem.getActions().add(action2);
requestItem.getActions().add(action3);
requestItem.getActions().add(action4);
requestItem.getConditions().add(condition1);
requestItem.getConditions().add(condition2);
requestItem.getConditions().add(condition3);
requestItem.getConditions().add(condition4);
requestItem.setOptional(false);
requestItem.setResource(resource);
ResponseItem responseItem = new ResponseItem();
responseItem.setDecision(Decision.INDETERMINATE);
responseItem.setRequestItem(requestItem);
return responseItem;
}
}