/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.sa.descriptor;
import java.io.ByteArrayInputStream;
import java.util.Locale;
import org.junit.Assert;
import org.junit.Test;
public class ServiceDescriptorBuilderTest {
private String getBundleName(String name) {
return getClass().getPackage().getName() + ".resources." + name;
}
private ServiceDescriptor readDescriptor(String content, String... bundles) {
return readDescriptor(content, Locale.getDefault(), bundles);
}
private ServiceDescriptor readDescriptor(String content, Locale locale, String... bundles) {
try {
ServiceDefinitionReader reader = new ServiceDefinitionReader();
ServiceDefinition service = reader.readService(new ByteArrayInputStream(content.getBytes()));
ServiceDescriptorBuilder builder = new ServiceDescriptorBuilder(bundles);
return builder.build(service);
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Test
public void testDescriptorDescription() {
String json = "{ descriptionKey: 'testDescriptorDescriptionKey.description' }";
ServiceDescriptor descriptor = readDescriptor(json, getBundleName("PrimaryMessages"));
Assert.assertEquals("Hello World", descriptor.getDescription());
}
@Test
public void testDescriptorDefaultDescriptionKey() {
String json = "{ serviceId: 'DefaultDescriptionKey' }";
ServiceDescriptor descriptor = readDescriptor(json, getBundleName("PrimaryMessages"));
Assert.assertEquals("Default Description", descriptor.getDescription());
}
@Test
public void testMultipleResourceBundles() {
String json = "{ serviceId: 'MultiBundles', items: { one: {} } }";
ServiceDescriptor descriptor = readDescriptor(json, getBundleName("PrimaryMessages"),
getBundleName("SecondaryMessages"));
ServiceField one = descriptor.getField("one");
Assert.assertNotNull(one);
Assert.assertEquals("MultiBundles One Label", one.getLabel());
Assert.assertEquals("MultiBundles One Description", one.getDescription());
}
@Test
public void testValidationError() {
String json = "{ serviceId: 'FailureMessageKey', items: { field: { validation: { errorKey: 'failureMessageKey' } } } }";
ServiceDescriptor descriptor = readDescriptor(json, getBundleName("PrimaryMessages"));
ServiceField field = descriptor.getField("field");
Assert.assertNotNull(field);
Assert.assertEquals("Failure Message", field.getValidation().getError());
}
@Test
public void testDefaultValidationError() {
String json = "{ serviceId: 'DefaultFailureMessageKey', items: { field: { validation: { } } } }";
ServiceDescriptor descriptor = readDescriptor(json, getBundleName("PrimaryMessages"));
ServiceField field = descriptor.getField("field");
Assert.assertNotNull(field);
Assert.assertEquals("Failure Message", field.getValidation().getError());
}
@Test
public void testBaseKey() {
String json = "{ baseKey: 'BaseKey', serviceId: 'ServiceID' }";
ServiceDescriptor descriptor = readDescriptor(json, getBundleName("PrimaryMessages"));
Assert.assertEquals("Base Key", descriptor.getDescription());
}
@Test
public void testOptions() {
String json = "{ items: { field: { options: {'a':'A', 'b':'B'} } } }";
ServiceDescriptor descriptor = readDescriptor(json, getBundleName("PrimaryMessages"));
ServiceField field = descriptor.getField("field");
Assert.assertNotNull(field);
Assert.assertNotNull(field.getOptions());
Assert.assertEquals(2, field.getOptions().size());
Assert.assertEquals("A", field.getOptions().get("a"));
Assert.assertEquals("B", field.getOptions().get("b"));
}
@Test
public void testNoTitle() {
String json = "{ baseKey: 'BaseKey', serviceId: 'ServiceID' }";
ServiceDescriptor descriptor = readDescriptor(json, getBundleName("PrimaryMessages"));
Assert.assertEquals("ServiceID", descriptor.getTitle());
}
@Test
public void testNoFieldLabel() {
String json = "{ items: { field: { options: {'a':'A', 'b':'B'} } } }";
ServiceDescriptor descriptor = readDescriptor(json, getBundleName("SecondaryMessages"));
ServiceField field = descriptor.getField("field");
Assert.assertNotNull(field);
Assert.assertEquals("field", field.getLabel());
}
}