mirror of
https://github.com/arcan1s/ffxivbis.git
synced 2025-07-17 07:39:59 +00:00
moar tests
This commit is contained in:
@ -20,7 +20,7 @@ class BiSHelper(storage: ActorRef, ariyala: ActorRef) extends AriyalaHelper(ariy
|
||||
|
||||
def addPieceBiS(playerId: PlayerId, piece: Piece)
|
||||
(implicit executionContext: ExecutionContext, timeout: Timeout): Future[Int] =
|
||||
(storage ? DatabaseBiSHandler.AddPieceToBis(playerId, piece)).mapTo[Int]
|
||||
(storage ? DatabaseBiSHandler.AddPieceToBis(playerId, piece.withJob(playerId.job))).mapTo[Int]
|
||||
|
||||
def bis(partyId: String, playerId: Option[PlayerId])
|
||||
(implicit executionContext: ExecutionContext, timeout: Timeout): Future[Seq[Player]] =
|
||||
@ -28,7 +28,9 @@ class BiSHelper(storage: ActorRef, ariyala: ActorRef) extends AriyalaHelper(ariy
|
||||
|
||||
def putBiS(playerId: PlayerId, link: String)
|
||||
(implicit executionContext: ExecutionContext, timeout: Timeout): Future[Unit] =
|
||||
downloadBiS(link, playerId.job).map(_.pieces.map(addPieceBiS(playerId, _)))
|
||||
downloadBiS(link, playerId.job).flatMap { bis =>
|
||||
Future.traverse(bis.pieces)(addPieceBiS(playerId, _))
|
||||
}.map(_ => ())
|
||||
|
||||
def removePieceBiS(playerId: PlayerId, piece: Piece)
|
||||
(implicit executionContext: ExecutionContext, timeout: Timeout): Future[Int] =
|
||||
|
@ -88,7 +88,7 @@ class UserEndpoint(override val storage: ActorRef)(implicit timeout: Timeout)
|
||||
entity(as[UserResponse]) { user =>
|
||||
val withPartyId = user.toUser.copy(partyId = partyId)
|
||||
complete {
|
||||
addUser(withPartyId, isHashedPassword = false).map(_ => (StatusCodes.Created, HttpEntity.Empty))
|
||||
addUser(withPartyId, isHashedPassword = false).map(_ => (StatusCodes.Accepted, HttpEntity.Empty))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ trait JsonSupport extends SprayJsonSupport with DefaultJsonProtocol {
|
||||
new RootJsonFormat[E#Value] {
|
||||
override def write(obj: E#Value): JsValue = obj.toString.toJson
|
||||
override def read(json: JsValue): E#Value = json match {
|
||||
case JsNumber(value) => enum(value.toInt)
|
||||
case JsString(name) => enum.withName(name)
|
||||
case other => deserializationError(s"String or number expected, got $other")
|
||||
}
|
||||
@ -27,11 +28,11 @@ trait JsonSupport extends SprayJsonSupport with DefaultJsonProtocol {
|
||||
implicit val permissionFormat: RootJsonFormat[Permission.Value] = enumFormat(Permission)
|
||||
|
||||
implicit val pieceFormat: RootJsonFormat[PieceResponse] = jsonFormat3(PieceResponse.apply)
|
||||
implicit val pieceActionFormat: RootJsonFormat[PieceActionResponse] = jsonFormat3(PieceActionResponse.apply)
|
||||
implicit val playerFormat: RootJsonFormat[PlayerResponse] = jsonFormat7(PlayerResponse.apply)
|
||||
implicit val playerActionFormat: RootJsonFormat[PlayerActionResponse] = jsonFormat2(PlayerActionResponse.apply)
|
||||
implicit val playerBiSLinkFormat: RootJsonFormat[PlayerBiSLinkResponse] = jsonFormat2(PlayerBiSLinkResponse.apply)
|
||||
implicit val playerIdFormat: RootJsonFormat[PlayerIdResponse] = jsonFormat3(PlayerIdResponse.apply)
|
||||
implicit val pieceActionFormat: RootJsonFormat[PieceActionResponse] = jsonFormat3(PieceActionResponse.apply)
|
||||
implicit val playerBiSLinkFormat: RootJsonFormat[PlayerBiSLinkResponse] = jsonFormat2(PlayerBiSLinkResponse.apply)
|
||||
implicit val playerIdWithCountersFormat: RootJsonFormat[PlayerIdWithCountersResponse] =
|
||||
jsonFormat9(PlayerIdWithCountersResponse.apply)
|
||||
implicit val userFormat: RootJsonFormat[UserResponse] = jsonFormat4(UserResponse.apply)
|
||||
|
@ -18,3 +18,8 @@ case class PlayerIdResponse(
|
||||
def withPartyId(partyId: String): PlayerId =
|
||||
PlayerId(partyId, Job.withName(job), nick)
|
||||
}
|
||||
|
||||
object PlayerIdResponse {
|
||||
def fromPlayerId(playerId: PlayerId): PlayerIdResponse =
|
||||
PlayerIdResponse(Some(playerId.partyId), playerId.job.toString, playerId.nick)
|
||||
}
|
||||
|
@ -8,11 +8,13 @@
|
||||
*/
|
||||
package me.arcanis.ffxivbis.models
|
||||
|
||||
trait Piece {
|
||||
sealed trait Piece {
|
||||
def isTome: Boolean
|
||||
def job: Job.Job
|
||||
def piece: String
|
||||
|
||||
def withJob(other: Job.Job): Piece
|
||||
|
||||
def isTomeToString: String = if (isTome) "yes" else "no"
|
||||
def upgrade: Option[PieceUpgrade] = this match {
|
||||
case _ if !isTome => None
|
||||
@ -20,7 +22,6 @@ trait Piece {
|
||||
case _: PieceAccessory => Some(AccessoryUpgrade)
|
||||
case _: PieceBody => Some(BodyUpgrade)
|
||||
case _: PieceWeapon => Some(WeaponUpgrade)
|
||||
case _ => None
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,43 +30,55 @@ trait PieceBody extends Piece
|
||||
trait PieceUpgrade extends Piece {
|
||||
val isTome: Boolean = true
|
||||
val job: Job.Job = Job.AnyJob
|
||||
def withJob(other: Job.Job): Piece = this
|
||||
}
|
||||
trait PieceWeapon extends Piece
|
||||
|
||||
case class Weapon(override val isTome: Boolean, override val job: Job.Job) extends PieceWeapon {
|
||||
val piece: String = "weapon"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
|
||||
case class Head(override val isTome: Boolean, override val job: Job.Job) extends PieceBody {
|
||||
val piece: String = "head"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
case class Body(override val isTome: Boolean, override val job: Job.Job) extends PieceBody {
|
||||
val piece: String = "body"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
case class Hands(override val isTome: Boolean, override val job: Job.Job) extends PieceBody {
|
||||
val piece: String = "hands"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
case class Waist(override val isTome: Boolean, override val job: Job.Job) extends PieceBody {
|
||||
val piece: String = "waist"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
case class Legs(override val isTome: Boolean, override val job: Job.Job) extends PieceBody {
|
||||
val piece: String = "legs"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
case class Feet(override val isTome: Boolean, override val job: Job.Job) extends PieceBody {
|
||||
val piece: String = "feet"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
|
||||
case class Ears(override val isTome: Boolean, override val job: Job.Job) extends PieceAccessory {
|
||||
val piece: String = "ears"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
case class Neck(override val isTome: Boolean, override val job: Job.Job) extends PieceAccessory {
|
||||
val piece: String = "neck"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
case class Wrist(override val isTome: Boolean, override val job: Job.Job) extends PieceAccessory {
|
||||
val piece: String = "wrist"
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
}
|
||||
case class Ring(override val isTome: Boolean, override val job: Job.Job, override val piece: String = "ring")
|
||||
extends PieceAccessory {
|
||||
def withJob(other: Job.Job): Piece = copy(job = other)
|
||||
override def equals(obj: Any): Boolean = obj match {
|
||||
case Ring(thatIsTome, thatJob, _) => (thatIsTome == isTome) && (thatJob == job)
|
||||
case _ => false
|
||||
|
@ -33,8 +33,8 @@ class Ariyala extends Actor with StrictLogging {
|
||||
private val xivapiKey = Try(settings.getString("me.arcanis.ffxivbis.ariyala.xivapi-key")).toOption
|
||||
|
||||
private val http = Http()(context.system)
|
||||
private implicit val materializer: ActorMaterializer = ActorMaterializer()
|
||||
private implicit val executionContext: ExecutionContext = context.dispatcher
|
||||
implicit private val materializer: ActorMaterializer = ActorMaterializer()
|
||||
implicit private val executionContext: ExecutionContext = context.dispatcher
|
||||
|
||||
override def receive: Receive = {
|
||||
case GetBiS(link, job) =>
|
||||
|
Reference in New Issue
Block a user