Skip to content

Commit ab5e2ea

Browse files
committed
add detailedMatchStatus field
1 parent 36f43b5 commit ab5e2ea

4 files changed

Lines changed: 36 additions & 2 deletions

File tree

api-models/src/main/scala/com/gu/mobile.notifications.client/models/Payloads.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ object FootballMatchStatusPayload {
193193
"eventId" -> o.eventId,
194194
"kickOffTimestamp" -> o.kickOffTimestamp,
195195
"lineupsAvailable" -> o.lineupsAvailable,
196+
"detailedMatchStatus" -> o.detailedMatchStatus,
196197
"debug" -> o.debug
197198
)
198199
}
@@ -225,6 +226,7 @@ case class FootballMatchStatusPayload(
225226
eventId: String,
226227
kickOffTimestamp: Option[Long] = None,
227228
lineupsAvailable: Option[Boolean] = None,
229+
detailedMatchStatus: Option[String] = None,
228230
debug: Boolean,
229231
dryRun: Option[Boolean]
230232
) extends NotificationPayload with derivedId {

common/src/main/scala/models/Notification.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ case class FootballMatchStatusNotification(
160160
matchStatus: String,
161161
eventId: String,
162162
kickOffTimestamp: Option[Long] = None,
163+
lineupsAvailable: Option[Boolean] = None,
164+
detailedMatchStatus: Option[String] = None,
163165
debug: Boolean,
164166
dryRun: Option[Boolean]
165167
) extends Notification

football/src/main/scala/com/gu/mobile/notifications/football/notificationbuilders/MatchStatusNotificationBuilder.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import java.net.URI
44
import java.util.UUID
55
import com.gu.mobile.notifications.client.models.Importance.{Importance, Major, Minor}
66
import com.gu.mobile.notifications.client.models._
7+
import com.gu.mobile.notifications.client.models.liveActitivites.MatchStatus
78
import com.gu.mobile.notifications.football.models.{Dismissal, FootballMatchEvent, FullTime, Goal, HalfTime, KickOff, PenaltyShootoutKick, PenaltyShootoutScore, RedCards, Score, SecondHalf}
89
import pa.{MatchDay, MatchDayTeam}
910

@@ -70,13 +71,23 @@ class MatchStatusNotificationBuilder(mapiHost: String) {
7071
eventId = UUID.nameUUIDFromBytes(triggeringEvent.eventId.getBytes).toString,
7172
kickOffTimestamp = Some(matchInfo.date.toEpochSecond),
7273
lineupsAvailable = Some(matchInfo.lineupsAvailable),
74+
detailedMatchStatus = Some(detailedMatchStatus(triggeringEvent, matchInfo.matchStatus)),
7375
debug = false,
7476
dryRun = None
7577
)
7678
}
7779

7880
def transformTeamName(name: String): String = name.replace(" Ladies", "")
7981

82+
private def detailedMatchStatus(triggeringEvent: FootballMatchEvent, paStatus: String): String =
83+
triggeringEvent match {
84+
case _: KickOff => "FIRST_HALF"
85+
case _: HalfTime => "HALF_TIME"
86+
case _: SecondHalf => "SECOND_HALF"
87+
case _: FullTime => "FULL_TIME"
88+
case _ => MatchStatus.fromString(paStatus).status
89+
}
90+
8091
private def goalDescription(goal: Goal) = {
8192
val extraInfo = {
8293
val goalTypeInfo = condOpt(goal.goalType) {

football/src/test/scala/com/gu/mobile/notifications/football/notificationbuilders/MatchStatusNotificationBuilderSpec.scala

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import java.util.UUID
77
import com.gu.mobile.notifications.client.models.Importance.{Major, Minor}
88
import com.gu.mobile.notifications.client.models._
99
import com.gu.mobile.notifications.football.lib.SyntheticMatchEventGenerator
10-
import com.gu.mobile.notifications.football.models.{Dismissal, FootballMatchEvent, Goal, GoalContext, Score}
10+
import com.gu.mobile.notifications.football.models.{Dismissal, FootballMatchEvent, Goal, GoalContext, KickOff, Score}
1111
import org.specs2.mutable.Specification
1212
import org.specs2.specification.Scope
1313
import pa.{Competition, MatchDay, MatchDayTeam, Parser, Round, Stage, Venue}
@@ -49,11 +49,30 @@ class MatchStatusNotificationBuilderSpec extends Specification {
4949
matchStatus = "1st",
5050
kickOffTimestamp = Some(ZonedDateTime.parse("2000-01-01T00:00:00Z").toEpochSecond),
5151
lineupsAvailable = Some(false),
52+
detailedMatchStatus = Some("FIRST_HALF"),
5253
debug = false,
5354
dryRun = None
5455
)
5556
}
5657

58+
"Include detailedMatchStatus derived from triggering event type" in new MatchEventsContext {
59+
val kickOff = KickOff("")
60+
val notification = builder.build(kickOff, matchInfo.copy(matchStatus = "Fixture"), List.empty, None)
61+
notification.detailedMatchStatus shouldEqual Some("FIRST_HALF")
62+
}
63+
64+
"Include detailedMatchStatus from PA status when event type has no override" in new MatchEventsContext {
65+
val matchInPenalties = matchInfo.copy(matchStatus = "PT")
66+
val notification = builder.build(baseGoal, matchInPenalties, List.empty, None)
67+
notification.detailedMatchStatus shouldEqual Some("PENALTIES")
68+
}
69+
70+
"Include detailedMatchStatus for extra time half time" in new MatchEventsContext {
71+
val matchInETHT = matchInfo.copy(matchStatus = "ETHT")
72+
val notification = builder.build(baseGoal, matchInETHT, List.empty, None)
73+
notification.detailedMatchStatus shouldEqual Some("EXTRA_TIME_HALF_TIME")
74+
}
75+
5776
"Include lineupsAvailable from matchInfo when false" in new MatchEventsContext {
5877
val notification = builder.build(baseGoal, matchInfo, List.empty, None)
5978
notification.lineupsAvailable shouldEqual Some(false)
@@ -110,7 +129,7 @@ class MatchStatusNotificationBuilderSpec extends Specification {
110129
previewAvailable = false,
111130
reportAvailable = false,
112131
lineupsAvailable = false,
113-
matchStatus = "1st",
132+
matchStatus = "KO",
114133
attendance = None,
115134
homeTeam = home,
116135
awayTeam = away,

0 commit comments

Comments
 (0)