From 4ef26b2cc15dd8608b82bb6a559a042e5a647cca Mon Sep 17 00:00:00 2001 From: Kelvin Chappell Date: Wed, 28 Aug 2019 15:25:20 +0100 Subject: [PATCH] Move holiday-stop credit calculation (#392) Move holiday-stop credit calculation --- build.sbt | 20 +++++++++++--- handlers/holiday-stop-processor/build.sbt | 9 +------ .../com/gu/holidaystopprocessor/Handler.scala | 1 + .../HolidayStopProcess.scala | 4 ++- .../NextBillingPeriodStartDate.scala | 2 ++ .../holidaystopprocessor/ProcessResult.scala | 1 + .../gu/holidaystopprocessor/Salesforce.scala | 1 + .../holidaystopprocessor/StandaloneApp.scala | 2 ++ .../ErrorHandlingSpec.scala | 4 ++- ...st.scala => HolidayCreditUpdateTest.scala} | 5 ++-- .../HolidayStopProcessTest.scala | 5 ++-- .../com/gu/holiday_stops}/AccessToken.scala | 2 +- .../scala/com/gu/holiday_stops}/Config.scala | 3 ++- .../gu/holiday_stops/CreditCalculator.scala | 16 ++++++++++++ .../CurrentGuardianWeeklySubscription.scala | 4 ++- .../com/gu/holiday_stops}/ExtendedTerm.scala | 2 +- .../com/gu/holiday_stops}/Failures.scala | 2 +- .../com/gu/holiday_stops}/HolidayCredit.scala | 2 +- .../holiday_stops}/HolidayCreditUpdate.scala | 4 ++- .../com/gu/holiday_stops}/HolidayStop.scala | 2 +- .../com/gu/holiday_stops}/Subscription.scala | 26 +++++-------------- .../scala/com/gu/holiday_stops}/Zuora.scala | 2 +- .../holiday_stops}/ZuoraStatusResponse.scala | 2 +- .../com/gu/holiday_stops}/Fixtures.scala | 4 +-- .../gu/holiday_stops}/HolidayCreditSpec.scala | 2 +- .../gu/holiday_stops}/HolidayCreditTest.scala | 2 +- .../gu/holiday_stops}/SubscriptionTest.scala | 2 +- project/Dependencies.scala | 10 ++++++- 28 files changed, 89 insertions(+), 52 deletions(-) rename handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/{SubscriptionUpdateTest.scala => HolidayCreditUpdateTest.scala} (97%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/AccessToken.scala (56%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/Config.scala (99%) create mode 100644 lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CreditCalculator.scala rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/CurrentGuardianWeeklySubscription.scala (99%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/ExtendedTerm.scala (95%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/Failures.scala (95%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/HolidayCredit.scala (96%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/HolidayCreditUpdate.scala (96%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/HolidayStop.scala (95%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/Subscription.scala (62%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/Zuora.scala (98%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/ZuoraStatusResponse.scala (82%) rename {handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/test/scala/com/gu/holiday_stops}/Fixtures.scala (98%) rename {handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/test/scala/com/gu/holiday_stops}/HolidayCreditSpec.scala (98%) rename {handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/test/scala/com/gu/holiday_stops}/HolidayCreditTest.scala (98%) rename {handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/test/scala/com/gu/holiday_stops}/SubscriptionTest.scala (98%) diff --git a/build.sbt b/build.sbt index 3f98cbc813..bd0b3b8276 100644 --- a/build.sbt +++ b/build.sbt @@ -94,8 +94,19 @@ lazy val `holiday-stops` = all(project in file("lib/holiday-stops")) testDep ) .settings( - libraryDependencies ++= Seq(okhttp3, scalaz, playJson, scalatest, playJsonExtensions) ++ logging -) + libraryDependencies ++= Seq( + okhttp3, + scalaz, + playJson, + scalatest, + scalaCheck, + playJsonExtensions, + circe, + circeParser, + sttp, + sttpCirce + ) ++ logging + ) lazy val restHttp = all(project in file("lib/restHttp")) .settings( @@ -245,7 +256,10 @@ lazy val `braze-to-salesforce-file-upload` = all(project in file("handlers/braze lazy val `holiday-stop-processor` = all(project in file("handlers/holiday-stop-processor")) .enablePlugins(RiffRaffArtifact) - .dependsOn(`holiday-stops`, effects) + .dependsOn( + `holiday-stops` % "compile->compile;test->test", + effects + ) lazy val `metric-push-api` = all(project in file("handlers/metric-push-api")) .enablePlugins(RiffRaffArtifact) diff --git a/handlers/holiday-stop-processor/build.sbt b/handlers/holiday-stop-processor/build.sbt index fbf8d20341..a4bbb8e2cf 100644 --- a/handlers/holiday-stop-processor/build.sbt +++ b/handlers/holiday-stop-processor/build.sbt @@ -12,17 +12,10 @@ riffRaffUploadManifestBucket := Option("riffraff-builds") riffRaffManifestProjectName := s"MemSub::Membership Admin::${name.value}" riffRaffArtifactResources += (file(s"handlers/${name.value}/cfn.yaml"), "cfn/cfn.yaml") -val sttpVersion = "1.5.17" - libraryDependencies ++= Seq( "io.github.mkotsur" %% "aws-lambda-scala" % "0.1.1", - "com.softwaremill.sttp" %% "core" % sttpVersion, - "com.softwaremill.sttp" %% "circe" % sttpVersion, - "io.circe" %% "circe-generic" % "0.11.1", "com.amazonaws" % "aws-java-sdk-s3" % "1.11.566", "org.slf4j" % "slf4j-api" % "1.7.25", "ch.qos.logback" % "logback-classic" % "1.2.3", - "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2", - "org.scalatest" %% "scalatest" % "3.0.7" % Test, - "org.scalacheck" %% "scalacheck" % "1.14.0" % Test + "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2" ) diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Handler.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Handler.scala index 4eb7d3aa78..3f151391b0 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Handler.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Handler.scala @@ -4,6 +4,7 @@ import java.time.LocalDate import cats.implicits._ import com.amazonaws.services.lambda.runtime.Context +import com.gu.holiday_stops.Config import io.circe.generic.auto._ import io.github.mkotsur.aws.handler.Lambda import io.github.mkotsur.aws.handler.Lambda._ diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStopProcess.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStopProcess.scala index 4e184aa51d..ae34110c35 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStopProcess.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStopProcess.scala @@ -1,7 +1,9 @@ package com.gu.holidaystopprocessor import java.time.LocalDate + import cats.implicits._ +import com.gu.holiday_stops._ import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail._ object HolidayStopProcess { @@ -65,7 +67,7 @@ object HolidayStopProcess { currentGuardianWeeklySubscription <- CurrentGuardianWeeklySubscription(subscription, guardianWeeklyProductRatePlanIds) nextInvoiceStartDate = NextBillingPeriodStartDate(currentGuardianWeeklySubscription) maybeExtendedTerm = ExtendedTerm(nextInvoiceStartDate, subscription) - holidayCredit = HolidayCredit(currentGuardianWeeklySubscription) + holidayCredit <- CreditCalculator.guardianWeeklyCredit(guardianWeeklyProductRatePlanIds)(subscription) holidayCreditUpdate <- HolidayCreditUpdate(holidayCreditProduct, subscription, stop.stoppedPublicationDate, nextInvoiceStartDate, maybeExtendedTerm, holidayCredit) _ <- if (subscription.hasHolidayStop(stop)) Right(()) else updateSubscription(subscription, holidayCreditUpdate) updatedSubscription <- getSubscription(stop.subscriptionName) diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/NextBillingPeriodStartDate.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/NextBillingPeriodStartDate.scala index 879729e55d..d20e8e2b63 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/NextBillingPeriodStartDate.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/NextBillingPeriodStartDate.scala @@ -2,6 +2,8 @@ package com.gu.holidaystopprocessor import java.time.LocalDate +import com.gu.holiday_stops.CurrentGuardianWeeklySubscription + /** * Holiday credit is applied to the next invoice on the first day of the next billing period. * diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ProcessResult.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ProcessResult.scala index 9b9214fc08..a188ce9f55 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ProcessResult.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ProcessResult.scala @@ -1,5 +1,6 @@ package com.gu.holidaystopprocessor +import com.gu.holiday_stops.{HolidayStop, OverallFailure, ZuoraHolidayWriteError} import com.typesafe.scalalogging.LazyLogging case class ProcessResult(holidayStopsToApply: List[HolidayStop], holidayStopResults: List[Either[ZuoraHolidayWriteError, HolidayStopResponse]], resultsToExport: List[HolidayStopResponse], overallFailure: Option[OverallFailure]) diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Salesforce.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Salesforce.scala index 7ae68c17cc..8b752feb2d 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Salesforce.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Salesforce.scala @@ -10,6 +10,7 @@ import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail._ import com.gu.util.resthttp.JsonHttp import scalaz.{-\/, \/-} import com.gu.holiday_stops.ActionCalculator.suspensionConstantsByProduct +import com.gu.holiday_stops.{OverallFailure, SalesforceHolidayWriteError} object Salesforce { diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/StandaloneApp.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/StandaloneApp.scala index 2f82cd6c3e..4d92076fa8 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/StandaloneApp.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/StandaloneApp.scala @@ -2,6 +2,8 @@ package com.gu.holidaystopprocessor import java.time.LocalDate +import com.gu.holiday_stops.Config + // This is just for functional testing locally. object StandaloneApp extends App { diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/ErrorHandlingSpec.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/ErrorHandlingSpec.scala index 351be5d83d..14371d52cc 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/ErrorHandlingSpec.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/ErrorHandlingSpec.scala @@ -1,8 +1,10 @@ package com.gu.holidaystopprocessor import java.time.LocalDate + import cats.implicits._ -import com.gu.holidaystopprocessor.Fixtures._ +import com.gu.holiday_stops.Fixtures._ +import com.gu.holiday_stops._ import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail.{HolidayStopRequestsDetail, ProductName, SubscriptionName} import org.scalatest._ diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionUpdateTest.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditUpdateTest.scala similarity index 97% rename from handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionUpdateTest.scala rename to handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditUpdateTest.scala index d0aa614e70..64c54c1ff3 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionUpdateTest.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditUpdateTest.scala @@ -2,10 +2,11 @@ package com.gu.holidaystopprocessor import java.time.LocalDate -import com.gu.holidaystopprocessor.Fixtures.config +import com.gu.holiday_stops.Fixtures.config +import com.gu.holiday_stops._ import org.scalatest.{EitherValues, FlatSpec, Matchers} -class SubscriptionUpdateTest extends FlatSpec with Matchers with EitherValues { +class HolidayCreditUpdateTest extends FlatSpec with Matchers with EitherValues { val guardianWeeklyProductRatePlanIds = Fixtures.config.guardianWeeklyProductRatePlanIds diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayStopProcessTest.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayStopProcessTest.scala index 995c085891..762bcc8a63 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayStopProcessTest.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayStopProcessTest.scala @@ -2,8 +2,9 @@ package com.gu.holidaystopprocessor import java.time.LocalDate -import com.gu.holidaystopprocessor.Fixtures.{config, mkSubscription} -import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail.{HolidayStopRequestsDetail, HolidayStopRequestsDetailChargeCode, HolidayStopRequestsDetailChargePrice, HolidayStopRequestsDetailId, ProductName, StoppedPublicationDate, SubscriptionName} +import com.gu.holiday_stops.Fixtures.{config, mkSubscription} +import com.gu.holiday_stops._ +import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail._ import org.scalatest.{EitherValues, FlatSpec, Matchers, OptionValues} class HolidayStopProcessTest extends FlatSpec with Matchers with EitherValues with OptionValues { diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/AccessToken.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/AccessToken.scala similarity index 56% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/AccessToken.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/AccessToken.scala index 0169fc3fea..cd8402ae12 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/AccessToken.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/AccessToken.scala @@ -1,3 +1,3 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops case class AccessToken(access_token: String) diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Config.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Config.scala similarity index 99% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Config.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Config.scala index b890a31df4..951dd407b0 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Config.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Config.scala @@ -1,8 +1,9 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import com.amazonaws.auth.profile.ProfileCredentialsProvider import com.amazonaws.regions.Regions.EU_WEST_1 import com.amazonaws.services.s3.AmazonS3Client +import com.gu.holiday_stops.OverallFailure import com.gu.salesforce.SalesforceAuthenticate.SFAuthConfig import io.circe.Decoder import io.circe.generic.auto._ diff --git a/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CreditCalculator.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CreditCalculator.scala new file mode 100644 index 0000000000..694652751f --- /dev/null +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CreditCalculator.scala @@ -0,0 +1,16 @@ +package com.gu.holiday_stops + +import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail.SubscriptionName + +object CreditCalculator { + + def guardianWeeklyCredit(config: Config, subscriptionName: SubscriptionName): Either[HolidayError, Double] = + for { + accessToken <- Zuora.accessTokenGetResponse(config.zuoraConfig) + subscription <- Zuora.subscriptionGetResponse(config, accessToken)(subscriptionName) + credit <- guardianWeeklyCredit(config.guardianWeeklyProductRatePlanIds)(subscription) + } yield credit + + def guardianWeeklyCredit(guardianWeeklyProductRatePlanIds: List[String])(subscription: Subscription): Either[ZuoraHolidayWriteError, Double] = + CurrentGuardianWeeklySubscription(subscription, guardianWeeklyProductRatePlanIds).map(HolidayCredit(_)) +} diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/CurrentGuardianWeeklySubscription.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CurrentGuardianWeeklySubscription.scala similarity index 99% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/CurrentGuardianWeeklySubscription.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CurrentGuardianWeeklySubscription.scala index 80a6cbdea4..5839400d22 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/CurrentGuardianWeeklySubscription.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CurrentGuardianWeeklySubscription.scala @@ -1,6 +1,7 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate + import scala.util.Try /** @@ -95,6 +96,7 @@ case class CurrentInvoicedPeriod( * attached to Guardian Weekly product that satisfies all of the CurrentGuardianWeeklyRatePlanPredicates. */ object CurrentGuardianWeeklySubscription { + def apply(subscription: Subscription, guardianWeeklyProductRatePlanIds: List[String]): Either[ZuoraHolidayWriteError, CurrentGuardianWeeklySubscription] = subscription .ratePlans diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ExtendedTerm.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ExtendedTerm.scala similarity index 95% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ExtendedTerm.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ExtendedTerm.scala index 87021f5cb4..91ef34d014 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ExtendedTerm.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ExtendedTerm.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate import java.time.temporal.ChronoUnit.DAYS diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Failures.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Failures.scala similarity index 95% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Failures.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Failures.scala index ebd76bc302..127a6b0ed1 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Failures.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Failures.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops sealed trait HolidayError { val reason: String diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCredit.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCredit.scala similarity index 96% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCredit.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCredit.scala index cb5c58d53f..52ab95d96c 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCredit.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCredit.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import scala.math.BigDecimal.RoundingMode diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCreditUpdate.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCreditUpdate.scala similarity index 96% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCreditUpdate.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCreditUpdate.scala index 155975732d..6863c7179b 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCreditUpdate.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCreditUpdate.scala @@ -1,7 +1,9 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate +import com.gu.holiday_stops + case class HolidayCreditUpdate( currentTerm: Option[Int], currentTermPeriodType: Option[String], diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStop.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayStop.scala similarity index 95% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStop.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayStop.scala index 08b7d5642b..29f9cc74a6 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStop.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayStop.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Subscription.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Subscription.scala similarity index 62% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Subscription.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Subscription.scala index aaaa08e788..a3d6e4f332 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Subscription.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Subscription.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate @@ -12,28 +12,18 @@ case class Subscription( ratePlans: List[RatePlan] ) { - val originalRatePlanCharge: Option[RatePlanCharge] = { - val chronologicallyOrderedRatePlans = ratePlans.sortBy { plan => - plan.ratePlanCharges.map(_.effectiveStartDate.toString).headOption.getOrElse("") - } - for { - ratePlan <- chronologicallyOrderedRatePlans.headOption - charge <- ratePlan.ratePlanCharges.headOption - } yield charge - } - def ratePlanCharge(stop: HolidayStop): Option[RatePlanCharge] = { def isMatchingPlan(plan: RatePlan): Boolean = plan.productName == "Discounts" def isMatchingCharge(charge: RatePlanCharge): Boolean = charge.name == "Holiday Credit" && - charge.HolidayStart__c.exists { start => - start.isEqual(stop.stoppedPublicationDate) || start.isBefore(stop.stoppedPublicationDate) - } && - charge.HolidayEnd__c.exists { end => - end.isEqual(stop.stoppedPublicationDate) || end.isAfter(stop.stoppedPublicationDate) - } + charge.HolidayStart__c.exists { start => + start.isEqual(stop.stoppedPublicationDate) || start.isBefore(stop.stoppedPublicationDate) + } && + charge.HolidayEnd__c.exists { end => + end.isEqual(stop.stoppedPublicationDate) || end.isAfter(stop.stoppedPublicationDate) + } val charges = for { plan <- ratePlans if isMatchingPlan(plan) @@ -63,5 +53,3 @@ case class RatePlanCharge( HolidayEnd__c: Option[LocalDate], processedThroughDate: Option[LocalDate], ) - - diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Zuora.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Zuora.scala similarity index 98% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Zuora.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Zuora.scala index 3ccb3f3bca..a918e5c646 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Zuora.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Zuora.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail.SubscriptionName import com.softwaremill.sttp._ diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ZuoraStatusResponse.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ZuoraStatusResponse.scala similarity index 82% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ZuoraStatusResponse.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ZuoraStatusResponse.scala index 24a3d05d9f..77efe39960 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ZuoraStatusResponse.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ZuoraStatusResponse.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops case class ZuoraStatusResponse( success: Boolean, diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/Fixtures.scala b/lib/holiday-stops/src/test/scala/com/gu/holiday_stops/Fixtures.scala similarity index 98% rename from handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/Fixtures.scala rename to lib/holiday-stops/src/test/scala/com/gu/holiday_stops/Fixtures.scala index 249970e521..c4ffa879ef 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/Fixtures.scala +++ b/lib/holiday-stops/src/test/scala/com/gu/holiday_stops/Fixtures.scala @@ -1,9 +1,9 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate import com.gu.salesforce.SalesforceAuthenticate.SFAuthConfig -import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequest._ +import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequest.{HolidayStopRequest, HolidayStopRequestActionedCount, HolidayStopRequestEndDate, HolidayStopRequestStartDate} import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail._ object Fixtures { diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditSpec.scala b/lib/holiday-stops/src/test/scala/com/gu/holiday_stops/HolidayCreditSpec.scala similarity index 98% rename from handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditSpec.scala rename to lib/holiday-stops/src/test/scala/com/gu/holiday_stops/HolidayCreditSpec.scala index 18ac40b694..92bb00f795 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditSpec.scala +++ b/lib/holiday-stops/src/test/scala/com/gu/holiday_stops/HolidayCreditSpec.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditTest.scala b/lib/holiday-stops/src/test/scala/com/gu/holiday_stops/HolidayCreditTest.scala similarity index 98% rename from handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditTest.scala rename to lib/holiday-stops/src/test/scala/com/gu/holiday_stops/HolidayCreditTest.scala index ecf7e8e371..9aa91f9295 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditTest.scala +++ b/lib/holiday-stops/src/test/scala/com/gu/holiday_stops/HolidayCreditTest.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import org.scalatest.{EitherValues, FlatSpec, Matchers} diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionTest.scala b/lib/holiday-stops/src/test/scala/com/gu/holiday_stops/SubscriptionTest.scala similarity index 98% rename from handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionTest.scala rename to lib/holiday-stops/src/test/scala/com/gu/holiday_stops/SubscriptionTest.scala index 92b5b1aefb..58cb017bdb 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionTest.scala +++ b/lib/holiday-stops/src/test/scala/com/gu/holiday_stops/SubscriptionTest.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 23cfe6c911..b31592ad6c 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -4,6 +4,9 @@ object Dependencies { val awsVersion = "1.11.574" + val circeVersion = "0.11.1" + val sttpVersion = "1.5.17" + val okhttp3 = "com.squareup.okhttp3" % "okhttp" % "3.9.1" val logging = Seq( "ch.qos.logback" % "logback-classic" % "1.2.3", @@ -12,11 +15,16 @@ object Dependencies { val scalaz = "org.scalaz" %% "scalaz-core" % "7.2.18" val playJson = "com.typesafe.play" %% "play-json" % "2.6.9" val playJsonExtensions = "ai.x" %% "play-json-extensions" % "0.30.1" - val scalatest = "org.scalatest" %% "scalatest" % "3.0.1" % "test" + val scalatest = "org.scalatest" %% "scalatest" % "3.0.1" % Test + val scalaCheck = "org.scalacheck" %% "scalacheck" % "1.14.0" % Test val jacksonDatabind = "com.fasterxml.jackson.core" % "jackson-databind" % "2.8.11.1" val awsS3 = "com.amazonaws" % "aws-java-sdk-s3" % awsVersion val awsSQS = "com.amazonaws" % "aws-java-sdk-sqs" % awsVersion val awsSES = "com.amazonaws" % "aws-java-sdk-ses" % awsVersion val awsLambda = "com.amazonaws" % "aws-lambda-java-core" % "1.2.0" val supportInternationalisation = "com.gu" %% "support-internationalisation" % "0.9" + val circe = "io.circe" %% "circe-generic" % circeVersion + val circeParser = "io.circe" %% "circe-parser" % circeVersion + val sttp = "com.softwaremill.sttp" %% "core" % sttpVersion + val sttpCirce = "com.softwaremill.sttp" %% "circe" % sttpVersion }