package com.temenos.interaction.rimdsl.generator.launcher;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import com.google.inject.Injector;
import com.temenos.interaction.core.entity.EntityMetadata;
import com.temenos.interaction.core.entity.Metadata;
import com.temenos.interaction.core.entity.vocabulary.Vocabulary;
import com.temenos.interaction.core.entity.vocabulary.terms.TermComplexGroup;
import com.temenos.interaction.core.entity.vocabulary.terms.TermComplexType;
import com.temenos.interaction.core.entity.vocabulary.terms.TermDescription;
import com.temenos.interaction.core.entity.vocabulary.terms.TermListType;
import com.temenos.interaction.core.entity.vocabulary.terms.TermValueType;
import com.temenos.interaction.rimdsl.RIMDslStandaloneSetup;
import com.temenos.interaction.rimdsl.RIMDslStandaloneSetupSpringPRD;
import com.temenos.interaction.rimdsl.RIMDslStandaloneSetupSwagger;
public class GeneratorTest {
private File validGenJavaDir = new File("target/valid-gen-java");
private File invalidGenJavaDir = new File("target/invalid-gen-java");
@Before
public void setUp() throws Exception {
createNewDir(validGenJavaDir);
createNewDir(invalidGenJavaDir);
}
private void createNewDir(File dir) {
if(dir.exists()) {
dir.delete();
}
dir.mkdirs();
}
@Test
public void testStandaloneWithoutListenerValidRim() {
Injector injector = new RIMDslStandaloneSetup().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
boolean result = generator.runGenerator("src/test/resources/valid.rim", validGenJavaDir.getPath());
assertTrue(result);
}
@Test
public void testStandaloneSpringPRDWithoutListenerValidRim() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
boolean result = generator.runGenerator("src/test/resources/valid.rim", validGenJavaDir.getPath());
assertTrue(result);
}
@Test
public void testStandaloneListenerWithValidRim() {
Injector injector = new RIMDslStandaloneSetup().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGenerator("src/test/resources/valid.rim", validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSpringPRDListenerWithRestbucksRim() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGenerator("src/test/resources/Restbucks.rim", validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneListenerWithInvalidRim() {
Injector injector = new RIMDslStandaloneSetup().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGenerator("src/test/resources/invalid.rim", invalidGenJavaDir.getPath());
verify(listener, times(1)).notify(anyString());
}
@Test
public void testStandaloneSpringPRDListenerWithInvalidRim() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGenerator("src/test/resources/invalid.rim", invalidGenJavaDir.getPath());
verify(listener, times(1)).notify(anyString());
}
@Test
public void testStandaloneSpringPRDListenerWithValidRim() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGenerator("src/test/resources/valid.rim", validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSpringPRDListenerWithNotesRim() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGenerator("src/test/resources/Notes.rim", validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSpringPRDListenerWithSimpleRim() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGenerator("src/test/resources/Simple.rim", validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSpringPRDListenerWithRestbucksim() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGenerator("src/test/resources/Restbucks.rim", validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSpringPRDListenerWithSimpleRimAndMetadata() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
Metadata metadata = new Metadata("metadata");
metadata.setEntityMetadata(new EntityMetadata("Note"));
generator.runGenerator("src/test/resources/Simple.rim", metadata, validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSetupSpringPRDListenerWithRimDirAndMetadata() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
Metadata metadata = new Metadata("metadata");
metadata.setEntityMetadata(new EntityMetadata("Note"));
generator.runGeneratorDir("src/test/resources/Simple.rim", metadata, validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSetupSpringPRDListenerWithRimDirAndNoMetadata() {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGeneratorDir("src/test/resources/Simple.rim", validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSetupSwaggerListenerWithSimpleRimAndMetadata() {
Injector injector = new RIMDslStandaloneSetupSwagger().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
Metadata metadata = new Metadata("metadata");
EntityMetadata em = new EntityMetadata("Note");
Vocabulary vocId = new Vocabulary();
vocId.setTerm(new TermValueType(TermValueType.TEXT));
em.setPropertyVocabulary("name", vocId);
Vocabulary vocNotes = new Vocabulary();
vocNotes.setTerm(new TermListType(true));
vocNotes.setTerm(new TermComplexType(true));
em.setPropertyVocabulary("notes", vocNotes);
Vocabulary vocNoteText = new Vocabulary();
vocNoteText.setTerm(new TermValueType(TermValueType.TEXT));
vocNoteText.setTerm(new TermComplexGroup("notes"));
em.setPropertyVocabulary("Text", vocNoteText, Collections.enumeration(Collections.singletonList("notes")));
Vocabulary vocNoteNumbers = new Vocabulary();
vocNoteNumbers.setTerm(new TermListType(true));
vocNotes.setTerm(new TermComplexType(true));
em.setPropertyVocabulary("Numbers", vocNoteNumbers, Collections.enumeration(Collections.singletonList("notes")));
Vocabulary vocNoteNumber = new Vocabulary();
vocNoteNumber.setTerm(new TermValueType(TermValueType.TEXT));
vocNoteNumber.setTerm(new TermComplexGroup("Numbers"));
em.setPropertyVocabulary("Number", vocNoteNumber, Collections.enumeration(Collections.singletonList("Numbers")));
metadata.setEntityMetadata(em);
generator.runGenerator("src/test/resources/Simple.rim", metadata, validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSetupSwaggerListenerWithDirAndMetadata() {
Injector injector = new RIMDslStandaloneSetupSwagger().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
Metadata metadata = new Metadata("metadata");
metadata.setEntityMetadata(new EntityMetadata("Note"));
generator.runGeneratorDir("src/test/resources/Simple.rim", metadata, validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSetupSwaggerListenerWithDirAndNoMetadata() {
Injector injector = new RIMDslStandaloneSetupSwagger().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGeneratorDir("src/test/resources/Simple.rim", validGenJavaDir.getPath());
verify(listener, times(0)).notify(anyString());
}
@Test
public void testStandaloneSetupSwaggerListenerWithInvalidRimOnDirAndNoMetadata() {
Injector injector = new RIMDslStandaloneSetupSwagger().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
generator.setValidatorEventListener(listener);
generator.runGeneratorDir("src/test/resources/invalid.rim", validGenJavaDir.getPath());
verify(listener, times(1)).notify(anyString());
}
@Test
public void testStandaloneSetupSwaggerListenerWithInvalidRimOnDirAndMetadata() {
Injector injector = new RIMDslStandaloneSetupSwagger().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
ValidatorEventListener listener = mock(ValidatorEventListener.class);
Metadata metadata = new Metadata("metadata");
metadata.setEntityMetadata(new EntityMetadata("ENTITY"));
generator.setValidatorEventListener(listener);
generator.runGeneratorDir("src/test/resources/invalid.rim", metadata, validGenJavaDir.getPath());
verify(listener, times(1)).notify(anyString());
}
@Test
public void testComplexTypeHandler() throws Exception {
Injector injector = new RIMDslStandaloneSetupSpringPRD().createInjectorAndDoEMFRegistration();
Generator generator = injector.getInstance(Generator.class);
//Read the metadata file
EntityMetadata em = new EntityMetadata("Riders");
Vocabulary vocId = new Vocabulary();
vocId.setTerm(new TermValueType(TermValueType.TEXT));
em.setPropertyVocabulary("name", vocId);
Vocabulary vocBody = new Vocabulary();
vocBody.setTerm(new TermValueType(TermValueType.INTEGER_NUMBER));
em.setPropertyVocabulary("age", vocBody);
Vocabulary vocRides = new Vocabulary();
vocRides.setTerm(new TermListType(true));
vocRides.setTerm(new TermComplexType(true));
em.setPropertyVocabulary("rides", vocRides);
Vocabulary vocHorseName = new Vocabulary();
vocHorseName.setTerm(new TermValueType(TermValueType.TEXT));
vocHorseName.setTerm(new TermComplexGroup("rides"));
vocHorseName.setTerm(new TermDescription("Horse Name"));
em.setPropertyVocabulary("HorseName", vocHorseName, Collections.enumeration(Collections.singletonList("rides")));
Vocabulary vocHorseSize = new Vocabulary();
vocHorseSize.setTerm(new TermValueType(TermValueType.TEXT));
vocHorseSize.setTerm(new TermComplexGroup("rides"));
vocHorseSize.setTerm(new TermDescription("Horse Size"));
em.setPropertyVocabulary("HorseSize", vocHorseSize, Collections.enumeration(Collections.singletonList("rides")));
Map<String, Object> getRides = generator.complexTypeHandler("rides", em);
assertNotNull(getRides);
assertEquals(2,getRides.size());
assertTrue(getRides.containsKey("HorseName"));
assertTrue(getRides.containsKey("HorseSize"));
assertNotNull(getRides.get("HorseName"));
assertNotNull(getRides.get("HorseSize"));
assertEquals("string",((ArrayList<?>) getRides.get("HorseName")).get(0));
assertEquals("string",((ArrayList<?>) getRides.get("HorseSize")).get(0));
assertEquals("Horse Name",((ArrayList<?>) getRides.get("HorseName")).get(1));
assertEquals("Horse Size",((ArrayList<?>) getRides.get("HorseSize")).get(1));
Map<String, Object> getAge = generator.complexTypeHandler("age", em);
assertNotNull(getAge);
assertEquals(0,getAge.size());
Map<String, Object> getName = generator.complexTypeHandler("name", em);
assertNotNull(getName);
assertEquals(0,getName.size());
}
}