package net.joelinn.quartz;

import net.joelinn.quartz.jobstore.RedisJobStore;
import org.junit.Test;
import org.quartz.JobDetail;
import org.quartz.Trigger;

import java.util.Map;
import java.util.Properties;
import java.util.Set;

import static org.junit.Assert.assertEquals;

/**
 * Joe Linn
 * 7/22/2014
 */
public class RedisJobStoreTest extends BaseTest{

    @Test
    public void redisJobStoreWithScheduler() throws Exception {
        Properties quartzProperties = new Properties();
        quartzProperties.setProperty("org.quartz.scheduler.instanceName", "testScheduler");
        quartzProperties.setProperty("org.quartz.threadPool.threadCount", "3");
        quartzProperties.setProperty("org.quartz.jobStore.class", RedisJobStore.class.getName());
        quartzProperties.setProperty("org.quartz.jobStore.host", host);
        quartzProperties.setProperty("org.quartz.jobStore.port", Integer.toString(port));
        quartzProperties.setProperty("org.quartz.jobStore.lockTimeout", "2000");
        quartzProperties.setProperty("org.quartz.jobStore.database", "1");

        testJobStore(quartzProperties);
    }

    @Test
    public void clearAllSchedulingData() throws Exception {
        // create and store some jobs, triggers, and calendars
        Map<JobDetail, Set<? extends Trigger>> jobsAndTriggers = getJobsAndTriggers(2, 2, 2, 2);
        jobStore.storeJobsAndTriggers(jobsAndTriggers, false);

        // ensure that the jobs, triggers, and calendars were stored
        assertEquals(2, (long) jedis.scard(schema.jobGroupsSet()));
        assertEquals(4, (long) jedis.scard(schema.jobsSet()));
        assertEquals(8, (long) jedis.scard(schema.triggerGroupsSet()));
        assertEquals(16, (long) jedis.scard(schema.triggersSet()));

        jobStore.clearAllSchedulingData();

        assertEquals(0, (long) jedis.scard(schema.jobGroupsSet()));
        assertEquals(0, (long) jedis.scard(schema.jobsSet()));
        assertEquals(0, (long) jedis.scard(schema.triggerGroupsSet()));
        assertEquals(0, (long) jedis.scard(schema.triggersSet()));
    }


}