/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.resource.accesscontrol;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.junit.Test;
import org.olat.core.commons.persistence.DB;
import org.olat.core.id.OLATResourceable;
import org.olat.resource.OLATResource;
import org.olat.resource.OLATResourceImpl;
import org.olat.resource.OLATResourceManager;
import org.olat.resource.accesscontrol.manager.ACOfferDAO;
import org.olat.resource.accesscontrol.model.OfferImpl;
import org.olat.test.OlatTestCase;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Description:<br>
*
* <P>
* Initial Date: 18 avr. 2011 <br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*/
public class ACOfferManagerTest extends OlatTestCase {
@Autowired
private DB dbInstance;
@Autowired
private ACOfferDAO acOfferManager;
@Autowired
private ACService acService;
@Test
public void testManagers() {
assertNotNull(acOfferManager);
assertNotNull(acService);
}
@Test
public void testSaveOffer() {
//create a resource
OLATResourceable testOreable = new TypedResourceable(UUID.randomUUID().toString().replace("-", ""));
OLATResource testOres = OLATResourceManager.getInstance().findOrPersistResourceable(testOreable);
assertNotNull(testOres);
dbInstance.commitAndCloseSession();
//create an offer
Offer offer = acOfferManager.createOffer(testOres, "TestSaveOffer");
assertNotNull(offer);
assertEquals(OfferImpl.class, offer.getClass());
if(offer instanceof OfferImpl) {
OfferImpl offerImpl = (OfferImpl)offer;
offerImpl.setToken("token1");
}
offer.setValidFrom(new Date());
offer.setValidTo(new Date());
//and save the offer
acOfferManager.saveOffer(offer);
dbInstance.commitAndCloseSession();
//check if the offer is saved
List<Offer> offers = acOfferManager.findOfferByResource(testOres, true, null);
assertNotNull(offers);
assertEquals(1, offers.size());
Offer savedOffer = offers.get(0);
assertNotNull(savedOffer);
assertEquals(OfferImpl.class, savedOffer.getClass());
if(savedOffer instanceof OfferImpl) {
OfferImpl offerImpl = (OfferImpl)savedOffer;
assertEquals("token1", offerImpl.getToken());
}
assertNotNull(offer.getValidFrom());
assertNotNull(offer.getValidTo());
assertEquals(testOres.getResourceableId(), savedOffer.getResourceId());
assertEquals(testOres.getResourceableTypeName(), savedOffer.getResourceTypeName());
assertEquals("TestSaveOffer", savedOffer.getResourceDisplayName());
}
@Test
public void testDeleteOffer() {
OLATResourceable testOreable = new TypedResourceable(UUID.randomUUID().toString().replace("-", ""));
OLATResource testOres = OLATResourceManager.getInstance().findOrPersistResourceable(testOreable);
assertNotNull(testOres);
dbInstance.commitAndCloseSession();
//create an offer
Offer offer = acOfferManager.createOffer(testOres, "TestDeleteOffer");
assertNotNull(offer);
assertEquals(OfferImpl.class, offer.getClass());
//and save the offer
acOfferManager.saveOffer(offer);
dbInstance.commitAndCloseSession();
//retrieve the offer
List<Offer> offers = acOfferManager.findOfferByResource(testOres, true, null);
assertNotNull(offers);
assertEquals(1, offers.size());
assertEquals(offer, offers.get(0));
dbInstance.commitAndCloseSession();
//delete the offer
acOfferManager.deleteOffer(offer);
dbInstance.commitAndCloseSession();
//try to retrieve the offer
List<Offer> noOffers = acOfferManager.findOfferByResource(testOres, true, null);
assertNotNull(noOffers);
assertEquals(0, noOffers.size());
dbInstance.commitAndCloseSession();
//retrieve all offers, deleted too
List<Offer> delOffers = acOfferManager.findOfferByResource(testOres, false, null);
assertNotNull(delOffers);
assertEquals(1, delOffers.size());
assertEquals(offer, delOffers.get(0));
assertEquals(false, delOffers.get(0).isValid());
dbInstance.commitAndCloseSession();
}
@Test
public void testDeleteResource() {
//create a random resource
OLATResourceable testOreable = new TypedResourceable(UUID.randomUUID().toString().replace("-", ""));
OLATResource testOres = OLATResourceManager.getInstance().findOrPersistResourceable(testOreable);
assertNotNull(testOres);
dbInstance.commitAndCloseSession();
//create an offer
Offer offer = acOfferManager.createOffer(testOres, "TestDeleteResource");
assertNotNull(offer);
assertEquals(OfferImpl.class, offer.getClass());
//and save the offer
acOfferManager.saveOffer(offer);
dbInstance.commitAndCloseSession();
//delete the resource
testOres = dbInstance.loadObject(OLATResourceImpl.class, testOres.getKey());
dbInstance.deleteObject(testOres);
dbInstance.commitAndCloseSession();
//load offer by resource -> nothing found
List<Offer> retrievedOffers = acOfferManager.findOfferByResource(testOres, true, null);
assertNotNull(retrievedOffers);
assertEquals(0, retrievedOffers.size());
//load offer by key -> found and loaded without error
Offer retrievedOffer = acOfferManager.loadOfferByKey(offer.getKey());
assertNotNull(retrievedOffer);
assertNull(retrievedOffer.getResource());
assertEquals(offer, retrievedOffer);
}
@Test
public void testFilter() {
//create resources
OLATResourceable testOreable1 = new TypedResourceable(UUID.randomUUID().toString().replace("-", ""));
OLATResource testOres1 = OLATResourceManager.getInstance().findOrPersistResourceable(testOreable1);
assertNotNull(testOres1);
OLATResourceable testOreable2 = new TypedResourceable(UUID.randomUUID().toString().replace("-", ""));
OLATResource testOres2 = OLATResourceManager.getInstance().findOrPersistResourceable(testOreable2);
assertNotNull(testOres2);
OLATResourceable testOreable3 = new TypedResourceable(UUID.randomUUID().toString().replace("-", ""));
OLATResource testOres3 = OLATResourceManager.getInstance().findOrPersistResourceable(testOreable3);
assertNotNull(testOres3);
dbInstance.commitAndCloseSession();
//create offers
Offer offer1 = acOfferManager.createOffer(testOres1, "TestFilter 1");
Offer offer2 = acOfferManager.createOffer(testOres2, "TestFilter 2");
acOfferManager.saveOffer(offer1);
acOfferManager.saveOffer(offer2);
dbInstance.commitAndCloseSession();
//filter by resources
List<Long> resourceKeys = new ArrayList<Long>();
resourceKeys.add(testOres1.getKey());
resourceKeys.add(testOres2.getKey());
resourceKeys.add(testOres3.getKey());
Set<Long> filteredKeys = acOfferManager.filterResourceWithOffer(resourceKeys);
assertNotNull(filteredKeys);
assertEquals(2, filteredKeys.size());
assertTrue(filteredKeys.contains(testOres1.getKey()));
assertTrue(filteredKeys.contains(testOres2.getKey()));
assertFalse(filteredKeys.contains(testOres3.getKey()));
}
@Test
public void testFilterWithDelete() {
//create resources
OLATResourceable testOreable1 = new TypedResourceable(UUID.randomUUID().toString().replace("-", ""));
OLATResource testOres1 = OLATResourceManager.getInstance().findOrPersistResourceable(testOreable1);
assertNotNull(testOres1);
OLATResourceable testOreable2 = new TypedResourceable(UUID.randomUUID().toString().replace("-", ""));
OLATResource testOres2 = OLATResourceManager.getInstance().findOrPersistResourceable(testOreable2);
assertNotNull(testOres2);
OLATResourceable testOreable3 = new TypedResourceable(UUID.randomUUID().toString().replace("-", ""));
OLATResource testOres3 = OLATResourceManager.getInstance().findOrPersistResourceable(testOreable3);
assertNotNull(testOres3);
dbInstance.commitAndCloseSession();
//create offers
Offer offer1 = acOfferManager.createOffer(testOres1, "TestFilterWithDelete 1");
Offer offer2 = acOfferManager.createOffer(testOres2, "TestFilterWithDelete 2");
acOfferManager.saveOffer(offer1);
acOfferManager.saveOffer(offer2);
dbInstance.commitAndCloseSession();
//delete resource of offer 2
testOres2 = dbInstance.loadObject(OLATResourceImpl.class, testOres2.getKey());
dbInstance.deleteObject(testOres2);
//filter by resources
List<Long> resourceKeys = new ArrayList<Long>();
resourceKeys.add(testOres1.getKey());
resourceKeys.add(testOres2.getKey());
resourceKeys.add(testOres3.getKey());
Set<Long> filteredKeys = acOfferManager.filterResourceWithOffer(resourceKeys);
assertNotNull(filteredKeys);
assertEquals(1, filteredKeys.size());
assertTrue(filteredKeys.contains(testOres1.getKey()));
assertFalse(filteredKeys.contains(testOres2.getKey()));
assertFalse(filteredKeys.contains(testOres3.getKey()));
}
}