/**
* =============================================================================
*
* ORCID (R) Open Source
* http://orcid.org
*
* Copyright (c) 2012-2014 ORCID, Inc.
* Licensed under an MIT-Style License (MIT)
* http://orcid.org/open-source-license
*
* This copyright and license information (including a link to the full license)
* shall be included in its entirety in all copies or substantial portion of
* the software.
*
* =============================================================================
*/
package org.orcid.listener.persistence.managers;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.orcid.listener.persistence.dao.RecordStatusDao;
import org.orcid.listener.persistence.entities.RecordStatusEntity;
import org.orcid.listener.persistence.util.AvailableBroker;
import org.orcid.test.OrcidJUnit4ClassRunner;
import org.springframework.test.context.ContextConfiguration;
@RunWith(OrcidJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:orcid-message-listener-test-context.xml" })
public class RecordStatusManagerTest {
@Resource
private RecordStatusManager recordStatusManager;
@Resource
private RecordStatusDao recordStatusDao;
@Test
public void markAsSentTest() {
String orcid = "0000-0000-0000-0001";
assertFalse(recordStatusDao.exists(orcid));
recordStatusManager.markAsSent(orcid, AvailableBroker.DUMP_STATUS_1_2_API);
assertTrue(recordStatusDao.exists(orcid));
RecordStatusEntity entity = recordStatusDao.get(orcid);
assertNotNull(entity);
assertEquals(orcid, entity.getId());
assertEquals(Integer.valueOf(0), entity.getDumpStatus12Api());
}
@Test
public void markAsFailedTest() {
String orcid = "0000-0000-0000-0002";
assertFalse(recordStatusDao.exists(orcid));
recordStatusManager.markAsFailed(orcid, AvailableBroker.DUMP_STATUS_1_2_API);
assertTrue(recordStatusDao.exists(orcid));
RecordStatusEntity entity = recordStatusDao.get(orcid);
assertNotNull(entity);
assertEquals(orcid, entity.getId());
assertEquals(Integer.valueOf(1), entity.getDumpStatus12Api());
recordStatusManager.markAsFailed(orcid, AvailableBroker.DUMP_STATUS_1_2_API);
entity = recordStatusDao.get(orcid);
assertNotNull(entity);
assertEquals(orcid, entity.getId());
assertEquals(Integer.valueOf(2), entity.getDumpStatus12Api());
recordStatusManager.markAsFailed(orcid, AvailableBroker.DUMP_STATUS_1_2_API);
entity = recordStatusDao.get(orcid);
assertNotNull(entity);
assertEquals(orcid, entity.getId());
assertEquals(Integer.valueOf(3), entity.getDumpStatus12Api());
}
@Test
public void setSentThenFailedThenSentAgainTest() {
String orcid = "0000-0000-0000-0003";
//First mark it as sent
assertFalse(recordStatusDao.exists(orcid));
recordStatusManager.markAsSent(orcid, AvailableBroker.DUMP_STATUS_1_2_API);
assertTrue(recordStatusDao.exists(orcid));
RecordStatusEntity entity = recordStatusDao.get(orcid);
assertNotNull(entity);
assertEquals(orcid, entity.getId());
assertEquals(Integer.valueOf(0), entity.getDumpStatus12Api());
//Then make it fail 3 times
recordStatusManager.markAsFailed(orcid, AvailableBroker.DUMP_STATUS_1_2_API);
recordStatusManager.markAsFailed(orcid, AvailableBroker.DUMP_STATUS_1_2_API);
recordStatusManager.markAsFailed(orcid, AvailableBroker.DUMP_STATUS_1_2_API);
//Verify it's status is 3
entity = recordStatusDao.get(orcid);
assertNotNull(entity);
assertEquals(orcid, entity.getId());
assertEquals(Integer.valueOf(3), entity.getDumpStatus12Api());
//Then mark it as sent
recordStatusManager.markAsSent(orcid, AvailableBroker.DUMP_STATUS_1_2_API);
//Verify it's status was cleared
entity = recordStatusDao.get(orcid);
assertNotNull(entity);
assertEquals(orcid, entity.getId());
assertEquals(Integer.valueOf(0), entity.getDumpStatus12Api());
}
}