/* * Copyright (C) 2014 Jan Pokorsky * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU 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 General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package cz.cas.lib.proarc.common.mods.ndk; import cz.cas.lib.proarc.common.mods.ModsUtils; import cz.cas.lib.proarc.common.mods.ndk.NdkMapper.Context; import cz.cas.lib.proarc.mods.CodeOrText; import cz.cas.lib.proarc.mods.IdentifierDefinition; import cz.cas.lib.proarc.mods.IssuanceDefinition; import cz.cas.lib.proarc.mods.ModsDefinition; import cz.cas.lib.proarc.mods.OriginInfoDefinition; import cz.cas.lib.proarc.mods.PlaceDefinition; import cz.cas.lib.proarc.mods.PlaceTermDefinition; import cz.cas.lib.proarc.oaidublincore.OaiDcType; import java.io.StringReader; import java.util.Arrays; import java.util.List; import javax.xml.transform.stream.StreamSource; import org.easymock.EasyMock; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; /** * * @author Jan Pokorsky */ public class NdkPeriodicalMapperTest { public NdkPeriodicalMapperTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() { } @Test public void testCreateMods() { ModsDefinition mods = new ModsDefinition(); NdkPeriodicalMapper mapper = new NdkPeriodicalMapper(); Context ctx = EasyMock.createMock(Context.class); EasyMock.expect(ctx.getPid()).andReturn("uuid:testId").anyTimes(); EasyMock.replay(ctx); mapper.createMods(mods, ctx); List<IdentifierDefinition> identifiersResult = mods.getIdentifier(); assertEquals(1, identifiersResult.size()); IdentifierDefinition idResult = identifiersResult.get(0); assertEquals("uuid", idResult.getType()); assertEquals("testId", idResult.getValue()); assertEquals(1, mods.getTypeOfResource().size()); assertEquals("text", mods.getTypeOfResource().get(0).getValue()); assertEquals(1, mods.getGenre().size()); assertEquals("title", mods.getGenre().get(0).getValue()); assertEquals(1, mods.getOriginInfo().size()); assertEquals(1, mods.getOriginInfo().get(0).getIssuance().size()); assertEquals(IssuanceDefinition.CONTINUING, mods.getOriginInfo().get(0).getIssuance().get(0)); assertEquals(0, mods.getOriginInfo().get(0).getPlace().size()); } @Test public void testCreateMods_UpdateMods() { ModsDefinition mods = new ModsDefinition(); NdkPeriodicalMapper mapper = new NdkPeriodicalMapper(); Context ctx = EasyMock.createMock(Context.class); EasyMock.expect(ctx.getPid()).andReturn("uuid:testId").anyTimes(); EasyMock.replay(ctx); mapper.createMods(mods, ctx); PlaceDefinition place = new PlaceDefinition(); PlaceTermDefinition placeTerm = new PlaceTermDefinition(); placeTerm.setValue("place"); place.getPlaceTerm().add(placeTerm); mods.getOriginInfo().get(0).getPlace().add(place); mapper.createMods(mods, ctx); List<IdentifierDefinition> identifiersResult = mods.getIdentifier(); assertEquals(1, identifiersResult.size()); IdentifierDefinition idResult = identifiersResult.get(0); assertEquals("uuid", idResult.getType()); assertEquals("testId", idResult.getValue()); assertEquals(1, mods.getTypeOfResource().size()); assertEquals("text", mods.getTypeOfResource().get(0).getValue()); assertEquals(1, mods.getGenre().size()); assertEquals("title", mods.getGenre().get(0).getValue()); assertEquals(1, mods.getOriginInfo().size()); assertEquals(1, mods.getOriginInfo().get(0).getIssuance().size()); assertEquals(IssuanceDefinition.CONTINUING, mods.getOriginInfo().get(0).getIssuance().get(0)); assertEquals(1, mods.getOriginInfo().get(0).getPlace().size()); assertEquals(1, mods.getOriginInfo().get(0).getPlace().get(0).getPlaceTerm().size()); assertEquals(CodeOrText.TEXT, mods.getOriginInfo().get(0).getPlace().get(0).getPlaceTerm().get(0).getType()); } @Test public void testCreateMods_FixIssuance() { ModsDefinition mods = new ModsDefinition(); NdkPeriodicalMapper mapper = new NdkPeriodicalMapper(); Context ctx = EasyMock.createMock(Context.class); EasyMock.expect(ctx.getPid()).andReturn("uuid:testId").anyTimes(); EasyMock.replay(ctx); OriginInfoDefinition oi = new OriginInfoDefinition(); oi.getIssuance().add(IssuanceDefinition.SERIAL); mods.getOriginInfo().add(oi); mapper.createMods(mods, ctx); assertEquals(Arrays.asList(IssuanceDefinition.CONTINUING), mods.getOriginInfo().get(0).getIssuance()); } @Test public void testCreateLabel() { String xml = "<mods version='3.5' xmlns='http://www.loc.gov/mods/v3'>" + "<titleInfo>" + "<nonSort>NS1</nonSort><title>T1</title><subTitle>S1</subTitle><partName>PNam1</partName><partNumber>PNum1</partNumber>" + "</titleInfo>" + "<titleInfo>" + "<title>T2</title><subTitle>S2</subTitle>" + "</titleInfo>" + "</mods>"; ModsDefinition mods = ModsUtils.unmarshalModsType(new StreamSource(new StringReader(xml))); NdkPeriodicalMapper mapper = new NdkPeriodicalMapper(); String result = mapper.createObjectLabel(mods); assertEquals("NS1 T1: S1. PNum1. PNam1", result); } @Test public void testCreateDc() { String xml = "<mods version='3.5' xmlns='http://www.loc.gov/mods/v3'>" + "<titleInfo>" + "<nonSort>NS1</nonSort><title>T1</title><subTitle>S1</subTitle><partName>PNam1</partName><partNumber>PNum1</partNumber>" + "</titleInfo>" + "<titleInfo>" + "<title>T2</title><subTitle>S2</subTitle>" + "</titleInfo>" + "</mods>"; ModsDefinition mods = ModsUtils.unmarshalModsType(new StreamSource(new StringReader(xml))); NdkPeriodicalMapper mapper = new NdkPeriodicalMapper(); Context ctx = new Context("uuid:testId"); OaiDcType result = mapper.createDc(mods, ctx); assertEquals("NS1 T1: S1", result.getTitles().get(0).getValue()); assertEquals("T2: S2", result.getTitles().get(1).getValue()); assertEquals("PNum1", result.getDescriptions().get(0).getValue()); assertEquals("PNam1", result.getDescriptions().get(1).getValue()); } }