Skip to content

Commit 5a2a950

Browse files
committed
Bug Fix: UpdateFilingStatus now only updates the fields it should
Previously, UpdateFilingStatus would fully replace a Filing in the filing State with a new one. This meant it was possible to update filing period or institutionID, which should not be updated.
1 parent 907be1f commit 5a2a950

File tree

3 files changed

+41
-37
lines changed

3 files changed

+41
-37
lines changed

persistence/src/main/scala/hmda/persistence/institutions/FilingPersistence.scala

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ object FilingPersistence {
1212
val name = "filings"
1313

1414
case class CreateFiling(filing: Filing) extends Command
15-
case class UpdateFilingStatus(filing: Filing) extends Command
15+
case class UpdateFilingStatus(period: String, status: FilingStatus) extends Command
1616
case class GetFilingByPeriod(period: String) extends Command
1717

1818
def props(institutionId: String): Props = Props(new FilingPersistence(institutionId))
@@ -59,27 +59,20 @@ class FilingPersistence(institutionId: String) extends HmdaPersistentActor {
5959
log.warning(s"Could not create Filing. Filing period ${f.period} already exists for institution $institutionId.")
6060
}
6161

62-
case UpdateFilingStatus(modified) =>
63-
if (state.filings.map(x => x.period).contains(modified.period)) {
64-
val start = if (modified.status == InProgress) {
65-
System.currentTimeMillis
66-
} else {
67-
modified.start
68-
}
69-
val end = if (modified.status == Completed) {
70-
System.currentTimeMillis
71-
} else {
72-
modified.end
73-
}
74-
val updatedFiling = modified.copy(start = start, end = end)
75-
persist(FilingStatusUpdated(updatedFiling)) { e =>
76-
log.debug(s"persisted: $updatedFiling")
77-
updateState(e)
78-
sender() ! Some(updatedFiling)
79-
}
80-
} else {
81-
sender() ! None
82-
log.warning(s"Period does not exist. Could not update $modified")
62+
case UpdateFilingStatus(period, newStatus) =>
63+
state.filings.find(f => f.period == period) match {
64+
case Some(filing) =>
65+
val startTime = if (newStatus == InProgress) System.currentTimeMillis else filing.start
66+
val endTime = if (newStatus == Completed) System.currentTimeMillis else filing.end
67+
val updatedFiling = filing.copy(status = newStatus, start = startTime, end = endTime)
68+
persist(FilingStatusUpdated(updatedFiling)) { e =>
69+
log.debug(s"persisted: $updatedFiling")
70+
updateState(e)
71+
sender() ! Some(updatedFiling)
72+
}
73+
case None =>
74+
sender() ! None
75+
log.warning(s"Could not update filing status. Institution $institutionId, filing period $period")
8376
}
8477

8578
case GetFilingByPeriod(period) =>

persistence/src/main/scala/hmda/persistence/processing/SubmissionManager.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,8 @@ class SubmissionManager(submissionId: SubmissionId) extends HmdaActor {
166166
private def updateFilingStatus(filingStatus: FilingStatus) = {
167167
for {
168168
p <- filingPersistence
169-
f <- (p ? GetFilingByPeriod(period)).mapTo[Filing]
170169
} yield {
171-
p ? UpdateFilingStatus(f.copy(status = filingStatus))
170+
p ? UpdateFilingStatus(period, filingStatus)
172171
}
173172
}
174173

persistence/src/test/scala/hmda/persistence/institutions/FilingPersistenceSpec.scala

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package hmda.persistence.institutions
33
import akka.testkit.TestProbe
44
import hmda.model.fi._
55
import hmda.persistence.messages.CommonMessages.GetState
6-
import hmda.persistence.demo.DemoData
76
import hmda.persistence.institutions.FilingPersistence._
87
import hmda.persistence.model.ActorSpec
98

@@ -26,15 +25,6 @@ class FilingPersistenceSpec extends ActorSpec {
2625
probe.send(filingsActor, GetState)
2726
probe.expectMsg(filings.reverse)
2827
}
29-
"be able to change their status" in {
30-
val filing = DemoData.testFilings.head
31-
val modified = filing.copy(status = Cancelled)
32-
probe.send(filingsActor, UpdateFilingStatus(modified))
33-
probe.expectMsg(Some(modified))
34-
probe.send(filingsActor, GetFilingByPeriod(filing.period))
35-
probe.expectMsg(modified)
36-
}
37-
3828
"return None when persisting a filing period that already exists" in {
3929
val f1 = Filing("2018", "12345", Completed, true, 1483287071000L, 1514736671000L)
4030
probe.send(filingsActor, CreateFiling(f1))
@@ -44,12 +34,34 @@ class FilingPersistenceSpec extends ActorSpec {
4434
probe.send(filingsActor, CreateFiling(f2))
4535
probe.expectMsg(None)
4636
}
37+
}
4738

48-
"return None for nonexistent period" in {
49-
val f = Filing("2006", "12345", Cancelled, false, 1483287071000L, 1514736671000L)
50-
probe.send(filingsActor, UpdateFilingStatus(f))
39+
"UpdateFilingStatus" must {
40+
"update status of filing for given period" in {
41+
val expected = sample1.copy(status = Cancelled)
42+
probe.send(filingsActor, UpdateFilingStatus("2016", Cancelled))
43+
probe.expectMsg(Some(expected))
44+
probe.send(filingsActor, GetFilingByPeriod("2016"))
45+
probe.expectMsg(expected)
46+
}
47+
"return None for nonexistent filing period" in {
48+
probe.send(filingsActor, UpdateFilingStatus("2006", InProgress))
5149
probe.expectMsg(None)
5250
}
51+
"update start and end timestamp, if necessary" in {
52+
probe.send(filingsActor, UpdateFilingStatus("2017", InProgress))
53+
val inProg = probe.expectMsgType[Option[Filing]].get
54+
inProg.status mustBe InProgress
55+
val startTime = inProg.start
56+
startTime must be > 0L
57+
inProg.end mustBe 0L
58+
59+
probe.send(filingsActor, UpdateFilingStatus("2017", Completed))
60+
val comp = probe.expectMsgType[Option[Filing]].get
61+
comp.status mustBe Completed
62+
comp.start mustBe startTime
63+
comp.end must be > 0L
64+
}
5365
}
5466

5567
}

0 commit comments

Comments
 (0)