diff options
author | vlad <vlad@driver.xyz> | 2017-06-30 12:29:54 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-06-30 12:29:54 -0700 |
commit | a997aa6539d1f0af4ab4fc395ff2033335da312a (patch) | |
tree | 4f24529cd0beed94368caafdc0bdbb5677184851 /src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala | |
parent | 5832f63b84d7388441d1200f2442dc1e9de0225c (diff) | |
download | rest-query-a997aa6539d1f0af4ab4fc395ff2033335da312a.tar.gz rest-query-a997aa6539d1f0af4ab4fc395ff2033335da312a.tar.bz2 rest-query-a997aa6539d1f0af4ab4fc395ff2033335da312a.zip |
Latest PDS UI utils
Diffstat (limited to 'src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala')
-rw-r--r-- | src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala | 207 |
1 files changed, 130 insertions, 77 deletions
diff --git a/src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala b/src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala index d0dbb04..8b38316 100644 --- a/src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala +++ b/src/test/scala/xyz/driver/pdsuicommon/concurrent/BridgeUploadQueueRepositoryAdapterSuite.scala @@ -3,11 +3,10 @@ package xyz.driver.pdsuicommon.concurrent import java.util.concurrent.ThreadLocalRandom import xyz.driver.pdsuicommon.BaseSuite -import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue.Item import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueueRepositoryAdapter.Strategy import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueueRepositoryAdapter.Strategy.{OnAttempt, OnComplete} +import xyz.driver.pdsuicommon.db.{FakeDbIo, MysqlQueryBuilder} import xyz.driver.pdsuicommon.db.repositories.BridgeUploadQueueRepository -import xyz.driver.pdsuicommon.domain.LongId import scala.concurrent.Future import scala.concurrent.duration.DurationInt @@ -48,6 +47,71 @@ class BridgeUploadQueueRepositoryAdapterSuite extends BaseSuite { } } + "complete" - { + "onComplete == mark" - { + "should update the item" in { + var done = false + val item = defaultItem + + val repository = new BridgeUploadQueueRepository { + override def add(draft: EntityT): EntityT = draft + override def getOne(kind: String): Option[EntityT] = fail("getOne should not be used!") + override def buildQuery: MysqlQueryBuilder[EntityT] = fail("buildQuery should not be used!") + + override def delete(kind: String, tag: String): Unit = throw new IllegalStateException("Impossible call") + + override def update(entity: EntityT): EntityT = { + assert(entity.kind == item.kind, "repository.delete, kind") + assert(entity.tag == item.tag, "repository.delete, tag") + done = true + entity + } + + override def getById(kind: String, tag: String): Option[EntityT] = Some(item) + } + + val adapter = new BridgeUploadQueueRepositoryAdapter( + strategy = Strategy.Stop(OnComplete.Mark), + repository = repository, + dbIo = FakeDbIo + ) + + assert(adapter.complete(item.kind, item.tag).isReadyWithin(100.millis)) + assert(done) + } + } + + "onComplete == delete" - { + "should delete the item" in { + var done = false + val item = defaultItem + + val repository = new BridgeUploadQueueRepository { + override def add(draft: EntityT): EntityT = draft + override def getOne(kind: String): Option[EntityT] = fail("getOne should not be used!") + override def buildQuery: MysqlQueryBuilder[EntityT] = fail("buildQuery should not be used!") + override def getById(kind: String, tag: String): Option[EntityT] = fail("getById should not be used!") + + override def delete(kind: String, tag: String): Unit = { + assert(kind == item.kind, "repository.delete, kind") + assert(tag == item.tag, "repository.delete, tag") + done = true + } + override def update(entity: EntityT): EntityT = throw new IllegalStateException("Impossible call") + } + + val adapter = new BridgeUploadQueueRepositoryAdapter( + strategy = Strategy.Stop(OnComplete.Delete), + repository = repository, + dbIo = FakeDbIo + ) + + assert(adapter.complete(item.kind, item.tag).isReadyWithin(100.millis)) + assert(done) + } + } + } + "tryRetry" - { "when all attempts are not out" - { @@ -56,19 +120,19 @@ class BridgeUploadQueueRepositoryAdapterSuite extends BaseSuite { "should return an updated item" in { val repository = new BridgeUploadQueueRepository { - override def update(draft: EntityT): EntityT = draft - override def delete(id: IdT): Unit = {} - override def add(draft: EntityT): EntityT = fail("add should not be used!") - override def getById(id: LongId[EntityT]): Option[EntityT] = fail("getById should not be used!") - override def isCompleted(kind: String, tag: String): Future[Boolean] = - fail("isCompleted should not be used!") - override def getOne(kind: String): Future[Option[Item]] = fail("getOne should not be used!") + override def add(draft: EntityT): EntityT = draft + override def getOne(kind: String): Option[EntityT] = fail("getOne should not be used!") + override def buildQuery: MysqlQueryBuilder[EntityT] = fail("buildQuery should not be used!") + override def getById(kind: String, tag: String): Option[EntityT] = fail("getById should not be used!") + + override def update(draft: EntityT): EntityT = draft + override def delete(kind: String, tag: String): Unit = throw new IllegalAccessError(s"kind=$kind, tag=$tag") } val adapter = new BridgeUploadQueueRepositoryAdapter( strategy = defaultStrategy, repository = repository, - transactions = transactions + dbIo = FakeDbIo ) val item = defaultItem @@ -77,147 +141,136 @@ class BridgeUploadQueueRepositoryAdapterSuite extends BaseSuite { assert(!r.contains(item)) } - "should add an item with increased attempts" in { + "should update an item with increased attempts" in { val item = defaultItem val repository = new BridgeUploadQueueRepository { + override def add(draft: EntityT): EntityT = draft + override def getOne(kind: String): Option[EntityT] = fail("getOne should not be used!") + override def buildQuery: MysqlQueryBuilder[EntityT] = fail("buildQuery should not be used!") + override def getById(kind: String, tag: String): Option[EntityT] = fail("getById should not be used!") + override def update(draft: EntityT): EntityT = { assert(draft.attempts === (item.attempts + 1), "repository.add") draft } - override def delete(id: IdT): Unit = {} - override def add(draft: EntityT): EntityT = fail("add should not be used!") - override def getById(id: LongId[EntityT]): Option[EntityT] = fail("getById should not be used!") - override def isCompleted(kind: String, tag: String): Future[Boolean] = - fail("isCompleted should not be used!") - override def getOne(kind: String): Future[Option[Item]] = fail("getOne should not be used!") + override def delete(kind: String, tag: String): Unit = throw new IllegalAccessError(s"kind=$kind, tag=$tag") } val adapter = new BridgeUploadQueueRepositoryAdapter( strategy = defaultStrategy, repository = repository, - transactions = transactions + dbIo = FakeDbIo ) - adapter.tryRetry(item).isReadyWithin(100.millis) + assert(adapter.tryRetry(item).isReadyWithin(100.millis)) } "should remove an old item" in { val item = defaultItem val repository = new BridgeUploadQueueRepository { - override def update(draft: EntityT): EntityT = draft - override def delete(id: IdT): Unit = { - assert(id == item.id, "repository.delete") + override def add(draft: EntityT): EntityT = draft + override def getOne(kind: String): Option[EntityT] = fail("getOne should not be used!") + override def buildQuery: MysqlQueryBuilder[EntityT] = fail("buildQuery should not be used!") + override def getById(kind: String, tag: String): Option[EntityT] = fail("getById should not be used!") + override def update(draft: EntityT): EntityT = draft + override def delete(kind: String, tag: String): Unit = { + assert(kind == item.kind, "repository.delete, kind") + assert(tag == item.tag, "repository.delete, kind") } - override def add(draft: EntityT): EntityT = fail("add should not be used!") - override def getById(id: LongId[EntityT]): Option[EntityT] = fail("getById should not be used!") - override def isCompleted(kind: String, tag: String): Future[Boolean] = - fail("isCompleted should not be used!") - override def getOne(kind: String): Future[Option[Item]] = fail("getOne should not be used!") } val adapter = new BridgeUploadQueueRepositoryAdapter( strategy = defaultStrategy, repository = repository, - transactions = transactions + dbIo = FakeDbIo ) - adapter.tryRetry(item).isReadyWithin(100.millis) + assert(adapter.tryRetry(item).isReadyWithin(100.millis)) } "should update time of the next attempt" in { val item = defaultItem val repository = new BridgeUploadQueueRepository { + override def add(draft: EntityT): EntityT = draft + override def getOne(kind: String): Option[EntityT] = fail("getOne should not be used!") + override def buildQuery: MysqlQueryBuilder[EntityT] = fail("buildQuery should not be used!") + override def getById(kind: String, tag: String): Option[EntityT] = fail("getById should not be used!") + override def update(draft: EntityT): EntityT = { assert(draft.nextAttempt.isAfter(item.nextAttempt), "repository.add") draft } - override def delete(id: IdT): Unit = {} - override def add(draft: EntityT): EntityT = fail("add should not be used!") - override def getById(id: LongId[EntityT]): Option[EntityT] = fail("getById should not be used!") - override def isCompleted(kind: String, tag: String): Future[Boolean] = - fail("isCompleted should not be used!") - override def getOne(kind: String): Future[Option[Item]] = fail("getOne should not be used!") + override def delete(kind: String, tag: String): Unit = throw new IllegalAccessError(s"kind=$kind, tag=$tag") } val adapter = new BridgeUploadQueueRepositoryAdapter( strategy = defaultStrategy, repository = repository, - transactions = transactions + dbIo = FakeDbIo ) - adapter.tryRetry(item).isReadyWithin(100.millis) + assert(adapter.tryRetry(item).isReadyWithin(100.millis)) } } "when all attempts are out" - { - val defaultStrategy = Strategy.Ignore + val defaultStrategy = Strategy.Stop() "should not return an item" in { val repository = new BridgeUploadQueueRepository { - override def delete(id: IdT): Unit = {} - override def update(entity: EntityT): EntityT = fail("update should not be used!") - override def add(draft: EntityT): EntityT = fail("add should not be used!") - override def getById(id: LongId[EntityT]): Option[EntityT] = fail("getById should not be used!") - override def isCompleted(kind: String, tag: String): Future[Boolean] = - fail("isCompleted should not be used!") - override def getOne(kind: String): Future[Option[Item]] = fail("getOne should not be used!") + override def add(draft: EntityT): EntityT = draft + override def getOne(kind: String): Option[EntityT] = fail("getOne should not be used!") + override def buildQuery: MysqlQueryBuilder[EntityT] = fail("buildQuery should not be used!") + override def getById(kind: String, tag: String): Option[EntityT] = fail("getById should not be used!") + override def update(entity: EntityT): EntityT = fail("update should not be used!") + + override def delete(kind: String, tag: String): Unit = {} } val adapter = new BridgeUploadQueueRepositoryAdapter( strategy = defaultStrategy, repository = repository, - transactions = transactions + dbIo = FakeDbIo ) val r = adapter.tryRetry(defaultItem).futureValue assert(r.isEmpty) } - "should not add any item to the queue" in { + "should complete the item" in { + var taskWasCompleted = false + val item = defaultItem + val repository = new BridgeUploadQueueRepository { - override def update(draft: EntityT): EntityT = throw new IllegalAccessException("add should not be called") - override def delete(id: IdT): Unit = {} - override def add(draft: EntityT): EntityT = fail("add should not be used!") - override def getById(id: LongId[EntityT]): Option[EntityT] = fail("getById should not be used!") - override def isCompleted(kind: String, tag: String): Future[Boolean] = - fail("isCompleted should not be used!") - override def getOne(kind: String): Future[Option[Item]] = fail("getOne should not be used!") + override def add(draft: EntityT): EntityT = draft + override def getOne(kind: String): Option[EntityT] = fail("getOne should not be used!") + override def buildQuery: MysqlQueryBuilder[EntityT] = fail("buildQuery should not be used!") + override def getById(kind: String, tag: String): Option[EntityT] = fail("getById should not be used!") + override def update(entity: EntityT): EntityT = fail("update should not be used!") + + override def delete(kind: String, tag: String): Unit = {} } val adapter = new BridgeUploadQueueRepositoryAdapter( strategy = defaultStrategy, repository = repository, - transactions = transactions - ) - - adapter.tryRetry(defaultItem).isReadyWithin(100.millis) - } - - "should remove the item from the queue" in { - val repository = new BridgeUploadQueueRepository { - override def delete(id: IdT): Unit = { - assert(id == defaultItem.id, "repository.delete") + dbIo = FakeDbIo + ) { + override def complete(kind: String, tag: String): Future[Unit] = Future { + assert(kind == item.kind, "adapter.complete, kind") + assert(tag == item.tag, "adapter.complete, tag") + taskWasCompleted = true } - override def update(entity: EntityT): EntityT = fail("update should not be used!") - override def add(draft: EntityT): EntityT = fail("add should not be used!") - override def getById(id: LongId[EntityT]): Option[EntityT] = fail("getById should not be used!") - override def isCompleted(kind: String, tag: String): Future[Boolean] = - fail("isCompleted should not be used!") - override def getOne(kind: String): Future[Option[Item]] = fail("getOne should not be used!") } - val adapter = new BridgeUploadQueueRepositoryAdapter( - strategy = defaultStrategy, - repository = repository, - transactions = transactions - ) - - adapter.tryRetry(defaultItem).isReadyWithin(100.millis) + val r = adapter.tryRetry(item).futureValue + assert(r.isEmpty) + assert(taskWasCompleted) } } |