package com.vistatec.ocelot.services;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Before;
import org.junit.Test;
import com.vistatec.ocelot.config.UserProvenance;
import com.vistatec.ocelot.events.ItsDocStatsAddedProvEvent;
import com.vistatec.ocelot.events.ItsDocStatsChangedEvent;
import com.vistatec.ocelot.events.ItsDocStatsUpdateLqiEvent;
import com.vistatec.ocelot.events.api.OcelotEventQueue;
import com.vistatec.ocelot.its.model.LanguageQualityIssue;
import com.vistatec.ocelot.its.model.Provenance;
import com.vistatec.ocelot.its.stats.model.ITSDocStats;
import com.vistatec.ocelot.its.stats.model.ITSStats;
import com.vistatec.ocelot.its.stats.model.LanguageQualityIssueStats;
import com.vistatec.ocelot.its.stats.model.ProvenanceStats;
import com.vistatec.ocelot.rules.RulesTestHelpers;
public class TestItsDocStatsService {
private final Mockery mockery = new Mockery();
private ITSDocStatsService docStatsService;
private ITSDocStats docStats;
private final OcelotEventQueue mockEventQueue = mockery.mock(OcelotEventQueue.class);
@Before
public void before() {
this.docStats = new ITSDocStats();
this.docStatsService = new ITSDocStatsService(docStats, mockEventQueue);
}
@Test
public void testAddLQI() {
mockery.checking(new Expectations() {{
oneOf(mockEventQueue).post(with(any(ItsDocStatsChangedEvent.class)));
}});
LanguageQualityIssue lqi = RulesTestHelpers.lqi("omission", 85);
docStatsService.updateLQIStats(new ItsDocStatsUpdateLqiEvent(lqi));
assertEquals(Collections.singletonList(new LanguageQualityIssueStats(lqi)),
docStats.getStats());
}
@Test
public void testAddProvenance() {
mockery.checking(new Expectations() {{
oneOf(mockEventQueue).post(with(any(ItsDocStatsChangedEvent.class)));
}});
Provenance prov = new UserProvenance("a", "b", "c");
docStatsService.addProvenanceStats(new ItsDocStatsAddedProvEvent(prov));
List<ITSStats> expectedStats = new ArrayList<>();
expectedStats.add(new ProvenanceStats(ProvenanceStats.Type.revPerson, "a"));
expectedStats.add(new ProvenanceStats(ProvenanceStats.Type.revOrg, "b"));
assertEquals(expectedStats, docStats.getStats());
}
}