Release 0.9.11

change loggin, more tests, cosmetic changes
This commit is contained in:
2020-12-12 20:15:14 +03:00
parent d9cbb6cf00
commit 08f7f4571e
11 changed files with 39 additions and 13 deletions
+2 -1
View File
@@ -8,9 +8,10 @@
</root> </root>
<logger name="me.arcanis.ffxivbis" level="DEBUG" /> <logger name="me.arcanis.ffxivbis" level="DEBUG" />
<logger name="http" level="DEBUG"> <logger name="http" level="DEBUG" additivity="false">
<appender-ref ref="http" /> <appender-ref ref="http" />
</logger> </logger>
<logger name="slick" level="INFO" /> <logger name="slick" level="INFO" />
<logger name="org.flywaydb.core.internal" level="INFO" />
</configuration> </configuration>
@@ -17,7 +17,7 @@ import spray.json._
trait HttpHandler extends StrictLogging { this: JsonSupport => trait HttpHandler extends StrictLogging { this: JsonSupport =>
implicit def exceptionHandler: ExceptionHandler = ExceptionHandler { def exceptionHandler: ExceptionHandler = ExceptionHandler {
case ex: IllegalArgumentException => case ex: IllegalArgumentException =>
complete(StatusCodes.BadRequest, ErrorResponse(ex.getMessage)) complete(StatusCodes.BadRequest, ErrorResponse(ex.getMessage))
@@ -26,7 +26,7 @@ trait HttpHandler extends StrictLogging { this: JsonSupport =>
complete(StatusCodes.InternalServerError, ErrorResponse("unknown server error")) complete(StatusCodes.InternalServerError, ErrorResponse("unknown server error"))
} }
implicit def rejectionHandler: RejectionHandler = def rejectionHandler: RejectionHandler =
RejectionHandler.default RejectionHandler.default
.mapRejectionResponse { .mapRejectionResponse {
case response @ HttpResponse(_, _, entity: HttpEntity.Strict, _) => case response @ HttpResponse(_, _, entity: HttpEntity.Strict, _) =>
@@ -69,7 +69,7 @@ class BiSView(override val storage: ActorRef[Message],
def bisAction(playerId: PlayerId, piece: String, pieceType: String)(fn: Piece => Future[Unit]) = def bisAction(playerId: PlayerId, piece: String, pieceType: String)(fn: Piece => Future[Unit]) =
getPiece(playerId, piece, pieceType) match { getPiece(playerId, piece, pieceType) match {
case Some(item) => fn(item).map(_ => ()) case Some(item) => fn(item)
case _ => Future.failed(new Error(s"Could not construct piece from `$piece ($pieceType)`")) case _ => Future.failed(new Error(s"Could not construct piece from `$piece ($pieceType)`"))
} }
@@ -79,7 +79,7 @@ class BiSView(override val storage: ActorRef[Message],
bisAction(playerId, piece, pieceType)(addPieceBiS(playerId, _)) bisAction(playerId, piece, pieceType)(addPieceBiS(playerId, _))
case (Some(piece), Some(pieceType), "remove", _) => case (Some(piece), Some(pieceType), "remove", _) =>
bisAction(playerId, piece, pieceType)(removePieceBiS(playerId, _)) bisAction(playerId, piece, pieceType)(removePieceBiS(playerId, _))
case (_, _, "create", Some(link)) => putBiS(playerId, link).map(_ => ()) case (_, _, "create", Some(link)) => putBiS(playerId, link)
case _ => Future.failed(new Error(s"Could not perform $action")) case _ => Future.failed(new Error(s"Could not perform $action"))
} }
case _ => Future.failed(new Error(s"Could not construct player id from `$player`")) case _ => Future.failed(new Error(s"Could not construct player id from `$player`"))
@@ -70,8 +70,8 @@ class LootView(override val storage: ActorRef[Message])
PlayerId(partyId, player) match { PlayerId(partyId, player) match {
case Some(playerId) => (getPiece(playerId), action) match { case Some(playerId) => (getPiece(playerId), action) match {
case (Some(piece), "add") => addPieceLoot(playerId, piece, maybeFreeLoot).map(_ => ()) case (Some(piece), "add") => addPieceLoot(playerId, piece, maybeFreeLoot)
case (Some(piece), "remove") => removePieceLoot(playerId, piece).map(_ => ()) case (Some(piece), "remove") => removePieceLoot(playerId, piece)
case _ => Future.failed(new Error(s"Could not construct piece from `$maybePiece ($maybePieceType)`")) case _ => Future.failed(new Error(s"Could not construct piece from `$maybePiece ($maybePieceType)`"))
} }
case _ => Future.failed(new Error(s"Could not construct player id from `$player`")) case _ => Future.failed(new Error(s"Could not construct player id from `$player`"))
@@ -68,8 +68,8 @@ class PlayerView(override val storage: ActorRef[Message],
Player(-1, partyId, playerId.job, playerId.nick, BiS.empty, Seq.empty, maybeLink, maybePriority.getOrElse(0)) Player(-1, partyId, playerId.job, playerId.nick, BiS.empty, Seq.empty, maybeLink, maybePriority.getOrElse(0))
(action, maybePlayerId) match { (action, maybePlayerId) match {
case ("add", Some(playerId)) => addPlayer(player(playerId)).map(_ => ()) case ("add", Some(playerId)) => addPlayer(player(playerId))
case ("remove", Some(playerId)) => removePlayer(playerId).map(_ => ()) case ("remove", Some(playerId)) => removePlayer(playerId)
case _ => Future.failed(new Error(s"Could not perform $action with $nick ($job)")) case _ => Future.failed(new Error(s"Could not perform $action with $nick ($job)"))
} }
} }
@@ -68,10 +68,10 @@ class UserView(override val storage: ActorRef[Message])
action match { action match {
case "add" => (maybePassword, permission) match { case "add" => (maybePassword, permission) match {
case (Some(password), Some(permission)) => addUser(User(partyId, username, password, permission), isHashedPassword = false).map(_ => ()) case (Some(password), Some(permission)) => addUser(User(partyId, username, password, permission), isHashedPassword = false)
case _ => Future.failed(new Error(s"Could not construct permission/password from `$maybePermission`/`$maybePassword`")) case _ => Future.failed(new Error(s"Could not construct permission/password from `$maybePermission`/`$maybePassword`"))
} }
case "remove" => removeUser(partyId, username).map(_ => ()) case "remove" => removeUser(partyId, username)
case _ => Future.failed(new Error(s"Could not perform $action")) case _ => Future.failed(new Error(s"Could not perform $action"))
} }
} }
@@ -7,9 +7,10 @@ object PieceType {
case object Crafted extends PieceType case object Crafted extends PieceType
case object Tome extends PieceType case object Tome extends PieceType
case object Savage extends PieceType case object Savage extends PieceType
case object Artifact extends PieceType
lazy val available: Seq[PieceType] = lazy val available: Seq[PieceType] =
Seq(Crafted, Tome, Savage) Seq(Crafted, Tome, Savage, Artifact)
def withName(pieceType: String): PieceType = def withName(pieceType: String): PieceType =
available.find(_.toString.equalsIgnoreCase(pieceType)) match { available.find(_.toString.equalsIgnoreCase(pieceType)) match {
@@ -17,6 +17,7 @@ import scala.concurrent.duration.FiniteDuration
import scala.language.implicitConversions import scala.language.implicitConversions
object Implicits { object Implicits {
implicit def getBooleanFromOptionString(maybeYes: Option[String]): Boolean = maybeYes.map(_.toLowerCase) match { implicit def getBooleanFromOptionString(maybeYes: Option[String]): Boolean = maybeYes.map(_.toLowerCase) match {
case Some("yes" | "on") => true case Some("yes" | "on") => true
case _ => false case _ => false
@@ -19,10 +19,27 @@ object Fixtures {
Ring(pieceType = PieceType.Tome, Job.DNC, "right ring") Ring(pieceType = PieceType.Tome, Job.DNC, "right ring")
) )
) )
lazy val bis2: BiS = BiS(
Seq(
Weapon(pieceType = PieceType.Savage ,Job.DNC),
Head(pieceType = PieceType.Tome, Job.DNC),
Body(pieceType = PieceType.Savage, Job.DNC),
Hands(pieceType = PieceType.Tome, Job.DNC),
Waist(pieceType = PieceType.Tome, Job.DNC),
Legs(pieceType = PieceType.Savage, Job.DNC),
Feet(pieceType = PieceType.Tome, Job.DNC),
Ears(pieceType = PieceType.Savage, Job.DNC),
Neck(pieceType = PieceType.Savage, Job.DNC),
Wrist(pieceType = PieceType.Savage, Job.DNC),
Ring(pieceType = PieceType.Tome, Job.DNC, "left ring"),
Ring(pieceType = PieceType.Savage, Job.DNC, "right ring")
)
)
lazy val link: String = "https://ffxiv.ariyala.com/19V5R" lazy val link: String = "https://ffxiv.ariyala.com/19V5R"
lazy val link2: String = "https://ffxiv.ariyala.com/1A0WM" lazy val link2: String = "https://ffxiv.ariyala.com/1A0WM"
lazy val link3: String = "https://etro.gg/gearset/26a67536-b4ce-4adc-a46a-f70e348bb138" lazy val link3: String = "https://etro.gg/gearset/26a67536-b4ce-4adc-a46a-f70e348bb138"
lazy val link4: String = "https://etro.gg/gearset/865fc886-994f-4c28-8fc1-4379f160a916"
lazy val lootWeapon: Piece = Weapon(pieceType = PieceType.Tome, Job.AnyJob) lazy val lootWeapon: Piece = Weapon(pieceType = PieceType.Tome, Job.AnyJob)
lazy val lootBody: Piece = Body(pieceType = PieceType.Savage, Job.AnyJob) lazy val lootBody: Piece = Body(pieceType = PieceType.Savage, Job.AnyJob)
@@ -29,5 +29,11 @@ class BisProviderTest extends ScalaTestWithActorTestKit(Settings.withRandomDatab
probe.expectMessage(askTimeout, Fixtures.bis) probe.expectMessage(askTimeout, Fixtures.bis)
} }
"get best in slot set (etro 2)" in {
val probe = testKit.createTestProbe[BiS]()
provider ! DownloadBiS(Fixtures.link4, Job.DNC, probe.ref)
probe.expectMessage(askTimeout, Fixtures.bis2)
}
} }
} }
+1 -1
View File
@@ -1 +1 @@
version := "0.9.10" version := "0.9.11"