package com.temenos.interaction.media.hal.metadata;
/*
* #%L
* interaction-media-hal
* %%
* Copyright (C) 2012 - 2013 Temenos Holdings N.V.
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.ByteArrayOutputStream;
import javax.ws.rs.core.GenericEntity;
import org.junit.Assert;
import org.junit.Test;
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.TermIdField;
import com.temenos.interaction.core.entity.vocabulary.terms.TermValueType;
import com.temenos.interaction.core.resource.MetaDataResource;
public class TestMetadataProvider {
@SuppressWarnings("unchecked")
@Test
public void testWriteMetadataResource() throws Exception {
MetaDataResource<Metadata> mr = mock(MetaDataResource.class);
Metadata mockMetadata = createMockFlightMetadata();
//Mock MetadataResource
when(mr.getMetadata()).thenReturn(mockMetadata);
//Serialize metadata resource
MetaDataProvider p = new MetaDataProvider();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
p.writeTo(mr, MetaDataResource.class, Metadata.class, null, com.temenos.interaction.media.hal.MediaType.APPLICATION_HAL_JSON_TYPE, null, bos);
String expected = "{ \"_links\" : { \"self\" : { \"href\" : \"http://localhost:8080/example/api/$metadata\" } }, \"modelName\" : \"Customers\", \"entities\" : \"Customer\"}";
String responseString = new String(bos.toByteArray(), "UTF-8");
Assert.assertEquals(expected, responseString);
}
@SuppressWarnings("unchecked")
@Test
public void testWriteMetadataResourceGenericEntity() throws Exception {
MetaDataResource<Metadata> mr = mock(MetaDataResource.class);
Metadata mockMetadata = createMockFlightMetadata();
//Mock MetadataResource
when(mr.getMetadata()).thenReturn(mockMetadata);
//Wrap entity resource into a JAX-RS GenericEntity instance
GenericEntity<MetaDataResource<Metadata>> ge = new GenericEntity<MetaDataResource<Metadata>>(mr) {};
//Serialize metadata resource
MetaDataProvider p = new MetaDataProvider();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
p.writeTo(ge.getEntity(), ge.getRawType(), ge.getType(), null, com.temenos.interaction.media.hal.MediaType.APPLICATION_HAL_JSON_TYPE, null, bos);
String expected = "{ \"_links\" : { \"self\" : { \"href\" : \"http://localhost:8080/example/api/$metadata\" } }, \"modelName\" : \"Customers\", \"entities\" : \"Customer\"}";
String responseString = new String(bos.toByteArray(), "UTF-8");
Assert.assertEquals(expected, responseString);
}
private Metadata createMockFlightMetadata() {
//Define vocabulary for this entity
Metadata metadata = new Metadata("Customers");
EntityMetadata vocs = new EntityMetadata("Customer");
Vocabulary vocName = new Vocabulary();
vocName.setTerm(new TermComplexType(false));
vocName.setTerm(new TermIdField(true));
vocs.setPropertyVocabulary("name", vocName);
Vocabulary vocAddress = new Vocabulary();
vocAddress.setTerm(new TermComplexType(true));
vocs.setPropertyVocabulary("address", vocAddress);
Vocabulary vocNumbert = new Vocabulary();
vocNumbert.setTerm(new TermComplexGroup("address"));
vocNumbert.setTerm(new TermValueType(TermValueType.INTEGER_NUMBER));
vocs.setPropertyVocabulary("number", vocNumbert);
Vocabulary vocStreet = new Vocabulary();
vocStreet.setTerm(new TermComplexGroup("address"));
vocStreet.setTerm(new TermValueType(TermValueType.TEXT));
vocs.setPropertyVocabulary("street", vocStreet);
Vocabulary vocTown = new Vocabulary();
vocTown.setTerm(new TermComplexGroup("address"));
vocTown.setTerm(new TermValueType(TermValueType.TEXT));
vocs.setPropertyVocabulary("town", vocStreet);
Vocabulary vocPostCode = new Vocabulary();
vocPostCode.setTerm(new TermComplexGroup("address"));
vocPostCode.setTerm(new TermValueType(TermValueType.TEXT));
vocs.setPropertyVocabulary("postCode", vocPostCode);
Vocabulary vocDob = new Vocabulary();
vocDob.setTerm(new TermComplexType(false));
vocs.setPropertyVocabulary("dateOfBirth", vocDob);
Vocabulary vocSector = new Vocabulary();
vocSector.setTerm(new TermComplexType(false));
vocs.setPropertyVocabulary("sector", vocSector);
Vocabulary vocIndustry = new Vocabulary();
vocIndustry.setTerm(new TermComplexType(false));
vocs.setPropertyVocabulary("industry", vocIndustry);
metadata.setEntityMetadata(vocs);
return metadata;
}
}