package service; import api.v1.ForecastSearchParams; import api.v1.ForecastSearchResult; import api.v1.InvoiceData; import mapper.ForecastMapper; import mapper.ForecastSearchResultMapper; import models.ForecastModel; import models.InvoiceLine; import org.joda.time.DateTime; import org.junit.Test; import util.InMemoryDbTest; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; public class InvoiceGeneratorServiceTest extends InMemoryDbTest { @Test public void testGenerateInvoice() { InvoiceGeneratorService service = new InvoiceGeneratorService(fakeUser); DateTime now = new DateTime(2016,2,28,12,32); service.setNow(now); List<InvoiceLine> invoiceLines = new ArrayList<>(); InvoiceLine line1 = new InvoiceLine("1", "1601", "20161601", "Leif/222", "PO1", "MET1", "T", "Vær vennlig å oppgi fakturanummer ved betaling", "", "", 0, 0); InvoiceLine line2 = new InvoiceLine("1", "1601", "20161601", "Leif/222", "PO1", "MET1", "", "Oppstartsgebyr", "840", "3505", 1, 900); InvoiceLine line3 = new InvoiceLine("1", "1601", "20161601", "Leif/222", "PO1", "MET1", "", "Varsel for P1 fra 20151201 til 20151231", "840", "80111", 14, 250); invoiceLines.add(line1); invoiceLines.add(line2); invoiceLines.add(line3); String result = service.generateInvoice(invoiceLines); assertNotNull("resultat er null", result); String[] lines = result.split("\n"); assertNotNull("linjer i csv er null",lines); assertEquals("Antall linjer i csv fil er ikke som forventet",4,lines.length); String[] fieldsLine1 = lines[1].split("\t"); assertNotNull("Felter i linje 1 er null",fieldsLine1); assertEquals("BREAK er ikke tom", "", fieldsLine1[0]); assertEquals("FORETAK er ikke MET", "MET", fieldsLine1[1]); assertEquals("RESKNR/kunnenr er ikke 1", "1", fieldsLine1[2]); assertEquals("PERIODE stemmer ikke", "1601", fieldsLine1[3]); assertEquals("BILDATO stemmer ikke", "20161601", fieldsLine1[4]); assertEquals("FORDATO er ikke tom", "", fieldsLine1[5]); assertEquals("BETBET er ikke tom", "", fieldsLine1[6]); assertEquals("VARREF stemmer ikke", "Leif/222", fieldsLine1[7]); assertEquals("KUNREF stemmer ikke", "PO1", fieldsLine1[8]); assertEquals("ORDRE/metref stemmer ikke", "MET1", fieldsLine1[9]); assertEquals("VARENR stemmer ikke", "T", fieldsLine1[10]); assertEquals("TEXT stemmer ikke", "Vær vennlig å oppgi fakturanummer ved betaling", fieldsLine1[11]); assertEquals("LKTODEL2 er ikke tom", "", fieldsLine1[12]); assertEquals("LKTODEL3 er ikke tom", "", fieldsLine1[13]); assertEquals("LKTODEL6 er ikke tom", "", fieldsLine1[14]); assertEquals("VALKODE er ikke tom", "", fieldsLine1[15]); assertEquals("ANTALL er ikke tom", "0", fieldsLine1[16]); assertEquals("SATS er ikke tom", "0" + "", fieldsLine1[17]); String[] fieldsLine2 = lines[2].split("\t"); assertEquals("BREAK er ikke tom", "", fieldsLine2[0]); assertEquals("FORETAK er ikke MET", "MET", fieldsLine2[1]); assertEquals("RESKNR/kunnenr er ikke 1", "1", fieldsLine2[2]); assertEquals("PERIODE stemmer ikke", "1601", fieldsLine2[3]); assertEquals("BILDATO stemmer ikke", "20161601", fieldsLine2[4]); assertEquals("FORDATO er ikke tom", "", fieldsLine2[5]); assertEquals("BETBET er ikke tom", "", fieldsLine2[6]); assertEquals("VARREF stemmer ikke", "Leif/222", fieldsLine2[7]); assertEquals("KUNREF stemmer ikke", "PO1", fieldsLine2[8]); assertEquals("ORDRE/metref stemmer ikke", "MET1", fieldsLine2[9]); assertEquals("VARENR stemmer ikke", "", fieldsLine2[10]); assertEquals("TEXT stemmer ikke", "Oppstartsgebyr", fieldsLine2[11]); assertEquals("LKTODEL2 stemmer ikke", "840", fieldsLine2[12]); assertEquals("LKTODEL3 er ikke tom", "3505", fieldsLine2[13]); assertEquals("LKTODEL6 er ikke tom", "", fieldsLine2[14]); assertEquals("VALKODE er ikke tom", "", fieldsLine2[15]); assertEquals("ANTALL stemmer ikke", "1", fieldsLine2[16]); assertEquals("SATS stemmer ikke", "900", fieldsLine2[17]); String[] fieldsLine3 = lines[3].split("\t"); assertEquals("BREAK er ikke tom", "", fieldsLine3[0]); assertEquals("FORETAK er ikke MET", "MET", fieldsLine3[1]); assertEquals("RESKNR/kunnenr er ikke 1", "1", fieldsLine3[2]); assertEquals("PERIODE stemmer ikke", "1601", fieldsLine3[3]); assertEquals("BILDATO stemmer ikke", "20161601", fieldsLine3[4]); assertEquals("FORDATO er ikke tom", "", fieldsLine3[5]); assertEquals("BETBET er ikke tom", "", fieldsLine3[6]); assertEquals("VARREF stemmer ikke", "Leif/222", fieldsLine3[7]); assertEquals("KUNREF stemmer ikke", "PO1", fieldsLine3[8]); assertEquals("ORDRE/metref stemmer ikke", "MET1", fieldsLine3[9]); assertEquals("VARENR stemmer ikke", "", fieldsLine3[10]); assertEquals("TEXT stemmer ikke", "Varsel for P1 fra 20151201 til 20151231", fieldsLine3[11]); assertEquals("LKTODEL2 stemmer ikke", "840", fieldsLine3[12]); assertEquals("LKTODEL3 er ikke tom", "80111", fieldsLine3[13]); assertEquals("LKTODEL6 er ikke tom", "", fieldsLine3[14]); assertEquals("VALKODE er ikke tom", "", fieldsLine3[15]); assertEquals("ANTALL stemmer ikke", "14", fieldsLine3[16]); assertEquals("SATS stemmer ikke", "250", fieldsLine3[17]); } @Test public void testGenerateInvoiceLines(){ InvoiceGeneratorService service = new InvoiceGeneratorService(fakeUser); InvoiceData invoiceData = new InvoiceData(); invoiceData.filename = "abc"; invoiceData.forecasts = new ForecastSearchResult[1]; ForecastSearchResult forecastSearchResult = new ForecastSearchResult(); forecastSearchResult.customer_contactname = "Kundens kontaktnavn"; forecastSearchResult.customer_name = "Kundens navn"; forecastSearchResult.custref_contractnum = "Kundens kontraktsnummer"; forecastSearchResult.custref_email = "Kundens epost"; forecastSearchResult.custref_po_calloff = "Kundens PO"; forecastSearchResult.end_date = new DateTime(2016,2,18,12,0,0).toDate(); forecastSearchResult.invoiced = false; forecastSearchResult.met_ref ="1234321"; forecastSearchResult.position_alias ="Kundens navn på posisjonen"; forecastSearchResult.position_name ="METS navn på posisjonen"; forecastSearchResult.produced_forecasts = 14; forecastSearchResult.start_date = new DateTime(2016,2,4,12,0,0).toDate(); invoiceData.forecasts[0] = forecastSearchResult; DateTime now = new DateTime(2016,2,28,12,32); service.setNow(now); List<InvoiceLine> invoiceLines = service.generateInvoiceLines(invoiceData, "Leif/222"); assertNotNull("InvoiceLines is null", invoiceLines); assertEquals("Antall invoiceLines stememr ikke",2,invoiceLines.size()); InvoiceLine oppfordringsLinje = invoiceLines.get(0); assertEquals("Brudd er ikke tomt","",oppfordringsLinje.brudd); SimpleDateFormat sdfBilldate = new SimpleDateFormat("yyyyddMM"); String expectedBilDato = sdfBilldate.format(service.getNow().toDate()); assertEquals("Bildato stemmer ikke", expectedBilDato,oppfordringsLinje.bildato); assertEquals("Foretak stemmer ikke","MET",oppfordringsLinje.foretak); assertEquals("kunref stemmer ikke","121212123",oppfordringsLinje.kunref); assertEquals("lktodel2 stemmer ikke","",oppfordringsLinje.lktodel2); assertEquals("lktodel3 stemmer ikke","",oppfordringsLinje.lktodel3); assertEquals("ordre stemmer ikke","1234321",oppfordringsLinje.ordre); assertEquals("periode stemmer ikke","1602",oppfordringsLinje.periode); assertEquals("resknr stemmer ikke","3",oppfordringsLinje.resknr); assertEquals("tekst stemmer ikke","Vær vennlig å oppgi fakturanummer ved betaling",oppfordringsLinje.tekst); assertEquals("varenr stemmer ikke","T",oppfordringsLinje.varenr); assertEquals("varref stemmer ikke","Leif/222",oppfordringsLinje.varref); InvoiceLine varselLinje = invoiceLines.get(1); assertEquals("Brudd er ikke tomt","",varselLinje.brudd); assertEquals("Bildato stemmer ikke", expectedBilDato,varselLinje.bildato); assertEquals("Foretak stemmer ikke","MET",varselLinje.foretak); assertEquals("kunref stemmer ikke","121212123",varselLinje.kunref); assertEquals("lktodel2 stemmer ikke","K2 verdi",varselLinje.lktodel2); assertEquals("lktodel3 stemmer ikke","K3 verdi",varselLinje.lktodel3); assertEquals("ordre stemmer ikke","1234321",varselLinje.ordre); assertEquals("periode stemmer ikke","1602",varselLinje.periode); assertEquals("resknr stemmer ikke","3",varselLinje.resknr); SimpleDateFormat sdfPeriode = new SimpleDateFormat("yyMM"); String periode = sdfPeriode.format(service.getNow().toDate()); String expectedText = "Varsel for Echofish fom. " + periode + " tom. " + periode; assertEquals("tekst stemmer ikke",expectedText,varselLinje.tekst); assertEquals("varenr stemmer ikke","",varselLinje.varenr); assertEquals("varref stemmer ikke","Leif/222",varselLinje.varref); } @Test public void testMarkForecastsAsBilled(){ ForecastModel forecastModel = ForecastModel.find.byId(1L); assertEquals("forecast er allerede markert som fakturert",false,forecastModel.invoiced); boolean forecastFound = false; ForecastService forecastService = new ForecastService(fakeUser); ForecastSearchParams params = new ForecastSearchParams(); List<models.ForecastSearchResult> searchResults = forecastService.search(params); assertNotNull("search result : null", searchResults); assertEquals("Feil antall varsler i søk",2,searchResults.size()); InvoiceGeneratorService service = new InvoiceGeneratorService(fakeUser); ForecastSearchResultMapper mapper = new ForecastSearchResultMapper(); List<ForecastSearchResult> apiSearchResults = mapper.mapToApi(searchResults); service.markForecastsAsBilled(apiSearchResults.toArray(new ForecastSearchResult[searchResults.size()])); for (ForecastSearchResult apiSearchResult : apiSearchResults) { List<ForecastModel> models = ForecastModel.findByMetrefAndDateRange(apiSearchResult.met_ref, apiSearchResult.start_date, apiSearchResult.end_date); assertNotNull("models er null", models); assertEquals("Feil antall forecatsModel",1,models.size()); for (ForecastModel model : models) { if ( model.equals(forecastModel)) { assertEquals("model.invoiced er ikke riktig", true, model.invoiced); forecastFound = true; } } } assertEquals("Varsel ble ikke funnet",true,forecastFound); } }