Package no.kommune.bergen.soa.svarut.dao

Source Code of no.kommune.bergen.soa.svarut.dao.ForsendelsesArkivTest

package no.kommune.bergen.soa.svarut.dao;

import static no.kommune.bergen.soa.svarut.dto.ShipmentPolicy.ALTINN_OG_APOST;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.security.AccessControlException;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.Date;
import java.util.List;
import java.util.Map;

import junit.framework.Assert;
import no.kommune.bergen.soa.common.calendar.BusinessCalendar;
import no.kommune.bergen.soa.common.calendar.CalendarHelper;
import no.kommune.bergen.soa.common.pdf.PdfGeneratorImpl;
import no.kommune.bergen.soa.svarut.AltinnFacade;
import no.kommune.bergen.soa.svarut.JdbcHelper;
import no.kommune.bergen.soa.svarut.ServiceContext;
import no.kommune.bergen.soa.svarut.altinn.correspondence.CorrespondenceClient;
import no.kommune.bergen.soa.svarut.altinn.correspondence.CorrespondenceSettings;
import no.kommune.bergen.soa.svarut.domain.Fodselsnr;
import no.kommune.bergen.soa.svarut.domain.Forsendelse;
import no.kommune.bergen.soa.svarut.domain.JuridiskEnhet;
import no.kommune.bergen.soa.svarut.domain.Orgnr;
import no.kommune.bergen.soa.svarut.domain.PrintReceipt;
import no.kommune.bergen.soa.svarut.domain.Printed;
import no.kommune.bergen.soa.svarut.dto.ShipmentPolicy;
import no.kommune.bergen.soa.svarut.util.FilHenter;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ForsendelsesArkivTest {
  private static final int MOCK_RECEIPT_ID = 123456;
  public static final String fnr = "12345678901";
  public static final String orgnr = "987654321";
  private static final String navn = "navn";
  private static final String adresse1 = "adresse1";
  private static final String adresse2 = "adresse2";
  private static final String adresse3 = "adresse3";
  private static final String postnr = "9999";
  private static final String poststed = "poststed";
  private static final String avsender_navn = "avsender_navn";
  private static final String avsender_adresse1 = "avsender_adresse1";
  private static final String avsender_adresse2 = "avsender_adresse2";
  private static final String avsender_adresse3 = "avsender_adresse3";
  private static final String avsender_postnr = "9998";
  private static final String avsender_poststed = "avsender_poststed";
  private static final String land = "land";
  private static final String tittel = "tittel";
  private static final String melding = "melding";
  private static final String appid = "appid";
  private ForsendelsesArkiv forsendelsesArkiv;
  public static final String testPdf = "test.pdf";

  @Before
  public void init() {
    // forsendelsesArkiv = createForsendesesArkivOracle();
    forsendelsesArkiv = createForsendesesArkiv();
  }

  public static ForsendelsesArkiv createForsendesesArkiv() {
    JdbcHelper jdbcHelper = new JdbcHelper();
    jdbcHelper.createTable( "FORSENDELSESARKIV" );
    FileStore fileStore = new FileStore("target", new PdfGeneratorImpl("target"));
    CorrespondenceClient correspondenceClient = new CorrespondenceClient(new CorrespondenceSettings());
    AltinnFacade altinnFacade = new AltinnFacade(null, correspondenceClient, null, null);

    return new ForsendelsesArkiv( fileStore, jdbcHelper.getJdbcTemplate(), altinnFacade );
  }

  @Test
  public void testTestPdf() {
    File fil = FilHenter.getFileAsFile( ForsendelsesArkivTest.testPdf );
    assertTrue( fil.exists() );
  }

  @Test
  public void retrieveYoungerThan() {
    int numberOfDays = 3;
    Forsendelse f = createOldForsendelse( numberOfDays );
    assertNotNull( f );
    assertEquals(0, forsendelsesArkiv.retrieveYoungerThan(0, null).size());
    assertEquals(0, forsendelsesArkiv.retrieveYoungerThan(1, null).size());
    assertEquals(0, forsendelsesArkiv.retrieveYoungerThan(2, null).size());
    assertEquals(0, forsendelsesArkiv.retrieveYoungerThan(3, null).size());
    assertEquals(1, forsendelsesArkiv.retrieveYoungerThan(4, null).size());
    assertEquals(1, forsendelsesArkiv.retrieveYoungerThan(5, null).size());
  }

  @Test
  public void retrieveYoungerThanAgain() {
    for (int numberOfDays = 0; numberOfDays < 4; numberOfDays++) {
      createOldForsendelse( numberOfDays );
    }
    assertEquals(0, forsendelsesArkiv.retrieveYoungerThan(0, null).size());
    assertEquals(1, forsendelsesArkiv.retrieveYoungerThan(1, null).size());
    assertEquals(2, forsendelsesArkiv.retrieveYoungerThan(2, null).size());
    assertEquals(3, forsendelsesArkiv.retrieveYoungerThan(3, null).size());
    assertEquals(4, forsendelsesArkiv.retrieveYoungerThan(4, null).size());
    assertEquals(4, forsendelsesArkiv.retrieveYoungerThan(5, null).size());
  }

  @Test
  public void testAtRetrieveSentToAltinnButNotPrintedYoungerThanFinnerAlleAltinnForsendelser() {
    for (int numberOfDays = 0; numberOfDays < 4; numberOfDays++) {
      createOldSentToAltinnForsendelse( numberOfDays );
    }
    assertEquals(4, forsendelsesArkiv.retrieveSentToAltinnButNotPrinted(null).size());
  }

  private Forsendelse createOldForsendelse( int numberOfDays ) {
    String id = forsendelsesArkiv.save(createForsendelse(numberOfDays), getTestDocument());
    assertNotNull( id );
    forsendelsesArkiv.jdbcTemplate.update("UPDATE FORSENDELSESARKIV SET SENDT=? WHERE ID=?", new Object[]{daysAgo(numberOfDays), id}, new int[]{Types.DATE, Types.VARCHAR});
    return forsendelsesArkiv.retrieve( id );
  }

  private Forsendelse createOldSentToAltinnForsendelse( int numberOfDays ) {
    String id = forsendelsesArkiv.save(createForsendelse(numberOfDays), getTestDocument());
    assertNotNull( id );
    forsendelsesArkiv.jdbcTemplate.update("UPDATE FORSENDELSESARKIV SET SENDT=?, ALTINN_SENDT=? WHERE ID=?", new Object[]{daysAgo(numberOfDays), daysAgo(numberOfDays), id}, new int[]{Types.DATE, Types.DATE, Types.VARCHAR});
    return forsendelsesArkiv.retrieve( id );
  }
  private java.sql.Date daysAgo( int numberOfDays ) {
    final long dayInMillis = 1000 * 60 * 60 * 24;
    long now = System.currentTimeMillis();
    return new java.sql.Date( now - (dayInMillis * numberOfDays) );
  }

  @Test
  public void saveThenRetrieve() {
    int variant = 1;
    String id = forsendelsesArkiv.save( createForsendelse( variant ), getTestDocument() );
    assertNotNull( id );
    Forsendelse f = forsendelsesArkiv.retrieve( id );
    validateForsendelse( f, variant );
  }

  @Test
  public void saveThenRetrieveSeveralOrg() {
    saveThenRetrieveSeveral( new Orgnr( orgnr ) );
  }

  @Test
  public void saveThenRetrieveSeveralFnr() {
    saveThenRetrieveSeveral( new Fodselsnr( fnr ) );
  }

  private void saveThenRetrieveSeveral( JuridiskEnhet juridiskEnhet ) {
    final int count = 4;
    for (int variant = 1; variant <= count; variant++) {
      String id = forsendelsesArkiv.save( createForsendelse( variant ), getTestDocument() );
      assertNotNull( id );
    }
    List<Forsendelse> forsendelser = forsendelsesArkiv.retrieveList( juridiskEnhet );
    assertEquals( count, forsendelser.size() );
    for (Forsendelse f : forsendelser) {
      validateForsendelse( f, getVariant( f ) );
    }
  }

  public static int getVariant( Forsendelse f ) {
    return Integer.parseInt(f.getNavn().substring(navn.length()));
  }

  @Test
  public void setPrinted() {
    int variant = 1;
    String id = forsendelsesArkiv.save( createForsendelse( variant ), getTestDocument() );
    assertNotNull( id );
    PrintReceipt printReceipt = newPrintReceipt();
    forsendelsesArkiv.setPrinted( id, printReceipt );
    Forsendelse forsendelse = forsendelsesArkiv.retrieve( id );
    assertEquals( printReceipt.getPrintId(), forsendelse.getPrintId() );
    assertEquals( printReceipt.getPageCount(), forsendelse.getAntallSider() );
  }

  @Test
  public void readUnsent() {
    int[] variants = { 0, 1, 2, 3, 4 };
    String ids[] = new String[variants.length];
    for (int i = 0; i < variants.length; i++) {
      ids[i] = forsendelsesArkiv.save( createForsendelse( i ), getTestDocument() );
    }
    List<String> list = forsendelsesArkiv.readUnsent( null );
    assertEquals( variants.length, list.size() );
    PrintReceipt printReceipt = newPrintReceipt();
    forsendelsesArkiv.setPrinted( ids[0], printReceipt );
    list = forsendelsesArkiv.readUnsent( null );
    assertEquals( variants.length - 1, list.size() );
    forsendelsesArkiv.setSentAltinn(ids[1], MOCK_RECEIPT_ID);
    list = forsendelsesArkiv.readUnsent( null );
    assertEquals( variants.length - 2, list.size() );
  }

  @Test
  public void readThenSetUnRead() {
    String id = forsendelsesArkiv.save( createForsendelse( 1 ), getTestDocument() );
    Map<?, ?> row = forsendelsesArkiv.retrieveRow( id );
    assertNull( row.get( "LEST" ) );
    forsendelsesArkiv.confirm( id );
    row = forsendelsesArkiv.retrieveRow( id );
    assertNotNull( row.get( "LEST" ) );
    forsendelsesArkiv.setUnread( id );
    row = forsendelsesArkiv.retrieveRow( id );
    assertNull( row.get( "LEST" ) );
  }

  @Test
  public void calculateTimeLimit() {
    long days = 365 * 10;
    long now = System.currentTimeMillis();
    long daysInMillis = days * 1000 * 60 * 60 * 24;
    long expect = now - daysInMillis;
    Timestamp timeLimit = forsendelsesArkiv.calculateTimeLimit( days );
    expectWithinRange( expect, expect + 1000, timeLimit.getTime() );
  }

  private void expectWithinRange( long lower, long upper, long compareTo ) {
    Assert.assertTrue( compareTo >= lower );
    Assert.assertTrue( compareTo <= upper );
  }

  @Test
  @Ignore
  public void readThenRemove() {
    String id = forsendelsesArkiv.save( createForsendelse( 1 ), getTestDocument() );
    Map<?, ?> row = forsendelsesArkiv.retrieveRow( id );
    assertNull( row.get( "LEST" ) );
    forsendelsesArkiv.confirm( id );
    assertEquals( 0, forsendelsesArkiv.removeOlderThan( 1 ) );
    assertEquals( 1, forsendelsesArkiv.removeOlderThan( -1 ) );
    try {
      forsendelsesArkiv.retrieveRow( id );
      fail( "Remove failed" );
    } catch (Exception e) {
      assertTrue( true );
    }
  }

  @Test
  @Ignore
  public void removeUnreachable() {
    Forsendelse f = createForsendelse( 1 );
    f.setFnr( null );
    f.setOrgnr( null );
    String id = forsendelsesArkiv.save( f, getTestDocument() );
    Map<?, ?> row = forsendelsesArkiv.retrieveRow( id );
    assertNotNull( row );
    forsendelsesArkiv.confirm( id );
    assertEquals( 0, forsendelsesArkiv.removeUnreachable( 1 ) );
    assertEquals( 1, forsendelsesArkiv.removeUnreachable( -1 ) );
    try {
      forsendelsesArkiv.retrieveRow( id );
      fail( "Remove failed" );
    } catch (Exception e) {
      assertTrue( true );
    }
    id = forsendelsesArkiv.save( f, getTestDocument() );
    row = forsendelsesArkiv.retrieveRow( id );
    assertNotNull( row );
    forsendelsesArkiv.stop( id );
    assertEquals( 0, forsendelsesArkiv.removeUnreachable( 1 ) );
    assertEquals( 1, forsendelsesArkiv.removeUnreachable( -1 ) );
    try {
      forsendelsesArkiv.retrieveRow( id );
      fail( "Remove failed" );
    } catch (Exception e) {
      assertTrue( true );
    }
  }

  @Test
  public void authorizeFodselsnrOk() {
    Forsendelse f = createForsendelse( 1 );
    String id = forsendelsesArkiv.save( f, getTestDocument() );
    try {
      forsendelsesArkiv.authorize( id, new Fodselsnr( f.getFnr() ) );
    } catch (AccessControlException e) {
      fail( e.getMessage() );
    }
  }

  @Test(expected = AccessControlException.class)
  public void authorizeFodselsnrFail() {
    Forsendelse f = createForsendelse( 1 );
    String id = forsendelsesArkiv.save( f, getTestDocument() );
    forsendelsesArkiv.authorize( id, new Fodselsnr( "00000000000" ) );
  }

  @Test
  public void authorizeOrgnrOk() {
    Forsendelse f = createForsendelse( 1 );
    String id = forsendelsesArkiv.save( f, getTestDocument() );
    assertNotNull( id );
  }

  @Test(expected = AccessControlException.class)
  public void authorizeOrgnrFail() {
    Forsendelse f = createForsendelse( 1 );
    String id = forsendelsesArkiv.save( f, getTestDocument() );
    forsendelsesArkiv.authorize( id, new Orgnr( "000000000" ) );
  }

  @Test
  public void sequence() {
    System.setProperty( "CONSTRETTO_TAGS", "DEV" );
    ApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml" );
    ServiceContext serviceContext = (ServiceContext)context.getBean( "serviceContext" );
    ForsendelsesArkiv forsendelsesArkiv2 = serviceContext.getForsendelsesArkiv();
    String nextVal = forsendelsesArkiv2.getIdentifier();
    assertEquals( 36, nextVal.length() );
  }

  @Test
  public void updatePrinted() {
    Printed printed = newPrinted( storeNewForsendelse() );
    forsendelsesArkiv.updatePrinted( printed );
    Forsendelse forsendelse = forsendelsesArkiv.retrieve( printed.getForsendelsesId() );
    assertEquals( printed.getTidspunktPostlagt().getTime(), forsendelse.getTidspunktPostlagt().getTime() );
    int antallSiderPostlagt = printed.getAntallSortHvitSider() + printed.getAntallFargeSider();
    assertEquals( antallSiderPostlagt, forsendelse.getAntallSiderPostlagt() );
    assertEquals(1 , forsendelse.getAntallSortHvitSider() );
    assertEquals(2 , forsendelse.getAntallFargeSider() );
    assertEquals(3 , forsendelse.getAntallArkKonvoluttertAutomatisk() );
    assertEquals(4 , forsendelse.getAntallEkstraArkKonvoluttertAutomatisk() );
    assertEquals(5 , forsendelse.getAntallArkKonvoluttertManuelt() );
    assertEquals(6 , forsendelse.getAntallEkstraArkKonvoluttertManuelt() );
    assertEquals(20 , forsendelse.getVekt() );
    assertEquals(5.55 , forsendelse.getProduksjonskostnader(), 0.01 );
    assertEquals(10.10 , forsendelse.getPorto(), 0.01 );
  }

  @Test
  public void failedToPrintAlertWindowStartDayOverWeekend() {
    Date now = CalendarHelper.toDate( 2011, 11, 14 );
    int failedToPrintAlertWindowStartDay = 1;
    Date failedToPrintAlertWindowStart = BusinessCalendar.getPreviousWorkday( now, failedToPrintAlertWindowStartDay );
    Assert.assertEquals( "2011-11-11", CalendarHelper.formatAsDate( failedToPrintAlertWindowStart ) );
  }

  @Test
  public void testAnsvarsstedInsert() throws Exception {
    Forsendelse f = new Forsendelse();
    f.setNavn("Test Testesen");
    f.setMeldingsTekst("Hei fra SvarUtItest");
    f.setTittel("Viktig melding!");
    f.setEmail("test@hudson.iktofu.no");
    f.setAnsvarsSted("EnKulPlass");
    f.setKonteringkode("kontkode123");
    String id = forsendelsesArkiv.save(f, new ByteArrayInputStream(new byte[]{}));
    Forsendelse f2 = forsendelsesArkiv.retrieve(id);
    assertEquals("EnKulPlass", f2.getAnsvarsSted());
    assertEquals("kontkode123", f2.getKonteringkode());
  }

  private PrintReceipt newPrintReceipt() {
    PrintReceipt printReceipt = new PrintReceipt();
    printReceipt.setPrintId( "MyPrintId" );
    printReceipt.setPageCount( 123 );
    return printReceipt;
  }

  private String storeNewForsendelse() {
    Forsendelse f = createForsendelse( 1 );
    return forsendelsesArkiv.save( f, getTestDocument() );
  }

  private Printed newPrinted( String forsendelsesId ) {
    Printed printed = new Printed();
    printed.setTidspunktPostlagt( new Date() );
    printed.setAntallSortHvitSider(999);
    printed.setAntallFargeSider(0);
    printed.setForsendelsesId( forsendelsesId );
    printed.setAntallSortHvitSider(1);
    printed.setAntallFargeSider(2);
    printed.setAntallArkKonvoluttertAutomatisk(3);
    printed.setAntallEkstraArkKonvoluttertAutomatisk(4);
    printed.setAntallArkKonvoluttertManuelt(5);
    printed.setAntallEkstraArkKonvoluttertManuelt(6);
    printed.setVekt(20);
    printed.setProduksjonskostnader(5.55);
    printed.setPorto(10.10);
    return printed;
  }

  public static Forsendelse createForsendelse( int variant ) {
    return createForsendelse( variant, fnr, orgnr );
  }

  public static Forsendelse createForsendelse( int variant, String fnr, String orgnr ) {
    Forsendelse f = new Forsendelse();
    f.setFnr( fnr );
    f.setOrgnr( orgnr );
    f.setNavn( navn + variant );
    f.setAdresse1( adresse1 + variant );
    f.setAdresse2( adresse2 + variant );
    f.setAdresse3( adresse3 + variant );
    f.setPostnr( postnr + variant );
    f.setPoststed( poststed + variant );
    f.setLand( land + variant );
    f.setAvsenderNavn( avsender_navn + variant );
    f.setAvsenderAdresse1( avsender_adresse1 + variant );
    f.setAvsenderAdresse2( avsender_adresse2 + variant );
    f.setAvsenderAdresse3( avsender_adresse3 + variant );
    f.setAvsenderPostnr( avsender_postnr + variant );
    f.setAvsenderPoststed( avsender_poststed + variant );
    f.setTittel( tittel + variant );
    f.setMeldingsTekst( melding + variant );
    f.setAppid( appid + variant );
    f.setShipmentPolicy( ALTINN_OG_APOST.value() );
    return f;
  }

  public static Forsendelse createForsendelse( int variant, String fnr, String orgnr, String id ) {
    Forsendelse f = new Forsendelse();
    f.setFnr( fnr );
    f.setId(id);
    f.setOrgnr( orgnr );
    f.setNavn( navn + variant );
    f.setAdresse1( adresse1 + variant );
    f.setAdresse2( adresse2 + variant );
    f.setAdresse3( adresse3 + variant );
    f.setPostnr( postnr + variant );
    f.setPoststed( poststed + variant );
    f.setLand( land + variant );
    f.setAvsenderNavn( avsender_navn + variant );
    f.setAvsenderAdresse1( avsender_adresse1 + variant );
    f.setAvsenderAdresse2( avsender_adresse2 + variant );
    f.setAvsenderAdresse3( avsender_adresse3 + variant );
    f.setAvsenderPostnr( avsender_postnr + variant );
    f.setAvsenderPoststed( avsender_poststed + variant );
    f.setTittel( tittel + variant );
    f.setMeldingsTekst( melding + variant );
    f.setAppid( appid + variant );
    f.setShipmentPolicy( ALTINN_OG_APOST.value() );
    return f;
  }

  public static void validateForsendelse( Forsendelse f, int variant ) {
    validateForsendelse( f, variant, fnr, orgnr );
  }

  public static void validateForsendelse( Forsendelse f, int variant, String fnr, String orgnr ) {
    assertEquals( "fnr", fnr, f.getFnr() );
    assertEquals( "orgnr", orgnr, f.getOrgnr() );
    assertEquals( "navn", (navn + variant), f.getNavn() );
    assertEquals( "adresse1", (adresse1 + variant), f.getAdresse1() );
    assertEquals( "adresse2", (adresse2 + variant), f.getAdresse2() );
    assertEquals( "adresse3", (adresse3 + variant), f.getAdresse3() );
    assertEquals( "postnr", (postnr + variant), f.getPostnr() );
    assertEquals( "poststed", (poststed + variant), f.getPoststed() );
    assertEquals( "land", (land + variant), f.getLand() );
    assertEquals( "avsender_navn", (avsender_navn + variant), f.getAvsenderNavn() );
    assertEquals( "avsender_adresse1", (avsender_adresse1 + variant), f.getAvsenderAdresse1() );
    assertEquals( "avsender_adresse2", (avsender_adresse2 + variant), f.getAvsenderAdresse2() );
    assertEquals( "avsender_adresse3", (avsender_adresse3 + variant), f.getAvsenderAdresse3() );
    assertEquals( "avsender_postnr", (avsender_postnr + variant), f.getAvsenderPostnr() );
    assertEquals( "avsender_poststed", (avsender_poststed + variant), f.getAvsenderPoststed() );
    assertEquals( "tittel", (tittel + variant), f.getTittel() );
    assertEquals( "melding", (melding + variant), f.getMeldingsTekst() );
    assertEquals( "appid", (appid + variant), f.getAppid() );
    assertNotNull( "file == null", f.getFile().getName() );
  }

  public static InputStream getTestDocument() {
    return FilHenter.getFileAsInputStream( testPdf );
  }

  @Test
  public void testMarkMessageFailed() throws Exception {
    Forsendelse f = createForsendelse( 1, "999", null );
    f = forsendelsesArkiv.retrieve( forsendelsesArkiv.save( f, ForsendelsesArkivTest.class.getClassLoader().getResourceAsStream( "test.pdf" ) ) );
    Date nesteforsok = new Date( f.getSendt().getTime() + 5000L );
    forsendelsesArkiv.markForsendelseFailed( f, nesteforsok );
    Forsendelse f2 = forsendelsesArkiv.retrieve( f.getId() );
    assertTrue( "", f.getSendt().before( f2.getNesteForsok() ) );

    List<String> forsendelser = forsendelsesArkiv.readUnsent( new ShipmentPolicy[] { ShipmentPolicy.fromValue( f.getShipmentPolicy() ) } );
    assertFalse( forsendelser.contains( f2.getId() ) );

    forsendelsesArkiv.markForsendelseFailed( f, new Date( f.getSendt().getTime() - 1000L ) );

    List<String> forsendelser2 = forsendelsesArkiv.readUnsent( new ShipmentPolicy[] { ShipmentPolicy.fromValue( f.getShipmentPolicy() ) } );
    assertTrue( forsendelser2.contains( f2.getId() ) );
  }

  @Test
  public void testReadUnsentReturnererForsendelseSomIkkeErSendt() {
    Forsendelse f = createForsendelse(1, "12345678910", "123456789");
    String forsendelseId = forsendelsesArkiv.save( f, ForsendelsesArkivTest.class.getClassLoader().getResourceAsStream( "test.pdf" ) );

    ShipmentPolicy[] shipmentPolicies = {ALTINN_OG_APOST};

    List<String> unsent = forsendelsesArkiv.readUnsent(shipmentPolicies);
    boolean funnet = false;
    for(String id : unsent) {
      if(id.equals(forsendelseId))
        funnet = true;
    }
    assertTrue("Forsendelsen ikke funnet.", funnet);
  }

  @Test
  public void testAtLesteForsendelserTilOrgDukkerOppISentToAltinn() {
    Forsendelse f1 = createForsendelse(1, "12345678910", null);
    Forsendelse f2 = createForsendelse(1, "12345678910", "123456789");
    String forsendelseId1 = forsendelsesArkiv.save( f1, ForsendelsesArkivTest.class.getClassLoader().getResourceAsStream( "test.pdf" ) );
    String forsendelseId2 = forsendelsesArkiv.save( f2, ForsendelsesArkivTest.class.getClassLoader().getResourceAsStream( "test.pdf" ) );

    // Sett som lest
    forsendelsesArkiv.confirm(forsendelseId1);
    forsendelsesArkiv.confirm(forsendelseId2);

    // Sett som sendt til Altinn
    forsendelsesArkiv.setSentAltinn(forsendelseId2, MOCK_RECEIPT_ID);

    ShipmentPolicy[] shipmentPolicies = {ALTINN_OG_APOST};

    List<String> unsent = forsendelsesArkiv.readUnsent(shipmentPolicies);
    boolean funnet1 = false;
    boolean funnet2 = false;
    for(String id : unsent) {
      if(id.equals(forsendelseId1)) {
        funnet1 = true;
      } else if(id.equals(forsendelseId2)) {
        funnet2 = true;
      }
    }
    assertFalse("Forsendelsen uten orgnr funnet i readUnsent. Skal ikke være der.", funnet1);
    assertFalse("Forsendelsen uten orgnr funne i readUnsent. Skal ikke være der.", funnet2);
    assertEquals("Forsendelse ikke funnet i retrieveSentToAltinnButNotPrinted.", 1, forsendelsesArkiv.retrieveSentToAltinnButNotPrinted(shipmentPolicies).size());
  }

  @Test
  public void testAtLesteForsendelserTilOrgIkkeDukkerOppISentToAltinnEtterPrint() {
    Forsendelse f1 = createForsendelse(1, "12345678910", null);
    Forsendelse f2 = createForsendelse(1, "12345678910", "123456789");

    // Arkiver forsendelse
    String forsendelseId1 = forsendelsesArkiv.save( f1, ForsendelsesArkivTest.class.getClassLoader().getResourceAsStream( "test.pdf" ) );
    String forsendelseId2 = forsendelsesArkiv.save( f2, ForsendelsesArkivTest.class.getClassLoader().getResourceAsStream( "test.pdf" ) );

    // Sett som lest
    forsendelsesArkiv.confirm(forsendelseId1);
    forsendelsesArkiv.confirm(forsendelseId2);

    // Sett som sendt til Altinn
    forsendelsesArkiv.setSentAltinn(forsendelseId2, MOCK_RECEIPT_ID);

    ShipmentPolicy[] shipmentPolicies = {ALTINN_OG_APOST};

    List<String> unsent = forsendelsesArkiv.readUnsent(shipmentPolicies);
    boolean funnet1 = false;
    boolean funnet2 = false;
    for(String id : unsent) {
      if(id.equals(forsendelseId1)) {
        funnet1 = true;
      } else if(id.equals(forsendelseId2)) {
        funnet2 = true;
      }
    }
    assertFalse("Forsendelsen uten orgnr funnet i readUnsent. Skal ikke være der.", funnet1);
    assertFalse("Forsendelsen uten orgnr funnet i readUnsent. Skal ikke være der.", funnet2);
    assertEquals("Forsendelse ikke funnet i retrieveSentToAltinnButNotPrinted.", 1, forsendelsesArkiv.retrieveSentToAltinnButNotPrinted(shipmentPolicies).size());

    // Sjekk at de ikke blir funnet etter print
    PrintReceipt printReceipt1 = newPrintReceipt();
    forsendelsesArkiv.setPrinted( forsendelseId1, printReceipt1 );
    PrintReceipt printReceipt2 = newPrintReceipt();
    forsendelsesArkiv.setPrinted( forsendelseId2, printReceipt2 );

    unsent = forsendelsesArkiv.readUnsent(shipmentPolicies);
    funnet1 = false;
    funnet2 = false;
    for(String id : unsent) {
      if(id.equals(forsendelseId1)) {
        funnet1 = true;
      } else if(id.equals(forsendelseId2)) {
        funnet2 = true;
      }
    }
    assertFalse("Forsendelsen uten orgnr funnet etter print. Skal ikke være der etter print eller lest.", funnet1);
    assertFalse("Forsendelsen med orgnr funnet etter print. Skal ikke være der etter print eller lest", funnet2);
    assertTrue("Forsendelse funnet i retrieveSentToAltinnButNotPrinted.", forsendelsesArkiv.retrieveSentToAltinnButNotPrinted(shipmentPolicies).size() < 1);
  }

  @Test
  @Ignore
  public void testReadUnsentReturnererForsendelserTilOrgEtterLestOgSattUlest() {
    Forsendelse f1 = createForsendelse(1, "12345678910", null);
    Forsendelse f2 = createForsendelse(1, "12345678910", "123456789");
    String forsendelseId1 = forsendelsesArkiv.save( f1, ForsendelsesArkivTest.class.getClassLoader().getResourceAsStream( "test.pdf" ) );
    String forsendelseId2 = forsendelsesArkiv.save( f2, ForsendelsesArkivTest.class.getClassLoader().getResourceAsStream( "test.pdf" ) );

    // Sett som lest
    forsendelsesArkiv.confirm(forsendelseId1);
    forsendelsesArkiv.confirm(forsendelseId2);

    ShipmentPolicy[] shipmentPolicies = {ALTINN_OG_APOST};

    List<String> unsent = forsendelsesArkiv.readUnsent(shipmentPolicies);
    boolean funnet1 = false;
    boolean funnet2 = false;
    for(String id : unsent) {
      if(id.equals(forsendelseId1)) {
        funnet1 = true;
      } else if(id.equals(forsendelseId2)) {
        funnet2 = true;
      }
    }
    assertFalse("Forsendelsen uten orgnr funnet. Skal ikke være der.", funnet1);
    assertTrue("Forsendelsen med orgnr ikke funnet.", funnet2);

    // Sjekk at de ikke blir funnet etter print
    PrintReceipt printReceipt1 = newPrintReceipt();
    forsendelsesArkiv.setPrinted( forsendelseId1, printReceipt1 );
    PrintReceipt printReceipt2 = newPrintReceipt();
    forsendelsesArkiv.setPrinted( forsendelseId2, printReceipt2 );

    unsent = forsendelsesArkiv.readUnsent(shipmentPolicies);
    funnet1 = false;
    funnet2 = false;
    for(String id : unsent) {
      if(id.equals(forsendelseId1)) {
        funnet1 = true;
      } else if(id.equals(forsendelseId2)) {
        funnet2 = true;
      }
    }
    assertFalse("Forsendelsen uten orgnr funnet. Skal ikke være der. Heller ikke etter print.", funnet1);
    assertFalse("Forsendelsen med orgnr funnet. Skal ikke være der etter print", funnet2);

    forsendelsesArkiv.setUnread(forsendelseId1);
    forsendelsesArkiv.setUnread(forsendelseId2);

    unsent = forsendelsesArkiv.readUnsent(shipmentPolicies);
    funnet1 = false;
    funnet2 = false;
    for(String id : unsent) {
      if(id.equals(forsendelseId1)) {
        funnet1 = true;
      } else if(id.equals(forsendelseId2)) {
        funnet2 = true;
      }
    }
    assertFalse("Forsendelsen uten orgnr funnet etter satt til unread og er printet. Skal ikke finnes og kunne sendes til print 2 ganger. ", funnet1);
    assertFalse("Forsendelsen med orgnr funnet etter satt til unread og er printet. Skal ikke finnes og kunne sendes til print 2 ganger.", funnet2);
  }
}
TOP

Related Classes of no.kommune.bergen.soa.svarut.dao.ForsendelsesArkivTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.