Skip to content

Commit e52d090

Browse files
committed
use laziness for session test kits to support cases where configuration needs to be loaded dynamically (e.g. if dependent on dynamic ports for containers)
1 parent 4d5e244 commit e52d090

File tree

12 files changed

+46
-25
lines changed

12 files changed

+46
-25
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ ThisBuild / organization := "app.softnetwork"
88

99
name := "generic-persistence-api"
1010

11-
ThisBuild / version := "0.7.2"
11+
ThisBuild / version := "0.7.3"
1212

1313
ThisBuild / scalaVersion := "2.12.18"
1414

core/src/main/scala/app/softnetwork/persistence/query/JsonProvider.scala

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -167,25 +167,46 @@ trait JsonProvider[T <: Timestamped] extends ExternalPersistenceProvider[T] {
167167
} match {
168168
case Success(value) if value.uuid != uuid => // do nothing
169169
case Success(value) if value.uuid == uuid && value.state.isDefined || value.deleted =>
170-
lastMatchingLine = value.state // return the state
170+
if(value.deleted){
171+
lastMatchingLine = None
172+
}
173+
else{
174+
lastMatchingLine = value.state // return the state
175+
}
171176
case _ =>
172-
serialization.read[Map[String, Any]](line).get("state") match {
173-
case Some(updated: Map[String, Any]) =>
174-
lastMatchingLine match {
175-
case Some(l)
176-
if updated
177-
.get("lastUpdated")
178-
.map(lu => Instant.parse(lu.toString))
179-
.getOrElse(Instant.MIN)
180-
.isAfter(l.lastUpdated) => // update the state
181-
Try(updateCaseClass(l, updated)) match {
182-
case Success(updated: T) =>
183-
lastMatchingLine = Some(updated)
177+
val parsed = serialization.read[Map[String, Any]](line)
178+
val _uuid = parsed.get("uuid") match {
179+
case Some(u: String) => u
180+
case _ => ""
181+
}
182+
if (uuid == _uuid) {
183+
val deleted = parsed.get("deleted") match {
184+
case Some(d) => d.toString.toBoolean
185+
case _ => false
186+
}
187+
if(deleted){
188+
lastMatchingLine = None
189+
}
190+
else{
191+
parsed.get("state") match {
192+
case Some(updated: Map[String, Any]) =>
193+
lastMatchingLine match {
194+
case Some(l)
195+
if updated
196+
.get("lastUpdated")
197+
.map(lu => Instant.parse(lu.toString))
198+
.getOrElse(Instant.MIN)
199+
.isAfter(l.lastUpdated) => // update the state
200+
Try(updateCaseClass(l, updated)) match {
201+
case Success(updated: T) =>
202+
lastMatchingLine = Some(updated)
203+
case _ =>
204+
}
184205
case _ =>
185206
}
186207
case _ =>
187208
}
188-
case _ =>
209+
}
189210
}
190211
}
191212
}

project/Versions.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,5 @@ object Versions {
5050

5151
val akkaPersistenceCassandra = "1.0.6"
5252

53-
val testContainers = "1.18.0"
53+
val testContainers = "1.20.6"
5454
}

session/testkit/src/main/scala/app/softnetwork/session/scalatest/CookieSessionTestKit.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ trait CookieSessionTestKit[T <: SessionData with SessionDataDecorator[T]]
1212

1313
def cookieConfig: CookieConfig
1414

15-
final override val sessionHeaderName: String = cookieConfig.name
15+
final override lazy val sessionHeaderName: String = cookieConfig.name
1616

1717
}

session/testkit/src/main/scala/app/softnetwork/session/scalatest/HeaderSessionTestKit.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ trait HeaderSessionTestKit[T <: SessionData with SessionDataDecorator[T]]
1313

1414
def headerConfig: HeaderConfig
1515

16-
final override val sessionHeaderName: String = headerConfig.sendToClientHeaderName
16+
final override lazy val sessionHeaderName: String = headerConfig.sendToClientHeaderName
1717

1818
final override def mapRawHeader: RawHeader => Option[RawHeader] = raw =>
1919
if (raw.name == manager.config.sessionHeaderConfig.sendToClientHeaderName)

session/testkit/src/main/scala/app/softnetwork/session/scalatest/OneOffCookieSessionTestKit.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ trait OneOffCookieSessionTestKit[T <: SessionData with SessionDataDecorator[T]]
1212
with OneOffSessionTestKit[T] {
1313
_: Suite with ApiRoutes with SessionMaterials[T] =>
1414

15-
override def cookieConfig: CookieConfig = manager.config.sessionCookieConfig
15+
override lazy val cookieConfig: CookieConfig = manager.config.sessionCookieConfig
1616

1717
override protected val sessionType: Session.SessionType = Session.SessionType.OneOffCookie
1818

session/testkit/src/main/scala/app/softnetwork/session/scalatest/OneOffHeaderSessionTestKit.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ trait OneOffHeaderSessionTestKit[T <: SessionData with SessionDataDecorator[T]]
1212
with OneOffSessionTestKit[T] {
1313
_: Suite with ApiRoutes with SessionMaterials[T] =>
1414

15-
override def headerConfig: HeaderConfig = manager.config.sessionHeaderConfig
15+
override lazy val headerConfig: HeaderConfig = manager.config.sessionHeaderConfig
1616

1717
override protected val sessionType: Session.SessionType = Session.SessionType.OneOffHeader
1818

session/testkit/src/main/scala/app/softnetwork/session/scalatest/RefreshableCookieSessionTestKit.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ trait RefreshableCookieSessionTestKit[T <: SessionData with SessionDataDecorator
1212
with RefreshableSessionTestKit[T] {
1313
_: Suite with ApiRoutes with SessionMaterials[T] =>
1414

15-
override def cookieConfig: CookieConfig = manager.config.refreshTokenCookieConfig
15+
override lazy val cookieConfig: CookieConfig = manager.config.refreshTokenCookieConfig
1616

1717
override protected val sessionType: Session.SessionType = Session.SessionType.RefreshableCookie
1818

session/testkit/src/main/scala/app/softnetwork/session/scalatest/RefreshableHeaderSessionTestKit.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ trait RefreshableHeaderSessionTestKit[T <: SessionData with SessionDataDecorator
1212
with RefreshableSessionTestKit[T] {
1313
_: Suite with ApiRoutes with SessionMaterials[T] =>
1414

15-
override def headerConfig: HeaderConfig = manager.config.refreshTokenHeaderConfig
15+
override lazy val headerConfig: HeaderConfig = manager.config.refreshTokenHeaderConfig
1616

1717
override protected val sessionType: Session.SessionType = Session.SessionType.RefreshableHeader
1818

session/testkit/src/main/scala/app/softnetwork/session/scalatest/SessionEndpointsRoutes.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ trait SessionEndpointsRoutes[T <: SessionData with SessionDataDecorator[T]] exte
1313
self: SessionTestKit[T] with SessionMaterials[T] =>
1414
def sessionServiceEndpoints: ActorSystem[_] => SessionEndpointsRoute[T] = sys =>
1515
new SessionEndpointsRoute[T] with SessionMaterials[T] {
16-
override implicit def sessionConfig: SessionConfig = self.sessionConfig
16+
override implicit lazy val sessionConfig: SessionConfig = self.sessionConfig
1717
override implicit def manager(implicit
1818
sessionConfig: SessionConfig,
1919
companion: SessionDataCompanion[T]

0 commit comments

Comments
 (0)