/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.guvnor.server.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.drools.guvnor.server.util.TestEnvironmentSessionHelper;
import org.drools.repository.AssetItem;
import org.drools.repository.RulesRepository;
import org.drools.repository.UserInfo.InboxEntry;
import org.junit.Test;
/**
* @author Michael Neale
*/
public class UserInboxTest {
@Test
public void testInboxen() throws Exception {
RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
UserInbox inb = new UserInbox(repo);
inb.clearAll();
inb.addToRecentEdited("ABC", "This is a note");
Thread.sleep(100);
inb.addToRecentEdited("QED", "Here we go...");
repo.save();
List<InboxEntry> entries = inb.loadRecentEdited();
assertEquals(2, entries.size());
InboxEntry e1 = entries.get(0);
assertEquals("ABC", e1.assetUUID);
assertEquals("This is a note", e1.note);
InboxEntry e2 = entries.get(1);
assertEquals("QED", e2.assetUUID);
assertTrue(e2.timestamp > e1.timestamp);
inb.clearAll();
for (int i = 0; i < UserInbox.MAX_RECENT_EDITED; i++) {
inb.addToRecentEdited("X" + i, "NOTE" + i);
}
assertEquals("X0", inb.loadRecentEdited().get(0).assetUUID);
inb.addToRecentEdited("Y1", "NOTE");
List<InboxEntry> res = inb.loadRecentEdited();
assertEquals("X1", inb.loadRecentEdited().get(0).assetUUID);
assertEquals("Y1", res.get(res.size() - 1 ).assetUUID);
assertTrue(res.get(res.size() - 2 ).assetUUID.startsWith("X"));
inb.addToRecentEdited("Y2", "NOTE");
res = inb.loadRecentEdited();
assertEquals("X2", inb.loadRecentEdited().get(0).assetUUID);
assertEquals("Y2", res.get(res.size() - 1 ).assetUUID);
assertEquals("Y1", res.get(res.size() - 2 ).assetUUID);
}
@Test
public void testRead() throws Exception {
RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
UserInbox inb = new UserInbox(repo);
inb.clearAll();
inb.addToRecentOpened("QED", "hey");
inb.addToRecentEdited("ABC", "This is a note");
List<InboxEntry> es =inb.loadRecentOpened();
assertEquals(1, es.size());
assertEquals("QED", es.get(0).assetUUID);
}
@Test
public void testDupes() throws Exception {
RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
UserInbox inb = new UserInbox(repo);
inb.clearAll();
for (int i =0; i < 120; i++) {
inb.addToRecentOpened("A" + i, "NOTE");
}
List<InboxEntry> res = inb.loadRecentOpened();
assertEquals(120, res.size());
inb.addToRecentOpened("XX", "hey");
assertEquals(res.size() + 1, inb.loadRecentOpened().size());
InboxEntry firstOld = inb.loadRecentOpened().get(0);
assertEquals("A0", firstOld.assetUUID);
Thread.sleep(30);
//shouldn't add another one...
inb.addToRecentOpened("A0", "hey22");
List<InboxEntry> finalList = inb.loadRecentOpened();
assertEquals(res.size() + 1, finalList.size());
assertEquals("A1", finalList.get(0).assetUUID);
InboxEntry lastEntry = finalList.get(finalList.size() - 1);
assertEquals("A0", lastEntry.assetUUID);
assertTrue(lastEntry.timestamp > firstOld.timestamp);
}
@Test
public void testHelper() throws Exception {
RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
UserInbox ib = new UserInbox(repo);
ib.clearAll();
AssetItem asset = repo.loadDefaultPackage().addAsset("InBoxTestHelper", "hey");
UserInbox.recordOpeningEvent(asset);
List<InboxEntry> es = ib.loadRecentOpened();
assertEquals(1, es.size());
assertEquals(asset.getUUID(), es.get(0).assetUUID);
assertEquals("InBoxTestHelper", es.get(0).note);
UserInbox.recordUserEditEvent(asset);
es = ib.loadRecentEdited();
assertEquals(1, es.size());
assertEquals(asset.getUUID(), es.get(0).assetUUID);
}
@Test
public void testIncoming() throws Exception {
RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
AssetItem asset = repo.loadDefaultPackage().addAsset("testIncomingMarkedRead", "");
UserInbox ib = new UserInbox(repo);
ib.clearAll();
ib.addToIncoming(asset.getUUID(), "hey", "mic");
ib.addToIncoming("YYY", "hey2", "mic");
List<InboxEntry> es = ib.loadIncoming();
assertEquals(2, es.size());
assertEquals(asset.getUUID(), es.get(0).assetUUID);
assertEquals("YYY", es.get(1).assetUUID);
UserInbox.recordOpeningEvent(asset);
es = ib.loadIncoming();
assertEquals(1, es.size());
assertEquals("YYY", es.get(0).assetUUID);
}
}