2
0
mirror of https://github.com/VinylDNS/vinyldns synced 2025-08-30 22:05:21 +00:00

Merge pull request #1167 from Aravindh-Raju/aravindhr/replace-await-with-io

Replace await with IO
This commit is contained in:
Nicholas Spadaccino
2022-11-09 14:04:04 -05:00
committed by GitHub
13 changed files with 412 additions and 590 deletions

View File

@@ -668,25 +668,23 @@ class RecordSetServiceIntegrationSpec
}
"fail deleting for user not in record owner group in shared zone" in {
val result = leftResultOf(
val result =
testRecordSetService
.deleteRecordSet(sharedTestRecord.id, sharedTestRecord.zoneId, dummyAuth)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
"fail deleting for user in record owner group in non-shared zone" in {
val result = leftResultOf(
val result =
testRecordSetService
.deleteRecordSet(
testOwnerGroupRecordInNormalZone.id,
testOwnerGroupRecordInNormalZone.zoneId,
auth2
)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}

View File

@@ -16,46 +16,14 @@
package vinyldns.api
import cats.effect._
import cats.implicits._
import vinyldns.api.domain.batch.BatchChangeInterfaces.ValidatedBatch
import vinyldns.api.domain.batch.BatchTransformations.ChangeForValidation
import scala.concurrent.duration._
import org.scalatest.Assertions._
import org.scalatest.matchers.{MatchResult, Matcher}
import scala.concurrent.ExecutionContext
trait CatsHelpers {
private implicit val timer: Timer[IO] = IO.timer(ExecutionContext.global)
private implicit val cs: ContextShift[IO] =
IO.contextShift(scala.concurrent.ExecutionContext.global)
def await[E, T](f: => IO[T], duration: FiniteDuration = 60.seconds): T = {
val i: IO[Either[E, T]] = f.attempt.map {
case Right(ok) => Right(ok.asInstanceOf[T])
case Left(e) => Left(e.asInstanceOf[E])
}
awaitResultOf[E, T](i, duration).toOption.get
}
// Waits for the future to complete, then returns the value as an Either[Throwable, T]
def awaitResultOf[E, T](
f: => IO[Either[E, T]],
duration: FiniteDuration = 60.seconds
): Either[E, T] = {
val timeOut = IO.sleep(duration) *> IO(new RuntimeException("Timed out waiting for result"))
IO.race(timeOut, f).unsafeRunSync().toOption.get
}
// Assumes that the result of the future operation will be successful, this will fail on a left disjunction
def rightResultOf[E, T](f: => IO[Either[E, T]], duration: FiniteDuration = 60.seconds): T =
rightValue(awaitResultOf[E, T](f, duration))
// Assumes that the result of the future operation will fail, this will error on a right disjunction
def leftResultOf[E, T](f: => IO[Either[E, T]], duration: FiniteDuration = 60.seconds): E =
leftValue(awaitResultOf(f, duration))
def leftValue[E, T](t: Either[E, T]): E = t match {
case Right(x) => fail(s"expected left value, got right: $x")

View File

@@ -18,54 +18,15 @@ package vinyldns.api
import cats.data.Validated.{Invalid, Valid}
import cats.data.ValidatedNel
import cats.effect._
import cats.implicits._
import cats.scalatest.ValidatedMatchers
import org.scalatest.matchers.should.Matchers
import org.scalatest.propspec.AnyPropSpec
import scala.concurrent.ExecutionContext
import scala.concurrent.duration._
import scala.reflect.ClassTag
final case class TimeoutException(message: String) extends Throwable(message)
trait ResultHelpers {
private implicit val timer: Timer[IO] = IO.timer(ExecutionContext.global)
private implicit val cs: ContextShift[IO] =
IO.contextShift(scala.concurrent.ExecutionContext.global)
def await[T](f: => IO[_], duration: FiniteDuration = 60.seconds): T =
awaitResultOf[T](f.map(_.asInstanceOf[T]).attempt, duration).toOption.get
// Waits for the future to complete, then returns the value as an Either[Throwable, T]
def awaitResultOf[T](
f: => IO[Either[Throwable, T]],
duration: FiniteDuration = 60.seconds
): Either[Throwable, T] = {
val timeOut = IO.sleep(duration) *> IO(
TimeoutException("Timed out waiting for result").asInstanceOf[Throwable]
)
IO.race(timeOut, f.handleError(e => Left(e))).unsafeRunSync() match {
case Left(e) => Left(e)
case Right(ok) => ok
}
}
// Assumes that the result of the future operation will be successful, this will fail on a left disjunction
def rightResultOf[T](f: => IO[Either[Throwable, T]], duration: FiniteDuration = 60.seconds): T =
awaitResultOf[T](f, duration) match {
case Right(result) => result
case Left(error) => throw error
}
// Assumes that the result of the future operation will fail, this will error on a right disjunction
def leftResultOf[T](
f: => IO[Either[Throwable, T]],
duration: FiniteDuration = 60.seconds
): Throwable = awaitResultOf(f, duration).swap.toOption.get
def leftValue[T](t: Either[Throwable, T]): Throwable = t.swap.toOption.get

View File

@@ -21,17 +21,14 @@ import org.mockito.Mockito._
import org.scalatestplus.mockito.MockitoSugar
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
import vinyldns.api.ResultHelpers
import vinyldns.core.TestMembershipData._
import vinyldns.core.domain.membership.{MembershipRepository, UserRepository}
import cats.effect._
import vinyldns.core.domain.auth.AuthPrincipal
class MembershipAuthPrincipalProviderSpec
extends AnyWordSpec
with Matchers
with MockitoSugar
with ResultHelpers {
with MockitoSugar {
"MembershipAuthPrincipalProvider" should {
"return the AuthPrincipal" in {
@@ -65,7 +62,7 @@ class MembershipAuthPrincipalProviderSpec
.when(mockUserRepo)
.getUserByAccessKey(any[String])
val result = await[Option[AuthPrincipal]](underTest.getAuthPrincipal("None"))
val result = underTest.getAuthPrincipal("None").unsafeRunSync()
result shouldBe None
}
"return an empty list of groups if there are no matching groups" in {
@@ -83,7 +80,7 @@ class MembershipAuthPrincipalProviderSpec
.when(mockMembershipRepo)
.getGroupsForUser(any[String])
val result = await[Option[AuthPrincipal]](underTest.getAuthPrincipal(accessKey))
val result = underTest.getAuthPrincipal(accessKey).unsafeRunSync()
result.map { authPrincipal =>
authPrincipal.signedInUser shouldBe okUser
authPrincipal.memberGroupIds shouldBe Seq()

View File

@@ -22,7 +22,6 @@ import java.time.Instant
import java.time.temporal.ChronoUnit
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
import vinyldns.api.CatsHelpers
import vinyldns.api.domain.batch.BatchTransformations._
import vinyldns.api.domain.batch.BatchTransformations.LogicalChangeType._
import vinyldns.api.engine.TestMessageQueue
@@ -37,7 +36,7 @@ import vinyldns.core.domain.record.RecordType.{RecordType, _}
import vinyldns.core.domain.record._
import vinyldns.core.domain.zone.Zone
class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelpers {
class BatchChangeConverterSpec extends AnyWordSpec with Matchers {
private val notExistCompletedMessage: String = "This record does not exist." +
"No further action is required."
@@ -305,7 +304,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
addSingleChangesGood,
approvalStatus = BatchChangeApprovalStatus.AutoApproved
)
val result = rightResultOf(
val result =
underTest
.sendBatchForProcessing(
batchChange,
@@ -313,8 +312,8 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
ChangeForValidationMap(addChangeForValidationGood.map(_.validNel), existingRecordSets),
None
)
.value
)
.value.unsafeRunSync().toOption.get
val rsChanges = result.recordSetChanges
// validate recordset changes generated from batch
@@ -339,7 +338,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
deleteSingleChangesGood,
approvalStatus = BatchChangeApprovalStatus.AutoApproved
)
val result = rightResultOf(
val result =
underTest
.sendBatchForProcessing(
batchChange,
@@ -350,8 +349,8 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
),
None
)
.value
)
.value.unsafeRunSync().toOption.get
val rsChanges = result.recordSetChanges
// validate recordset change basics generated from batch
@@ -388,7 +387,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
updateSingleChangesGood,
approvalStatus = BatchChangeApprovalStatus.AutoApproved
)
val result = rightResultOf(
val result =
underTest
.sendBatchForProcessing(
batchChange,
@@ -399,8 +398,8 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
),
None
)
.value
)
.value.unsafeRunSync().toOption.get
val rsChanges = result.recordSetChanges
// validate recordset changes generated from batch
@@ -435,7 +434,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
changes,
approvalStatus = BatchChangeApprovalStatus.AutoApproved
)
val result = rightResultOf(
val result =
underTest
.sendBatchForProcessing(
batchChange,
@@ -443,8 +442,8 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
ChangeForValidationMap(changeForValidation.map(_.validNel), existingRecordSets),
None
)
.value
)
.value.unsafeRunSync().toOption.get
val rsChanges = result.recordSetChanges
// validate recordset changes generated from batch
@@ -471,7 +470,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
// check the batch has been stored in the DB
val savedBatch: Option[BatchChange] =
await(batchChangeRepo.getBatchChange(batchChange.id))
batchChangeRepo.getBatchChange(batchChange.id).unsafeRunSync()
savedBatch shouldBe Some(batchChange)
}
@@ -486,7 +485,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
List(),
approvalStatus = BatchChangeApprovalStatus.AutoApproved
)
val result = rightResultOf(
val result =
underTest
.sendBatchForProcessing(
batchChange,
@@ -494,8 +493,8 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
ChangeForValidationMap(List(), existingRecordSets),
None
)
.value
)
.value.unsafeRunSync().toOption.get
result.batchChange shouldBe batchChange
}
@@ -510,7 +509,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
singleChangesOneBad,
approvalStatus = BatchChangeApprovalStatus.AutoApproved
)
val result = rightResultOf(
val result =
underTest
.sendBatchForProcessing(
batchWithBadChange,
@@ -518,8 +517,8 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
ChangeForValidationMap(changeForValidationOneBad.map(_.validNel), existingRecordSets),
None
)
.value
)
.value.unsafeRunSync().toOption.get
val rsChanges = result.recordSetChanges
rsChanges.length shouldBe 3
@@ -542,7 +541,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
// check the update has been made in the DB
val savedBatch: Option[BatchChange] =
await(batchChangeRepo.getBatchChange(batchWithBadChange.id))
batchChangeRepo.getBatchChange(batchWithBadChange.id).unsafeRunSync()
savedBatch shouldBe Some(returnedBatch)
}
@@ -556,7 +555,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
singleChangesOneDelete,
approvalStatus = BatchChangeApprovalStatus.AutoApproved
)
val result = rightResultOf(
val result =
underTest
.sendBatchForProcessing(
batchWithBadChange,
@@ -564,8 +563,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
ChangeForValidationMap(changeForValidationOneDelete.map(_.validNel), existingRecordSets),
None
)
.value
)
.value.unsafeRunSync().toOption.get
val returnedBatch = result.batchChange
@@ -578,7 +576,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
// check the update has been made in the DB
val savedBatch: Option[BatchChange] =
await(batchChangeRepo.getBatchChange(batchWithBadChange.id))
batchChangeRepo.getBatchChange(batchWithBadChange.id).unsafeRunSync()
savedBatch shouldBe Some(returnedBatch)
}
@@ -592,7 +590,7 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
singleChangesOneUnsupported,
approvalStatus = BatchChangeApprovalStatus.AutoApproved
)
val result = leftResultOf(
val result =
underTest
.sendBatchForProcessing(
batchChangeUnsupported,
@@ -603,12 +601,12 @@ class BatchChangeConverterSpec extends AnyWordSpec with Matchers with CatsHelper
),
None
)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe an[BatchConversionError]
val notSaved: Option[BatchChange] =
await(batchChangeRepo.getBatchChange(batchChangeUnsupported.id))
batchChangeRepo.getBatchChange(batchChangeUnsupported.id).unsafeRunSync()
notSaved shouldBe None
}
}

View File

@@ -18,26 +18,25 @@ package vinyldns.api.domain.batch
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
import vinyldns.api.CatsHelpers
import vinyldns.api.domain.batch.BatchChangeInterfaces._
import cats.effect._
import cats.implicits._
import vinyldns.core.domain.{BatchChangeIsEmpty, ChangeLimitExceeded}
class BatchChangeInterfacesSpec extends AnyWordSpec with Matchers with CatsHelpers {
class BatchChangeInterfacesSpec extends AnyWordSpec with Matchers {
"toBatchResult" should {
"work with either success input" in {
val input = "good"
val out = input.asRight[BatchChangeErrorResponse].toBatchResult
rightResultOf(out.value) shouldBe input
out.value.unsafeRunSync().toOption.get shouldBe input
}
"work with either failure input" in {
val error = InvalidBatchChangeInput(List(BatchChangeIsEmpty(10)))
val out = error.asLeft.toBatchResult
leftResultOf(out.value) shouldBe error
out.value.unsafeRunSync().swap.toOption.get shouldBe error
}
"work with Future success inputs" in {
val input = "good"
@@ -49,42 +48,42 @@ class BatchChangeInterfacesSpec extends AnyWordSpec with Matchers with CatsHelpe
val out2 = futureEitherA.toBatchResult
val out3 = futureEitherANoType.toBatchResult
rightResultOf(out1.value) shouldBe input
rightResultOf(out2.value) shouldBe input
rightResultOf(out3.value) shouldBe input
out1.value.unsafeRunSync().toOption.get shouldBe input
out2.value.unsafeRunSync().toOption.get shouldBe input
out3.value.unsafeRunSync().toOption.get shouldBe input
}
"return a BatchChangeIsEmpty error if no changes are found" in {
val futureError =
IO.pure(InvalidBatchChangeInput(List(BatchChangeIsEmpty(10))).asLeft)
val output = futureError.toBatchResult
leftResultOf(output.value) shouldBe InvalidBatchChangeInput(List(BatchChangeIsEmpty(10)))
output.value.unsafeRunSync().swap.toOption.get shouldBe InvalidBatchChangeInput(List(BatchChangeIsEmpty(10)))
}
"return a ChangeLimitExceeded error if change limit is exceeded" in {
val futureError =
IO.pure(InvalidBatchChangeInput(List(ChangeLimitExceeded(10))).asLeft)
val output = futureError.toBatchResult
leftResultOf(output.value) shouldBe InvalidBatchChangeInput(List(ChangeLimitExceeded(10)))
output.value.unsafeRunSync().swap.toOption.get shouldBe InvalidBatchChangeInput(List(ChangeLimitExceeded(10)))
}
"return a UnknownConversionError if run-time error is encountered during processing" in {
val futureError = IO.pure(new RuntimeException("bad!").asLeft)
val output = futureError.toBatchResult
leftResultOf(output.value) shouldBe an[UnknownConversionError]
output.value.unsafeRunSync().swap.toOption.get shouldBe an[UnknownConversionError]
}
"return a RuntimeException error if Future fails" in {
val futureError = IO.raiseError(new RuntimeException("bad!"))
val output = futureError.toBatchResult
a[RuntimeException] shouldBe thrownBy(await(output.value))
a[RuntimeException] shouldBe thrownBy(output.value.unsafeRunSync())
}
}
"collectSuccesses" should {
"return a IO[List] of all if all are successful" in {
val futures = List(1, 2, 3, 4).map(IO.pure)
val result = await(futures.collectSuccesses)
val result = futures.collectSuccesses.unsafeRunSync()
result shouldBe List(1, 2, 3, 4)
}
"filter out unsuccessful futures" in {
@@ -96,7 +95,7 @@ class BatchChangeInterfacesSpec extends AnyWordSpec with Matchers with CatsHelpe
IO.pure(3)
)
val result = await(futures.collectSuccesses)
val result = futures.collectSuccesses.unsafeRunSync()
result shouldBe List(1, 2, 3)
}
"return an empty list of all fail" in {
@@ -105,7 +104,7 @@ class BatchChangeInterfacesSpec extends AnyWordSpec with Matchers with CatsHelpe
IO.raiseError(new RuntimeException("bad again"))
)
val result = await(futures.collectSuccesses)
val result = futures.collectSuccesses.unsafeRunSync()
result shouldBe List()
}
}

View File

@@ -27,7 +27,6 @@ import org.scalatest.{BeforeAndAfterEach, EitherValues}
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
import vinyldns.api.ValidatedBatchMatcherImprovements.containChangeForValidation
import vinyldns.api._
import vinyldns.api.domain.auth.AuthPrincipalProvider
import vinyldns.api.domain.batch.BatchChangeInterfaces.{BatchResult, _}
import vinyldns.api.domain.batch.BatchTransformations._
@@ -59,7 +58,6 @@ class BatchChangeServiceSpec
extends AnyWordSpec
with Matchers
with MockitoSugar
with CatsHelpers
with BeforeAndAfterEach
with EitherMatchers
with EitherValues
@@ -458,7 +456,7 @@ class BatchChangeServiceSpec
"succeed if all inputs are good" in {
val input = BatchChangeInput(None, List(apexAddA, nonApexAddA))
val result = rightResultOf(underTest.applyBatchChange(input, auth, true).value)
val result = underTest.applyBatchChange(input, auth, true).value.unsafeRunSync().toOption.get
result.changes.length shouldBe 2
}
@@ -488,7 +486,7 @@ class BatchChangeServiceSpec
val input = BatchChangeInput(None, List(ptr), Some(authGrp.id))
val result = rightResultOf(underTest.applyBatchChange(input, auth, false).value)
val result = underTest.applyBatchChange(input, auth, false).value.unsafeRunSync().toOption.get
result.changes.length shouldBe 1
result.changes.head.zoneId shouldBe Some(ipv6PTR17Zone.id)
@@ -519,7 +517,7 @@ class BatchChangeServiceSpec
val input = BatchChangeInput(None, List(ptr), Some(authGrp.id))
val result = rightResultOf(underTest.applyBatchChange(input, auth, false).value)
val result = underTest.applyBatchChange(input, auth, false).value.unsafeRunSync().toOption.get
result.changes.length shouldBe 1
result.changes.head.zoneId shouldBe Some(ipv6PTR16Zone.id)
@@ -527,7 +525,7 @@ class BatchChangeServiceSpec
"fail if conversion cannot process" in {
val input = BatchChangeInput(Some("conversionError"), List(apexAddA, nonApexAddA))
val result = leftResultOf(underTest.applyBatchChange(input, auth, true).value)
val result = underTest.applyBatchChange(input, auth, true).value.unsafeRunSync().swap.toOption.get
result shouldBe an[BatchConversionError]
}
@@ -535,7 +533,7 @@ class BatchChangeServiceSpec
"fail with GroupDoesNotExist if owner group ID is provided for a non-existent group" in {
val ownerGroupId = "non-existent-group-id"
val input = BatchChangeInput(None, List(apexAddA), Some(ownerGroupId))
val result = leftResultOf(underTest.applyBatchChange(input, auth, true).value)
val result = underTest.applyBatchChange(input, auth, true).value.unsafeRunSync().swap.toOption.get
result shouldBe InvalidBatchChangeInput(List(GroupDoesNotExist(ownerGroupId)))
}
@@ -543,7 +541,7 @@ class BatchChangeServiceSpec
"fail with UserDoesNotBelongToOwnerGroup if normal user does not belong to group specified by owner group ID" in {
val ownerGroupId = "user-is-not-member"
val input = BatchChangeInput(None, List(apexAddA), Some(ownerGroupId))
val result = leftResultOf(underTest.applyBatchChange(input, notAuth, true).value)
val result = underTest.applyBatchChange(input, notAuth, true).value.unsafeRunSync().swap.toOption.get
result shouldBe
InvalidBatchChangeInput(
@@ -553,7 +551,7 @@ class BatchChangeServiceSpec
"succeed if owner group ID is provided and user is a member of the group" in {
val input = BatchChangeInput(None, List(apexAddA), Some(okGroup.id))
val result = rightResultOf(underTest.applyBatchChange(input, okAuth, true).value)
val result = underTest.applyBatchChange(input, okAuth, true).value.unsafeRunSync().toOption.get
result.changes.length shouldBe 1
}
@@ -562,11 +560,9 @@ class BatchChangeServiceSpec
val ownerGroupId = Some("user-is-not-member")
val input = BatchChangeInput(None, List(apexAddA), ownerGroupId)
val result =
rightResultOf(
underTest
.applyBatchChange(input, AuthPrincipal(superUser, Seq(baseZone.adminGroupId)), true)
.value
)
.value.unsafeRunSync().toOption.get
result.changes.length shouldBe 1
}
@@ -580,7 +576,7 @@ class BatchChangeServiceSpec
AddChangeInput("non-apex.test.com.", RecordType.TXT, None, TXTData("hello"))
val input = BatchChangeInput(None, List(noTtl, withTtl, noTtlDel, noTtlUpdate))
val result = rightResultOf(underTest.applyBatchChange(input, auth, true).value)
val result = underTest.applyBatchChange(input, auth, true).value.unsafeRunSync().toOption.get
result.changes.length shouldBe 4
result
@@ -608,15 +604,13 @@ class BatchChangeServiceSpec
doReturn(IO.unit).when(mockNotifier).notify(any[Notification[_]])
val result =
rightResultOf(
underTest
.rejectBatchChange(
batchChange.id,
supportUserAuth,
RejectBatchChangeInput(Some("review comment"))
)
.value
)
.value.unsafeRunSync().toOption.get
result.status shouldBe BatchChangeStatus.Rejected
result.approvalStatus shouldBe BatchChangeApprovalStatus.ManuallyRejected
@@ -642,11 +636,9 @@ class BatchChangeServiceSpec
val rejectAuth = AuthPrincipal(supportUser.copy(isTest = true), List())
val result =
rightResultOf(
underTestManualEnabled
.rejectBatchChange(batchChange.id, rejectAuth, RejectBatchChangeInput(Some("bad")))
.value
)
.value.unsafeRunSync().toOption.get
result.status shouldBe BatchChangeStatus.Rejected
}
@@ -664,11 +656,9 @@ class BatchChangeServiceSpec
val rejectAuth = AuthPrincipal(supportUser.copy(isTest = true), List())
val result =
leftResultOf(
underTestManualEnabled
.rejectBatchChange(batchChange.id, rejectAuth, RejectBatchChangeInput(Some("bad")))
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe UserNotAuthorizedError(batchChange.id)
}
@@ -685,11 +675,9 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
leftResultOf(
underTest
.rejectBatchChange(batchChange.id, supportUserAuth, RejectBatchChangeInput())
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe BatchChangeNotPendingReview(batchChange.id)
}
@@ -707,9 +695,7 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
leftResultOf(
underTest.rejectBatchChange(batchChange.id, auth, RejectBatchChangeInput()).value
)
underTest.rejectBatchChange(batchChange.id, auth, RejectBatchChangeInput()).value.unsafeRunSync().swap.toOption.get
result shouldBe UserNotAuthorizedError(batchChange.id)
}
@@ -727,9 +713,7 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
leftResultOf(
underTest.rejectBatchChange(batchChange.id, auth, RejectBatchChangeInput()).value
)
underTest.rejectBatchChange(batchChange.id, auth, RejectBatchChangeInput()).value.unsafeRunSync().swap.toOption.get
result shouldBe UserNotAuthorizedError(batchChange.id)
}
@@ -748,17 +732,14 @@ class BatchChangeServiceSpec
"succeed if the batchChange is PendingReview and reviewer is authorized" in {
batchChangeRepo.save(batchChangeNeedsApproval)
val result = {
rightResultOf(
val result =
underTestManualEnabled
.approveBatchChange(
batchChangeNeedsApproval.id,
supportUserAuth,
ApproveBatchChangeInput(Some("reviewed!"))
)
.value
)
}
.value.unsafeRunSync().toOption.get
result.userId shouldBe batchChangeNeedsApproval.userId
result.userName shouldBe batchChangeNeedsApproval.userName
@@ -778,15 +759,13 @@ class BatchChangeServiceSpec
val auth = AuthPrincipal(supportUser.copy(isTest = true), List())
val result =
leftResultOf(
underTestManualEnabled
.approveBatchChange(
batchChangeNeedsApproval.id,
auth,
ApproveBatchChangeInput(Some("reviewed!"))
)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe UserNotAuthorizedError(batchChangeNeedsApproval.id)
}
@@ -796,11 +775,9 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
leftResultOf(
underTest
.approveBatchChange(batchChange.id, supportUserAuth, ApproveBatchChangeInput())
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe BatchChangeNotPendingReview(batchChange.id)
}
@@ -809,11 +786,9 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChangeNeedsApproval)
val result =
leftResultOf(
underTest
.approveBatchChange(batchChangeNeedsApproval.id, auth, ApproveBatchChangeInput())
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe UserNotAuthorizedError(batchChangeNeedsApproval.id)
}
@@ -824,9 +799,7 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
leftResultOf(
underTest.approveBatchChange(batchChange.id, auth, ApproveBatchChangeInput()).value
)
underTest.approveBatchChange(batchChange.id, auth, ApproveBatchChangeInput()).value.unsafeRunSync().swap.toOption.get
result shouldBe UserNotAuthorizedError(batchChange.id)
}
@@ -844,11 +817,9 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
leftResultOf(
underTest
.approveBatchChange(batchChange.id, superUserAuth, ApproveBatchChangeInput())
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe BatchRequesterNotFound("someOtherUserId", "someUn")
}
@@ -868,11 +839,9 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
rightResultOf(
underTest
.cancelBatchChange(batchChange.id, auth)
.value
)
.value.unsafeRunSync().toOption.get
result.status shouldBe BatchChangeStatus.Cancelled
result.approvalStatus shouldBe BatchChangeApprovalStatus.Cancelled
@@ -893,7 +862,7 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
leftResultOf(underTest.cancelBatchChange(batchChange.id, supportUserAuth).value)
underTest.cancelBatchChange(batchChange.id, supportUserAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe UserNotAuthorizedError(batchChange.id)
}
@@ -911,11 +880,9 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
leftResultOf(
underTest
.cancelBatchChange(batchChange.id, auth)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe BatchChangeNotPendingReview(batchChange.id)
}
@@ -933,11 +900,9 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChange)
val result =
leftResultOf(
underTest
.cancelBatchChange(batchChange.id, supportUserAuth)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe BatchChangeNotPendingReview(batchChange.id)
}
@@ -956,13 +921,13 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChange)
val result = rightResultOf(underTest.getBatchChange(batchChange.id, auth).value)
val result = underTest.getBatchChange(batchChange.id, auth).value.unsafeRunSync().toOption.get
result shouldBe BatchChangeInfo(batchChange)
}
"Fail if batchChange id does not exist" in {
val result = leftResultOf(underTest.getBatchChange("badId", auth).value)
val result = underTest.getBatchChange("badId", auth).value.unsafeRunSync().swap.toOption.get
result shouldBe BatchChangeNotFound("badId")
}
@@ -978,7 +943,7 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChange)
val result = leftResultOf(underTest.getBatchChange(batchChange.id, notAuth).value)
val result = underTest.getBatchChange(batchChange.id, notAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe UserNotAuthorizedError(batchChange.id)
}
@@ -996,7 +961,7 @@ class BatchChangeServiceSpec
val authSuper = notAuth.copy(signedInUser = notAuth.signedInUser.copy(isSuper = true))
val result = rightResultOf(underTest.getBatchChange(batchChange.id, authSuper).value)
val result = underTest.getBatchChange(batchChange.id, authSuper).value.unsafeRunSync().toOption.get
result shouldBe BatchChangeInfo(batchChange)
}
@@ -1014,7 +979,7 @@ class BatchChangeServiceSpec
val authSuper = notAuth.copy(signedInUser = notAuth.signedInUser.copy(isSupport = true))
val result = rightResultOf(underTest.getBatchChange(batchChange.id, authSuper).value)
val result = underTest.getBatchChange(batchChange.id, authSuper).value.unsafeRunSync().toOption.get
result shouldBe BatchChangeInfo(batchChange)
}
@@ -1032,7 +997,7 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChange)
val result = rightResultOf(underTest.getBatchChange(batchChange.id, auth).value)
val result = underTest.getBatchChange(batchChange.id, auth).value.unsafeRunSync().toOption.get
result shouldBe BatchChangeInfo(batchChange, Some(okGroup.name))
}
@@ -1049,7 +1014,7 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChange)
val result = rightResultOf(underTest.getBatchChange(batchChange.id, auth).value)
val result = underTest.getBatchChange(batchChange.id, auth).value.unsafeRunSync().toOption.get
result shouldBe BatchChangeInfo(batchChange)
}
@@ -1069,7 +1034,7 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChange)
val result = rightResultOf(underTest.getBatchChange(batchChange.id, auth).value)
val result = underTest.getBatchChange(batchChange.id, auth).value.unsafeRunSync().toOption.get
result shouldBe BatchChangeInfo(batchChange, Some(okGroup.name), Some(superUser.userName))
}
}
@@ -1088,7 +1053,7 @@ class BatchChangeServiceSpec
error
)
val zoneMap = ExistingZones(Set(apexZone, baseZone, ptrZone, delegatedPTRZone, ipv6PTRZone))
val result = await(underTest.getExistingRecordSets(in, zoneMap))
val result = underTest.getExistingRecordSets(in, zoneMap).unsafeRunSync()
val expected =
List(existingApex, existingNonApex, existingPtr, existingPtrDelegated, existingPtrV6)
@@ -1105,7 +1070,7 @@ class BatchChangeServiceSpec
error
)
val zoneMap = ExistingZones(Set(apexZone, baseZone, ptrZone, ipv6PTRZone))
val result = await(underTest.getExistingRecordSets(in, zoneMap))
val result = underTest.getExistingRecordSets(in, zoneMap).unsafeRunSync()
val expected =
List(existingApex, existingNonApex, existingPtr, existingPtrV6)
@@ -1115,7 +1080,7 @@ class BatchChangeServiceSpec
"not fail if gets all lefts" in {
val errors = List(error)
val zoneMap = ExistingZones(Set(apexZone, baseZone, ptrZone, delegatedPTRZone, ipv6PTRZone))
val result = await(underTest.getExistingRecordSets(errors, zoneMap))
val result = underTest.getExistingRecordSets(errors, zoneMap).unsafeRunSync()
result.recordSets.length shouldBe 0
}
@@ -1124,42 +1089,42 @@ class BatchChangeServiceSpec
"getZonesForRequest" should {
"return names for the apex and base zones if they both exist" in {
val underTestBaseApexZoneList: ExistingZones =
await(underTest.getZonesForRequest(List(apexAddA.validNel)))
underTest.getZonesForRequest(List(apexAddA.validNel)).unsafeRunSync()
(underTestBaseApexZoneList.zones should contain).allOf(apexZone, baseZone)
}
"return only the apex zone if only the apex zone exists or A or AAAA records" in {
val underTestOnlyApexZoneList: ExistingZones =
await(underTest.getZonesForRequest(List(onlyApexAddA.validNel)))
underTest.getZonesForRequest(List(onlyApexAddA.validNel)).unsafeRunSync()
(underTestOnlyApexZoneList.zones should contain).only(onlyApexZone)
}
"return only the base zone if only the base zone exists" in {
val underTestOnlyBaseZoneList: ExistingZones =
await(underTest.getZonesForRequest(List(onlyBaseAddAAAA.validNel)))
underTest.getZonesForRequest(List(onlyBaseAddAAAA.validNel)).unsafeRunSync()
(underTestOnlyBaseZoneList.zones should contain).only(onlyBaseZone)
}
"return no zones if neither the apex nor base zone exist" in {
val underTestOnlyNoZonesList: ExistingZones =
await(underTest.getZonesForRequest(List(noZoneAddA.validNel)))
underTest.getZonesForRequest(List(noZoneAddA.validNel)).unsafeRunSync()
underTestOnlyNoZonesList.zones shouldBe Set()
}
"return all possible zones for a dotted host" in {
val underTestZonesList: ExistingZones =
await(underTest.getZonesForRequest(List(dottedAddA.validNel)))
underTest.getZonesForRequest(List(dottedAddA.validNel)).unsafeRunSync()
(underTestZonesList.zones should contain).allOf(apexZone, baseZone)
}
"return all possible zones given an IPv4 PTR" in {
val underTestPTRZonesList: ExistingZones =
await(underTest.getZonesForRequest(List(ptrAdd.validNel)))
underTest.getZonesForRequest(List(ptrAdd.validNel)).unsafeRunSync()
(underTestPTRZonesList.zones should contain).allOf(ptrZone, delegatedPTRZone)
}
@@ -1199,7 +1164,7 @@ class BatchChangeServiceSpec
)
val ptr = AddChangeInput(ip, RecordType.PTR, ttl, PTRData(Fqdn("ptr."))).validNel
val underTestPTRZonesList: ExistingZones = await(underTest.getZonesForRequest(List(ptr)))
val underTestPTRZonesList: ExistingZones = underTest.getZonesForRequest(List(ptr)).unsafeRunSync()
val zoneNames = underTestPTRZonesList.zones.map(_.name)
zoneNames should contain theSameElementsAs possibleZones
@@ -1225,7 +1190,7 @@ class BatchChangeServiceSpec
val ip = "2001:0db8:0000:0000:0000:ff00:0042:8329"
val ptr = AddChangeInput(ip, RecordType.PTR, ttl, PTRData(Fqdn("ptr."))).validNel
val underTestPTRZonesList: ExistingZones = await(underTest.getZonesForRequest(List(ptr)))
val underTestPTRZonesList: ExistingZones = underTest.getZonesForRequest(List(ptr)).unsafeRunSync()
val zoneNames = underTestPTRZonesList.zones.map(_.name)
zoneNames shouldBe Set("0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.")
@@ -1274,7 +1239,7 @@ class BatchChangeServiceSpec
AddChangeInput(v6Name, RecordType.PTR, ttl, PTRData(Fqdn("ptr."))).validNel
}
val underTestPTRZonesList: ExistingZones = await(underTest.getZonesForRequest(ptrs))
val underTestPTRZonesList: ExistingZones = underTest.getZonesForRequest(ptrs).unsafeRunSync()
val zoneNames = underTestPTRZonesList.zones.map(_.name)
zoneNames should contain theSameElementsAs (possibleZones1 ++ possibleZones2)
@@ -1282,7 +1247,7 @@ class BatchChangeServiceSpec
"return a set of distinct zones, given duplicates" in {
val underTestDistinctZonesList: ExistingZones =
await(underTest.getZonesForRequest(List(cnameReverseAdd.validNel, ptrAdd.validNel)))
underTest.getZonesForRequest(List(cnameReverseAdd.validNel, ptrAdd.validNel)).unsafeRunSync()
underTestDistinctZonesList.zones.count(_.id == "nonDelegatedPTR") shouldBe 1
}
@@ -2033,7 +1998,7 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChange)
val result = rightResultOf(underTest.listBatchChangeSummaries(auth, maxItems = 100).value)
val result = underTest.listBatchChangeSummaries(auth, maxItems = 100).value.unsafeRunSync().toOption.get
result.maxItems shouldBe 100
result.nextId shouldBe None
@@ -2072,7 +2037,7 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChangeTwo)
val result = rightResultOf(underTest.listBatchChangeSummaries(auth, maxItems = 100).value)
val result = underTest.listBatchChangeSummaries(auth, maxItems = 100).value.unsafeRunSync().toOption.get
result.maxItems shouldBe 100
result.nextId shouldBe None
@@ -2106,7 +2071,7 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChangeTwo)
val result = rightResultOf(underTest.listBatchChangeSummaries(auth, maxItems = 1).value)
val result = underTest.listBatchChangeSummaries(auth, maxItems = 1).value.unsafeRunSync().toOption.get
result.maxItems shouldBe 1
result.nextId shouldBe Some(1)
@@ -2139,14 +2104,13 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChangeTwo)
val result = rightResultOf(
val result =
underTest
.listBatchChangeSummaries(
auth,
approvalStatus = Some(BatchChangeApprovalStatus.PendingReview)
)
.value
)
.value.unsafeRunSync().toOption.get
result.maxItems shouldBe 100
result.nextId shouldBe None
@@ -2181,7 +2145,7 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChangeTwo)
val result =
rightResultOf(underTest.listBatchChangeSummaries(auth, startFrom = Some(1)).value)
underTest.listBatchChangeSummaries(auth, startFrom = Some(1)).value.unsafeRunSync().toOption.get
result.maxItems shouldBe 100
result.nextId shouldBe None
@@ -2215,7 +2179,7 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChangeUserTwo)
val result =
rightResultOf(underTest.listBatchChangeSummaries(auth, maxItems = 100).value).batchChanges
underTest.listBatchChangeSummaries(auth, maxItems = 100).value.unsafeRunSync().toOption.get.batchChanges
result.length shouldBe 1
result(0).createdTimestamp shouldBe batchChangeUserOne.createdTimestamp
@@ -2244,7 +2208,7 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChangeUserTwo)
val result =
rightResultOf(underTest.listBatchChangeSummaries(auth, ignoreAccess = true).value).batchChanges
underTest.listBatchChangeSummaries(auth, ignoreAccess = true).value.unsafeRunSync().toOption.get.batchChanges
result.length shouldBe 1
result(0).createdTimestamp shouldBe batchChangeUserOne.createdTimestamp
@@ -2273,7 +2237,7 @@ class BatchChangeServiceSpec
batchChangeRepo.save(batchChangeUserTwo)
val result =
rightResultOf(underTest.listBatchChangeSummaries(superUserAuth, ignoreAccess = true).value)
underTest.listBatchChangeSummaries(superUserAuth, ignoreAccess = true).value.unsafeRunSync().toOption.get
result.maxItems shouldBe 100
result.nextId shouldBe None
@@ -2287,7 +2251,7 @@ class BatchChangeServiceSpec
"return an empty list of batchChangeSummaries if none exist" in {
val result =
rightResultOf(underTest.listBatchChangeSummaries(auth, maxItems = 100).value).batchChanges
underTest.listBatchChangeSummaries(auth, maxItems = 100).value.unsafeRunSync().toOption.get.batchChanges
result.length shouldBe 0
}
@@ -2305,7 +2269,7 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChange)
val result = rightResultOf(underTest.listBatchChangeSummaries(auth, maxItems = 100).value)
val result = underTest.listBatchChangeSummaries(auth, maxItems = 100).value.unsafeRunSync().toOption.get
result.maxItems shouldBe 100
result.nextId shouldBe None
@@ -2330,7 +2294,7 @@ class BatchChangeServiceSpec
)
batchChangeRepo.save(batchChange)
val result = rightResultOf(underTest.listBatchChangeSummaries(auth, maxItems = 100).value)
val result = underTest.listBatchChangeSummaries(auth, maxItems = 100).value.unsafeRunSync().toOption.get
result.maxItems shouldBe 100
result.nextId shouldBe None
@@ -2345,29 +2309,29 @@ class BatchChangeServiceSpec
"getOwnerGroup" should {
"return None if owner group ID is None" in {
rightResultOf(underTest.getOwnerGroup(None).value) shouldBe None
underTest.getOwnerGroup(None).value.unsafeRunSync().toOption.get shouldBe None
}
"return None if group does not exist for owner group ID" in {
rightResultOf(underTest.getOwnerGroup(Some("non-existent-group-id")).value) shouldBe None
underTest.getOwnerGroup(Some("non-existent-group-id")).value.unsafeRunSync().toOption.get shouldBe None
}
"return the group if the group exists for the owner group ID" in {
rightResultOf(underTest.getOwnerGroup(Some(okGroup.id)).value) shouldBe Some(okGroup)
underTest.getOwnerGroup(Some(okGroup.id)).value.unsafeRunSync().toOption.get shouldBe Some(okGroup)
}
}
"getReviewer" should {
"return None if reviewer ID is None" in {
rightResultOf(underTest.getReviewer(None).value) shouldBe None
underTest.getReviewer(None).value.unsafeRunSync().toOption.get shouldBe None
}
"return None if reviewer does not exist for the given reviewer ID" in {
rightResultOf(underTest.getReviewer(Some("non-existent-user-id")).value) shouldBe None
underTest.getReviewer(Some("non-existent-user-id")).value.unsafeRunSync().toOption.get shouldBe None
}
"return the reviewer if the reviewer exists for the given reviewer ID" in {
rightResultOf(underTest.getReviewer(Some(superUser.id)).value) shouldBe Some(superUser)
underTest.getReviewer(Some(superUser.id)).value.unsafeRunSync().toOption.get shouldBe Some(superUser)
}
}
@@ -2383,7 +2347,7 @@ class BatchChangeServiceSpec
approvalStatus = BatchChangeApprovalStatus.AutoApproved
)
val result = rightResultOf(
val result =
underTestManualEnabled
.convertOrSave(
batchChange,
@@ -2391,8 +2355,8 @@ class BatchChangeServiceSpec
ChangeForValidationMap(List(), ExistingRecordSets(List())),
None
)
.value
)
.value.unsafeRunSync().toOption.get
result.reviewComment shouldBe Some("batchSentToConverter")
}
"not send to the converter, save the change if PendingReview and MA enabled" in {
@@ -2406,7 +2370,7 @@ class BatchChangeServiceSpec
approvalStatus = BatchChangeApprovalStatus.PendingReview
)
val result = rightResultOf(
val result =
underTestManualEnabled
.convertOrSave(
batchChange,
@@ -2414,8 +2378,7 @@ class BatchChangeServiceSpec
ChangeForValidationMap(List(), ExistingRecordSets(List())),
None
)
.value
)
.value.unsafeRunSync().toOption.get
// not sent to converter
result.reviewComment shouldBe None
@@ -2433,7 +2396,7 @@ class BatchChangeServiceSpec
approvalStatus = BatchChangeApprovalStatus.PendingReview
)
val result = leftResultOf(
val result =
underTest
.convertOrSave(
batchChange,
@@ -2441,8 +2404,7 @@ class BatchChangeServiceSpec
ChangeForValidationMap(List(), ExistingRecordSets(List())),
None
)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe an[UnknownConversionError]
}
@@ -2457,7 +2419,7 @@ class BatchChangeServiceSpec
approvalStatus = BatchChangeApprovalStatus.ManuallyApproved
)
val result = leftResultOf(
val result =
underTest
.convertOrSave(
batchChange,
@@ -2465,8 +2427,8 @@ class BatchChangeServiceSpec
ChangeForValidationMap(List(), ExistingRecordSets(List())),
None
)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe an[UnknownConversionError]
}
}
@@ -2530,7 +2492,7 @@ class BatchChangeServiceSpec
"combine gets for each valid record" in {
val in = List(apexAddForVal.validNel, error)
val result = rightResultOf(underTest.getGroupIdsFromUnauthorizedErrors(in).value)
val result = underTest.getGroupIdsFromUnauthorizedErrors(in).value.unsafeRunSync().toOption.get
result shouldBe Set(okGroup)
}

View File

@@ -25,7 +25,6 @@ import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
import org.scalatest.BeforeAndAfterEach
import vinyldns.api.Interfaces._
import vinyldns.api.ResultHelpers
import vinyldns.core.domain.auth.AuthPrincipal
import vinyldns.core.domain.zone.ZoneRepository
import cats.effect._
@@ -41,7 +40,6 @@ class MembershipServiceSpec
with Matchers
with MockitoSugar
with BeforeAndAfterEach
with ResultHelpers
with EitherMatchers {
private val mockGroupRepo = mock[GroupRepository]
@@ -123,7 +121,7 @@ class MembershipServiceSpec
.saveMembers(any[DB], anyString, any[Set[String]], isAdmin = anyBoolean)
doReturn(IO.pure(okGroupChange)).when(mockGroupChangeRepo).save(any[DB], any[GroupChange])
val result: Group = rightResultOf(underTest.createGroup(groupInfo, okAuth).value)
val result: Group = underTest.createGroup(groupInfo, okAuth).value.unsafeRunSync().toOption.get
result shouldBe groupInfo
val groupCaptor = ArgumentCaptor.forClass(classOf[Group])
@@ -151,7 +149,7 @@ class MembershipServiceSpec
.saveMembers(any[DB], anyString, any[Set[String]], isAdmin = anyBoolean)
doReturn(IO.pure(okGroupChange)).when(mockGroupChangeRepo).save(any[DB], any[GroupChange])
val result: Group = rightResultOf(underTest.createGroup(groupInfo, okAuth).value)
val result: Group = underTest.createGroup(groupInfo, okAuth).value.unsafeRunSync().toOption.get
result shouldBe groupInfo
val groupChangeCaptor = ArgumentCaptor.forClass(classOf[GroupChange])
@@ -180,7 +178,7 @@ class MembershipServiceSpec
).thenReturn(IO.pure(expectedMembersAdded))
doReturn(IO.pure(okGroupChange)).when(mockGroupChangeRepo).save(any[DB], any[GroupChange])
val result: Group = rightResultOf(underTest.createGroup(info, okAuth).value)
val result: Group = underTest.createGroup(info, okAuth).value.unsafeRunSync().toOption.get
result shouldBe info
val memberIdCaptor = ArgumentCaptor.forClass(classOf[Set[String]])
@@ -207,7 +205,7 @@ class MembershipServiceSpec
.saveMembers(any[DB], anyString, any[Set[String]], isAdmin = anyBoolean)
doReturn(IO.pure(okGroupChange)).when(mockGroupChangeRepo).save(any[DB], any[GroupChange])
val result: Group = rightResultOf(underTest.createGroup(info, okAuth).value)
val result: Group = underTest.createGroup(info, okAuth).value.unsafeRunSync().toOption.get
result.memberIds should contain(okAuth.userId)
}
@@ -217,7 +215,7 @@ class MembershipServiceSpec
.when(underTest)
.groupWithSameNameDoesNotExist(groupInfo.name)
val error = leftResultOf(underTest.createGroup(groupInfo, okAuth).value)
val error = underTest.createGroup(groupInfo, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[GroupAlreadyExistsError]
verify(mockGroupRepo, never()).save(any[DB], any[Group])
@@ -233,7 +231,7 @@ class MembershipServiceSpec
.when(underTest)
.usersExist(groupInfo.memberIds)
val error = leftResultOf(underTest.createGroup(groupInfo, okAuth).value)
val error = underTest.createGroup(groupInfo, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[UserNotFoundError]
verify(mockGroupRepo, never()).save(any[DB], any[Group])
@@ -249,7 +247,7 @@ class MembershipServiceSpec
doReturn(IO.raiseError(new RuntimeException("fail"))).when(mockGroupRepo).save(any[DB], any[Group])
doReturn(IO.pure(okGroupChange)).when(mockGroupChangeRepo).save(any[DB], any[GroupChange])
val error = leftResultOf(underTest.createGroup(groupInfo, okAuth).value)
val error = underTest.createGroup(groupInfo, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[RuntimeException]
verify(mockMembershipRepo, never())
@@ -267,7 +265,7 @@ class MembershipServiceSpec
.saveMembers(any[DB], anyString, any[Set[String]], isAdmin = anyBoolean)
doReturn(IO.pure(okGroupChange)).when(mockGroupChangeRepo).save(any[DB], any[GroupChange])
val error = leftResultOf(underTest.createGroup(groupInfo, okAuth).value)
val error = underTest.createGroup(groupInfo, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[RuntimeException]
}
@@ -277,7 +275,7 @@ class MembershipServiceSpec
.when(underTest)
.groupValidation(groupInfo.copy(name = "", email = ""))
val error = leftResultOf(underTest.createGroup(groupInfo.copy(name = "", email = ""), okAuth).value)
val error = underTest.createGroup(groupInfo.copy(name = "", email = ""), okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[GroupValidationError]
verify(mockGroupRepo, never()).save(any[DB], any[Group])
@@ -304,7 +302,6 @@ class MembershipServiceSpec
.when(mockGroupChangeRepo)
.save(any[DB], any[GroupChange])
awaitResultOf(
underTest
.updateGroup(
updatedInfo.id,
@@ -315,8 +312,7 @@ class MembershipServiceSpec
updatedInfo.adminUserIds,
okAuth
)
.value
)
.value.unsafeRunSync()
val groupCaptor = ArgumentCaptor.forClass(classOf[Group])
val addedMemberCaptor = ArgumentCaptor.forClass(classOf[Set[String]])
@@ -366,7 +362,7 @@ class MembershipServiceSpec
"return an error if the user is not an admin" in {
doReturn(IO.pure(Some(okGroup))).when(mockGroupRepo).getGroup(anyString)
val error = leftResultOf(
val error =
underTest
.updateGroup(
updatedInfo.id,
@@ -377,8 +373,7 @@ class MembershipServiceSpec
updatedInfo.adminUserIds,
dummyAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -392,7 +387,7 @@ class MembershipServiceSpec
.when(underTest)
.differentGroupWithSameNameDoesNotExist(updatedInfo.name, existingGroup.id)
val error = leftResultOf(
val error =
underTest
.updateGroup(
updatedInfo.id,
@@ -403,8 +398,8 @@ class MembershipServiceSpec
updatedInfo.adminUserIds,
okAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe a[GroupAlreadyExistsError]
}
@@ -417,7 +412,7 @@ class MembershipServiceSpec
.when(underTest)
.groupValidation(existingGroup.copy(name = "", email = ""))
val error = leftResultOf(
val error =
underTest
.updateGroup(
updatedInfo.id,
@@ -428,15 +423,15 @@ class MembershipServiceSpec
updatedInfo.adminUserIds,
okAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe a[GroupValidationError]
}
"return an error if the group is not found" in {
doReturn(IO.pure(None)).when(mockGroupRepo).getGroup(existingGroup.id)
val error = leftResultOf(
val error =
underTest
.updateGroup(
updatedInfo.id,
@@ -447,8 +442,8 @@ class MembershipServiceSpec
updatedInfo.adminUserIds,
okAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe a[GroupNotFoundError]
}
@@ -463,7 +458,7 @@ class MembershipServiceSpec
.when(underTest)
.usersExist(any[Set[String]])
val error = leftResultOf(
val error =
underTest
.updateGroup(
updatedInfo.id,
@@ -474,8 +469,8 @@ class MembershipServiceSpec
updatedInfo.adminUserIds,
okAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe a[UserNotFoundError]
}
@@ -484,7 +479,7 @@ class MembershipServiceSpec
.when(mockGroupRepo)
.getGroup(existingGroup.id)
val error = leftResultOf(
val error =
underTest
.updateGroup(
updatedInfo.id,
@@ -495,8 +490,8 @@ class MembershipServiceSpec
Set(),
okAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidGroupError]
}
}
@@ -519,7 +514,7 @@ class MembershipServiceSpec
.when(mockZoneRepo)
.getFirstOwnedZoneAclGroupId(anyString())
val result: Group = rightResultOf(underTest.deleteGroup("ok", okAuth).value)
val result: Group = underTest.deleteGroup("ok", okAuth).value.unsafeRunSync().toOption.get
result shouldBe okGroup.copy(status = GroupStatus.Deleted)
val groupCaptor = ArgumentCaptor.forClass(classOf[Group])
@@ -540,7 +535,7 @@ class MembershipServiceSpec
"return an error if the user is not an admin" in {
doReturn(IO.pure(Some(okGroup))).when(mockGroupRepo).getGroup(anyString)
val error = leftResultOf(underTest.deleteGroup("ok", dummyAuth).value)
val error = underTest.deleteGroup("ok", dummyAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -549,7 +544,7 @@ class MembershipServiceSpec
doReturn(IO.pure(None)).when(mockGroupRepo).getGroup(anyString)
doReturn(IO.pure(List())).when(mockZoneRepo).getZonesByAdminGroupId(anyString)
val error = leftResultOf(underTest.deleteGroup("ok", okAuth).value)
val error = underTest.deleteGroup("ok", okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[GroupNotFoundError]
}
@@ -560,7 +555,7 @@ class MembershipServiceSpec
.when(mockZoneRepo)
.getZonesByAdminGroupId(anyString)
val error = leftResultOf(underTest.deleteGroup("ok", okAuth).value)
val error = underTest.deleteGroup("ok", okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidGroupRequestError]
}
@@ -570,7 +565,7 @@ class MembershipServiceSpec
doReturn(IO.pure(Some("somerecordsetid")))
.when(mockRecordSetRepo)
.getFirstOwnedRecordByGroup(anyString())
val error = leftResultOf(underTest.deleteGroup("ok", okAuth).value)
val error = underTest.deleteGroup("ok", okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidGroupRequestError]
}
@@ -580,7 +575,7 @@ class MembershipServiceSpec
doReturn(IO.pure(Some("someId")))
.when(mockZoneRepo)
.getFirstOwnedZoneAclGroupId(anyString())
val error = leftResultOf(underTest.deleteGroup("ok", okAuth).value)
val error = underTest.deleteGroup("ok", okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidGroupRequestError]
}
@@ -590,13 +585,13 @@ class MembershipServiceSpec
"get a group" should {
"return the group" in {
doReturn(IO.pure(Some(okGroup))).when(mockGroupRepo).getGroup(anyString)
val result: Group = rightResultOf(underTest.getGroup(okGroup.id, okAuth).value)
val result: Group = underTest.getGroup(okGroup.id, okAuth).value.unsafeRunSync().toOption.get
result shouldBe okGroup
}
"return an error if the group is not found" in {
doReturn(IO.pure(None)).when(mockGroupRepo).getGroup(anyString)
val error = leftResultOf(underTest.getGroup("notfound", okAuth).value)
val error = underTest.getGroup("notfound", okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[GroupNotFoundError]
}
}
@@ -607,7 +602,7 @@ class MembershipServiceSpec
.when(mockGroupRepo)
.getGroups(any[Set[String]])
val result: ListMyGroupsResponse =
rightResultOf(underTest.listMyGroups(None, None, 100, listOfDummyGroupsAuth, false).value)
underTest.listMyGroups(None, None, 100, listOfDummyGroupsAuth, false).value.unsafeRunSync().toOption.get
verify(mockGroupRepo, never()).getAllGroups()
result shouldBe ListMyGroupsResponse(
groups = listOfDummyGroupInfo.take(100),
@@ -622,7 +617,7 @@ class MembershipServiceSpec
doReturn(IO.pure(listOfDummyGroups.toSet))
.when(mockGroupRepo)
.getGroups(any[Set[String]])
val result: ListMyGroupsResponse = rightResultOf(
val result: ListMyGroupsResponse =
underTest
.listMyGroups(
groupNameFilter = Some("name-dummy01"),
@@ -631,8 +626,8 @@ class MembershipServiceSpec
listOfDummyGroupsAuth,
false
)
.value
)
.value.unsafeRunSync().toOption.get
result shouldBe ListMyGroupsResponse(
groups = listOfDummyGroupInfo.slice(10, 20),
groupNameFilter = Some("name-dummy01"),
@@ -646,7 +641,7 @@ class MembershipServiceSpec
doReturn(IO.pure(listOfDummyGroups.toSet))
.when(mockGroupRepo)
.getGroups(any[Set[String]])
val result: ListMyGroupsResponse = rightResultOf(
val result: ListMyGroupsResponse =
underTest
.listMyGroups(
groupNameFilter = Some("Name-Dummy01"),
@@ -655,8 +650,8 @@ class MembershipServiceSpec
listOfDummyGroupsAuth,
false
)
.value
)
.value.unsafeRunSync().toOption.get
result shouldBe ListMyGroupsResponse(
groups = listOfDummyGroupInfo.slice(10, 20),
groupNameFilter = Some("Name-Dummy01"),
@@ -670,7 +665,7 @@ class MembershipServiceSpec
doReturn(IO.pure(listOfDummyGroups.toSet))
.when(mockGroupRepo)
.getGroups(any[Set[String]])
val result: ListMyGroupsResponse = rightResultOf(
val result: ListMyGroupsResponse =
underTest
.listMyGroups(
groupNameFilter = None,
@@ -679,8 +674,8 @@ class MembershipServiceSpec
listOfDummyGroupsAuth,
ignoreAccess = false
)
.value
)
.value.unsafeRunSync().toOption.get
result shouldBe ListMyGroupsResponse(
groups = listOfDummyGroupInfo.slice(100, 200),
groupNameFilter = None,
@@ -694,7 +689,7 @@ class MembershipServiceSpec
doReturn(IO.pure(listOfDummyGroups.toSet))
.when(mockGroupRepo)
.getGroups(any[Set[String]])
val result: ListMyGroupsResponse = rightResultOf(
val result: ListMyGroupsResponse =
underTest
.listMyGroups(
groupNameFilter = None,
@@ -703,8 +698,8 @@ class MembershipServiceSpec
listOfDummyGroupsAuth,
ignoreAccess = false
)
.value
)
.value.unsafeRunSync().toOption.get
result shouldBe ListMyGroupsResponse(
groups = listOfDummyGroupInfo.slice(0, 10),
groupNameFilter = None,
@@ -717,13 +712,13 @@ class MembershipServiceSpec
"return an empty set if the user is not a member of any groups" in {
doReturn(IO.pure(Set())).when(mockGroupRepo).getGroups(any[Set[String]])
val result: ListMyGroupsResponse =
rightResultOf(underTest.listMyGroups(None, None, 100, notAuth, false).value)
underTest.listMyGroups(None, None, 100, notAuth, false).value.unsafeRunSync().toOption.get
result shouldBe ListMyGroupsResponse(Seq(), None, None, None, 100, false)
}
"return all groups from the database if ignoreAccess is true" in {
doReturn(IO.pure(Set(okGroup, dummyGroup))).when(mockGroupRepo).getAllGroups()
val result: ListMyGroupsResponse =
rightResultOf(underTest.listMyGroups(None, None, 100, notAuth, true).value)
underTest.listMyGroups(None, None, 100, notAuth, true).value.unsafeRunSync().toOption.get
verify(mockGroupRepo).getAllGroups()
result.groups should contain theSameElementsAs Seq(
GroupInfo(dummyGroup),
@@ -733,7 +728,7 @@ class MembershipServiceSpec
"return all groups from the database for super users even if ignoreAccess is false" in {
doReturn(IO.pure(Set(okGroup, dummyGroup))).when(mockGroupRepo).getAllGroups()
val result: ListMyGroupsResponse =
rightResultOf(underTest.listMyGroups(None, None, 100, superUserAuth, false).value)
underTest.listMyGroups(None, None, 100, superUserAuth, false).value.unsafeRunSync().toOption.get
verify(mockGroupRepo).getAllGroups()
result.groups should contain theSameElementsAs Seq(
GroupInfo(dummyGroup),
@@ -743,7 +738,7 @@ class MembershipServiceSpec
"return all groups from the database for super users if ignoreAccess is true" in {
doReturn(IO.pure(Set(okGroup, dummyGroup))).when(mockGroupRepo).getAllGroups()
val result: ListMyGroupsResponse =
rightResultOf(underTest.listMyGroups(None, None, 100, superUserAuth, true).value)
underTest.listMyGroups(None, None, 100, superUserAuth, true).value.unsafeRunSync().toOption.get
verify(mockGroupRepo).getAllGroups()
result.groups should contain theSameElementsAs Seq(
GroupInfo(dummyGroup),
@@ -754,7 +749,7 @@ class MembershipServiceSpec
val supportAuth = AuthPrincipal(okUser.copy(isSupport = true), Seq())
doReturn(IO.pure(Set(okGroup, dummyGroup))).when(mockGroupRepo).getAllGroups()
val result: ListMyGroupsResponse =
rightResultOf(underTest.listMyGroups(None, None, 100, supportAuth, false).value)
underTest.listMyGroups(None, None, 100, supportAuth, false).value.unsafeRunSync().toOption.get
verify(mockGroupRepo).getAllGroups()
result.groups should contain theSameElementsAs Seq(
GroupInfo(dummyGroup),
@@ -765,7 +760,7 @@ class MembershipServiceSpec
val supportAuth = AuthPrincipal(okUser.copy(isSupport = true), Seq())
doReturn(IO.pure(Set(okGroup, dummyGroup))).when(mockGroupRepo).getAllGroups()
val result: ListMyGroupsResponse =
rightResultOf(underTest.listMyGroups(None, None, 100, supportAuth, true).value)
underTest.listMyGroups(None, None, 100, supportAuth, true).value.unsafeRunSync().toOption.get
verify(mockGroupRepo).getAllGroups()
result.groups should contain theSameElementsAs Seq(
GroupInfo(dummyGroup),
@@ -778,7 +773,7 @@ class MembershipServiceSpec
.when(mockGroupRepo)
.getGroups(any[Set[String]])
val result: ListMyGroupsResponse =
rightResultOf(underTest.listMyGroups(None, None, 100, deletedGroupAuth, false).value)
underTest.listMyGroups(None, None, 100, deletedGroupAuth, false).value.unsafeRunSync().toOption.get
result shouldBe ListMyGroupsResponse(Seq(), None, None, None, 100, false)
}
}
@@ -799,7 +794,7 @@ class MembershipServiceSpec
listOfDummyGroupChanges.map(change => GroupChangeInfo.apply(change.copy(userName = userMap.get(change.userId)))).take(1).head
val result: GroupChangeInfo =
rightResultOf(underTest.getGroupChange(dummyGroup.id, dummyAuth).value)
underTest.getGroupChange(dummyGroup.id, dummyAuth).value.unsafeRunSync().toOption.get
result shouldBe expected
}
@@ -818,7 +813,7 @@ class MembershipServiceSpec
listOfDummyGroupChanges.map(change => GroupChangeInfo.apply(change.copy(userName = userMap.get(change.userId)))).take(1).head
val result: GroupChangeInfo =
rightResultOf(underTest.getGroupChange(dummyGroup.id, okAuth).value)
underTest.getGroupChange(dummyGroup.id, okAuth).value.unsafeRunSync().toOption.get
result shouldBe expected
}
@@ -831,7 +826,7 @@ class MembershipServiceSpec
.when(mockUserRepo)
.getUsers(any[Set[String]], any[Option[String]], any[Option[Int]])
val result = leftResultOf(underTest.getGroupChange(dummyGroup.id, okAuth).value)
val result = underTest.getGroupChange(dummyGroup.id, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[InvalidGroupRequestError]
}
}
@@ -855,7 +850,7 @@ class MembershipServiceSpec
listOfDummyGroupChanges.map(change => GroupChangeInfo.apply(change.copy(userName = userMap.get(change.userId)))).take(100)
val result: ListGroupChangesResponse =
rightResultOf(underTest.getGroupActivity(dummyGroup.id, None, 100, dummyAuth).value)
underTest.getGroupActivity(dummyGroup.id, None, 100, dummyAuth).value.unsafeRunSync().toOption.get
result.changes should contain theSameElementsAs expected
result.maxItems shouldBe 100
result.nextId shouldBe Some(listOfDummyGroupChanges(100).id)
@@ -880,7 +875,7 @@ class MembershipServiceSpec
listOfDummyGroupChanges.map(change => GroupChangeInfo.apply(change.copy(userName = userMap.get(change.userId)))).take(100)
val result: ListGroupChangesResponse =
rightResultOf(underTest.getGroupActivity(dummyGroup.id, None, 100, okAuth).value)
underTest.getGroupActivity(dummyGroup.id, None, 100, okAuth).value.unsafeRunSync().toOption.get
result.changes should contain theSameElementsAs expected
result.maxItems shouldBe 100
result.nextId shouldBe Some(listOfDummyGroupChanges(100).id)
@@ -891,7 +886,7 @@ class MembershipServiceSpec
"determine group difference" should {
"return difference between two groups" in {
val groupChange = Seq(okGroupChange, dummyGroupChangeUpdate, okGroupChange.copy(changeType = GroupChangeType.Delete))
val result: Seq[String] = rightResultOf(underTest.determineGroupDifference(groupChange).value)
val result: Seq[String] = underTest.determineGroupDifference(groupChange).value.unsafeRunSync().toOption.get
// Newly created group's change message
result(0) shouldBe "Group Created."
// Updated group's change message
@@ -914,7 +909,7 @@ class MembershipServiceSpec
.getUsers(testGroup.adminUserIds, None, None)
val result: ListAdminsResponse =
rightResultOf(underTest.listAdmins(testGroup.id, okAuth).value)
underTest.listAdmins(testGroup.id, okAuth).value.unsafeRunSync().toOption.get
result.admins should contain theSameElementsAs expectedAdmins
}
@@ -930,7 +925,7 @@ class MembershipServiceSpec
.getUsers(testGroup.adminUserIds, None, None)
val result: ListAdminsResponse =
rightResultOf(underTest.listAdmins(testGroup.id, dummyAuth).value)
underTest.listAdmins(testGroup.id, dummyAuth).value.unsafeRunSync().toOption.get
result.admins should contain theSameElementsAs expectedAdmins
}
}
@@ -951,7 +946,7 @@ class MembershipServiceSpec
.getUsers(testGroup.memberIds, None, Some(100))
val result: ListMembersResponse =
rightResultOf(underTest.listMembers(testGroup.id, None, 100, testAuth).value)
underTest.listMembers(testGroup.id, None, 100, testAuth).value.unsafeRunSync().toOption.get
result.members should contain theSameElementsAs expectedMembers
result.nextId shouldBe testListUsersResult.lastEvaluatedId
@@ -976,7 +971,7 @@ class MembershipServiceSpec
.getUsers(testGroup.memberIds, None, Some(100))
val result: ListMembersResponse =
rightResultOf(underTest.listMembers(testGroup.id, None, 100, supportAuth).value)
underTest.listMembers(testGroup.id, None, 100, supportAuth).value.unsafeRunSync().toOption.get
result.members should contain theSameElementsAs expectedMembers
result.nextId shouldBe testListUsersResult.lastEvaluatedId
@@ -997,7 +992,7 @@ class MembershipServiceSpec
.getUsers(testGroup.memberIds, None, Some(100))
val result: ListMembersResponse =
rightResultOf(underTest.listMembers(testGroup.id, None, 100, dummyAuth).value)
underTest.listMembers(testGroup.id, None, 100, dummyAuth).value.unsafeRunSync().toOption.get
result.members should contain theSameElementsAs expectedMembers
result.nextId shouldBe testListUsersResult.lastEvaluatedId
@@ -1010,21 +1005,21 @@ class MembershipServiceSpec
"return true when a group with the same name does not exist" in {
doReturn(IO.pure(None)).when(mockGroupRepo).getGroupByName("foo")
val result = awaitResultOf(underTest.groupWithSameNameDoesNotExist("foo").value)
val result = underTest.groupWithSameNameDoesNotExist("foo").value.unsafeRunSync()
result should be(right)
}
"return a GroupAlreadyExistsError if a group with the same name already exists" in {
doReturn(IO.pure(Some(okGroup))).when(mockGroupRepo).getGroupByName("foo")
val result = leftResultOf(underTest.groupWithSameNameDoesNotExist("foo").value)
val result = underTest.groupWithSameNameDoesNotExist("foo").value.unsafeRunSync().swap.toOption.get
result shouldBe a[GroupAlreadyExistsError]
}
"return true if a group with the same name exists but is deleted" in {
doReturn(IO.pure(Some(deletedGroup))).when(mockGroupRepo).getGroupByName("foo")
val result = awaitResultOf(underTest.groupWithSameNameDoesNotExist("foo").value)
val result = underTest.groupWithSameNameDoesNotExist("foo").value.unsafeRunSync()
result should be(right)
}
}
@@ -1035,7 +1030,7 @@ class MembershipServiceSpec
.when(mockUserRepo)
.getUsers(okGroup.memberIds, None, None)
val result = awaitResultOf(underTest.usersExist(okGroup.memberIds).value)
val result = underTest.usersExist(okGroup.memberIds).value.unsafeRunSync()
result should be(right)
}
@@ -1044,7 +1039,7 @@ class MembershipServiceSpec
.when(mockUserRepo)
.getUsers(Set(okUser.id, dummyUser.id), None, None)
val result = leftResultOf(underTest.usersExist(Set(okUser.id, dummyUser.id)).value)
val result = underTest.usersExist(Set(okUser.id, dummyUser.id)).value.unsafeRunSync().swap.toOption.get
result shouldBe a[UserNotFoundError]
}
}
@@ -1056,7 +1051,7 @@ class MembershipServiceSpec
doReturn(IO.pure(Some(existingGroup))).when(mockGroupRepo).getGroupByName("foo")
val error =
leftResultOf(underTest.differentGroupWithSameNameDoesNotExist("foo", "bar").value)
underTest.differentGroupWithSameNameDoesNotExist("foo", "bar").value.unsafeRunSync().swap.toOption.get
error shouldBe a[GroupAlreadyExistsError]
}
@@ -1064,9 +1059,8 @@ class MembershipServiceSpec
doReturn(IO.pure(Some(okGroup))).when(mockGroupRepo).getGroupByName(okGroup.name)
val result = awaitResultOf(
underTest.differentGroupWithSameNameDoesNotExist(okGroup.name, okGroup.id).value
)
val result =
underTest.differentGroupWithSameNameDoesNotExist(okGroup.name, okGroup.id).value.unsafeRunSync()
result should be(right)
}
@@ -1077,9 +1071,8 @@ class MembershipServiceSpec
.when(mockGroupRepo)
.getGroupByName(okGroup.name)
val result = awaitResultOf(
underTest.differentGroupWithSameNameDoesNotExist(okGroup.name, okGroup.id).value
)
val result =
underTest.differentGroupWithSameNameDoesNotExist(okGroup.name, okGroup.id).value.unsafeRunSync()
result should be(right)
}
}
@@ -1088,7 +1081,7 @@ class MembershipServiceSpec
"return true when a group for deletion is not the admin of a zone" in {
doReturn(IO.pure(List())).when(mockZoneRepo).getZonesByAdminGroupId(okGroup.id)
val result = awaitResultOf(underTest.isNotZoneAdmin(okGroup).value)
val result = underTest.isNotZoneAdmin(okGroup).value.unsafeRunSync()
result should be(right)
}
@@ -1097,7 +1090,7 @@ class MembershipServiceSpec
.when(mockZoneRepo)
.getZonesByAdminGroupId(okGroup.id)
val error = leftResultOf(underTest.isNotZoneAdmin(okGroup).value)
val error = underTest.isNotZoneAdmin(okGroup).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidGroupRequestError]
}
}
@@ -1106,7 +1099,7 @@ class MembershipServiceSpec
"return true when a group for deletion is not the admin of a zone" in {
doReturn(IO.pure(None)).when(mockRecordSetRepo).getFirstOwnedRecordByGroup(okGroup.id)
val result = awaitResultOf(underTest.isNotRecordOwnerGroup(okGroup).value)
val result = underTest.isNotRecordOwnerGroup(okGroup).value.unsafeRunSync()
result should be(right)
}
@@ -1115,7 +1108,7 @@ class MembershipServiceSpec
.when(mockRecordSetRepo)
.getFirstOwnedRecordByGroup(okGroup.id)
val error = leftResultOf(underTest.isNotRecordOwnerGroup(okGroup).value)
val error = underTest.isNotRecordOwnerGroup(okGroup).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidGroupRequestError]
}
}
@@ -1124,7 +1117,7 @@ class MembershipServiceSpec
"return successfully when a groupId is not in any zone ACL" in {
doReturn(IO.pure(None)).when(mockZoneRepo).getFirstOwnedZoneAclGroupId(okGroup.id)
val result = awaitResultOf(underTest.isNotInZoneAclRule(okGroup).value)
val result = underTest.isNotInZoneAclRule(okGroup).value.unsafeRunSync()
result should be(right)
}
@@ -1133,7 +1126,7 @@ class MembershipServiceSpec
.when(mockZoneRepo)
.getFirstOwnedZoneAclGroupId(okGroup.id)
val error = leftResultOf(underTest.isNotInZoneAclRule(okGroup).value)
val error = underTest.isNotInZoneAclRule(okGroup).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidGroupRequestError]
}
}
@@ -1176,11 +1169,10 @@ class MembershipServiceSpec
}
"return an error if the signed in user is not a super user" in {
val error = leftResultOf(
val error =
underTest
.updateUserLockStatus(okUser.id, LockStatus.Locked, dummyAuth)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -1190,22 +1182,22 @@ class MembershipServiceSpec
signedInUser = dummyAuth.signedInUser.copy(isSupport = true),
memberGroupIds = Seq.empty
)
val error = leftResultOf(
val error =
underTest
.updateUserLockStatus(okUser.id, LockStatus.Locked, supportAuth)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
"return an error if the requested user is not found" in {
doReturn(IO.pure(None)).when(mockUserRepo).getUser(okUser.id)
val error = leftResultOf(
val error =
underTest
.updateUserLockStatus(okUser.id, LockStatus.Locked, superUserAuth)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe a[UserNotFoundError]
}
}
@@ -1213,13 +1205,13 @@ class MembershipServiceSpec
"get user" should {
"return the user" in {
doReturn(IO.pure(Some(okUser))).when(mockUserRepo).getUserByIdOrName(anyString)
val result: User = rightResultOf(underTest.getUser(okUser.id, okAuth).value)
val result: User = underTest.getUser(okUser.id, okAuth).value.unsafeRunSync().toOption.get
result shouldBe okUser
}
"return an error if the user is not found" in {
doReturn(IO.pure(None)).when(mockUserRepo).getUserByIdOrName(anyString)
val error = leftResultOf(underTest.getUser("notfound", okAuth).value)
val error = underTest.getUser("notfound", okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[UserNotFoundError]
}
}

View File

@@ -24,8 +24,8 @@ import org.scalatestplus.mockito.MockitoSugar
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
import org.scalatest.BeforeAndAfterEach
import vinyldns.api.VinylDNSTestHelpers
import vinyldns.api.config.{ZoneAuthConfigs, DottedHostsConfig}
import vinyldns.api.{ResultHelpers, VinylDNSTestHelpers}
import vinyldns.api.domain.access.AccessValidations
import vinyldns.api.domain.record.RecordSetHelpers._
import vinyldns.api.domain.zone._
@@ -46,7 +46,6 @@ class RecordSetServiceSpec
with EitherMatchers
with Matchers
with MockitoSugar
with ResultHelpers
with BeforeAndAfterEach {
private val mockZoneRepo = mock[ZoneRepository]
@@ -187,9 +186,7 @@ class RecordSetServiceSpec
.getUsers(Set.empty, None, None)
val result: RecordSetChange =
rightResultOf(
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
matches(result.recordSet, record, okZone.name) shouldBe true
result.changeType shouldBe RecordSetChangeType.Create
@@ -199,7 +196,7 @@ class RecordSetServiceSpec
val mockZone = okZone.copy(id = "fakeZone")
doReturn(IO.pure(None)).when(mockZoneRepo).getZone(mockZone.id)
val result = leftResultOf(underTest.getRecordSetByZone(aaaa.id, mockZone.id, okAuth).value)
val result = underTest.getRecordSetByZone(aaaa.id, mockZone.id, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[ZoneNotFoundError]
}
"fail when the account is not authorized" in {
@@ -207,7 +204,7 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSet(aaaa.id)
val result =
leftResultOf(underTest.getRecordSetByZone(aaaa.id, zoneNotAuthorized.id, okAuth).value)
underTest.getRecordSetByZone(aaaa.id, zoneNotAuthorized.id, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
"fail if the record already exists" in {
@@ -221,7 +218,7 @@ class RecordSetServiceSpec
.when(mockBackend)
.resolve(record.name, okZone.name, record.typ)
val result = leftResultOf(underTest.addRecordSet(aaaa, okAuth).value)
val result = underTest.addRecordSet(aaaa, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[RecordSetAlreadyExists]
}
"fail if the record is dotted and does not satisfy properties in dotted hosts config" in {
@@ -256,7 +253,7 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result = leftResultOf(underTest.addRecordSet(record, okAuth).value)
val result = underTest.addRecordSet(record, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"fail if the record is dotted and dotted hosts config is empty" in {
@@ -291,7 +288,7 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result = leftResultOf(underTestWithEmptyDottedHostsConfig.addRecordSet(record, okAuth).value)
val result = underTestWithEmptyDottedHostsConfig.addRecordSet(record, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"fail if the record is relative with trailing dot" in {
@@ -327,14 +324,14 @@ class RecordSetServiceSpec
.getUsers(Set.empty, None, None)
val result =
leftResultOf(underTestWithDnsBackendValidations.addRecordSet(record, okAuth).value)
underTestWithDnsBackendValidations.addRecordSet(record, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"fail if the record is a high value domain" in {
val record =
aaaa.copy(name = "high-value-domain", zoneId = okZone.id, status = RecordSetStatus.Active)
val result = leftResultOf(underTest.addRecordSet(record, okAuth).value)
val result = underTest.addRecordSet(record, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe InvalidRequest(
HighValueDomainError(s"high-value-domain.${okZone.name}").message
)
@@ -372,9 +369,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result: RecordSetChange = rightResultOf(
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.name shouldBe okZone.name
}
@@ -411,9 +407,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result: RecordSetChange = rightResultOf(
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.name shouldBe okZone.name
}
@@ -429,9 +424,8 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSetsByName(okZone.id, record.name)
val result: RecordSetChange = rightResultOf(
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.name shouldBe okZone.name
}
@@ -469,9 +463,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result: RecordSetChange = rightResultOf(
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.addRecordSet(record, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.ownerGroupId shouldBe Some(okGroup.id)
}
@@ -488,7 +481,7 @@ class RecordSetServiceSpec
.when(mockGroupRepo)
.getGroup(dummyGroup.id)
val result = leftResultOf(underTest.addRecordSet(record, okAuth).value)
val result = underTest.addRecordSet(record, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
@@ -505,7 +498,7 @@ class RecordSetServiceSpec
.when(mockGroupRepo)
.getGroup(dummyGroup.id)
val result = leftResultOf(underTest.addRecordSet(record, okAuth).value)
val result = underTest.addRecordSet(record, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidGroupError]
}
@@ -544,12 +537,10 @@ class RecordSetServiceSpec
.getUsers(Set.empty, None, None)
val result: RecordSetChange =
rightResultOf(
underTestWithDnsBackendValidations
.addRecordSet(record, okAuth)
.map(_.asInstanceOf[RecordSetChange])
.value
)
.value.unsafeRunSync().toOption.get
matches(result.recordSet, record, okZone.name) shouldBe true
result.changeType shouldBe RecordSetChangeType.Create
@@ -594,9 +585,8 @@ class RecordSetServiceSpec
.getUsers(dummyGroup.memberIds, None, None)
// passes as all three properties within dotted hosts config (allowed zones, users and record types) are satisfied
val result: RecordSetChange = rightResultOf(
underTest.addRecordSet(record, xyzAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.addRecordSet(record, xyzAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.name shouldBe record.name
}
@@ -638,9 +628,8 @@ class RecordSetServiceSpec
.getUsers(xyzGroup.memberIds, None, None)
// passes as all three properties within dotted hosts config (allowed zones, users and record types) are satisfied
val result: RecordSetChange = rightResultOf(
underTest.addRecordSet(record, xyzAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.addRecordSet(record, xyzAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.name shouldBe record.name
}
@@ -682,7 +671,7 @@ class RecordSetServiceSpec
.getUsers(xyzGroup.memberIds, None, None)
// fails as dotted host record name has dot at the end and is not an apex record
val result = leftResultOf(underTest.addRecordSet(record, xyzAuth).value)
val result = underTest.addRecordSet(record, xyzAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"fail if the record is dotted and zone, user, record type is allowed but number of dots allowed in config is 0" in {
@@ -723,7 +712,7 @@ class RecordSetServiceSpec
.getUsers(dummyGroup.memberIds, None, None)
// fails as no.of.dots allowed for the zone in the config is 0
val result = leftResultOf(underTest.addRecordSet(record, xyzAuth).value)
val result = underTest.addRecordSet(record, xyzAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"fail if the record is dotted and user, record type is in allowed dotted hosts config except zone" in {
@@ -759,7 +748,7 @@ class RecordSetServiceSpec
.getUsers(Set.empty, None, None)
// fails as only two properties within dotted hosts config (users and record types) are satisfied while zone is not allowed
val result = leftResultOf(underTest.addRecordSet(record, okAuth).value)
val result = underTest.addRecordSet(record, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"fail if the record is dotted and zone, record type is in allowed dotted hosts config except user" in {
@@ -800,7 +789,7 @@ class RecordSetServiceSpec
.getUsers(dummyGroup.memberIds, None, None)
// fails as only two properties within dotted hosts config (zones and record types) are satisfied while user is not allowed
val result = leftResultOf(underTest.addRecordSet(record, abcAuth).value)
val result = underTest.addRecordSet(record, abcAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"fail if the record is dotted and zone, user is in allowed dotted hosts config except record type" in {
@@ -843,7 +832,7 @@ class RecordSetServiceSpec
.getUsers(dummyGroup.memberIds, None, None)
// fails as only two properties within dotted hosts config (zone and user) are satisfied while record type is not allowed
val result = leftResultOf(underTest.addRecordSet(record, xyzAuth).value)
val result = underTest.addRecordSet(record, xyzAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
@@ -883,9 +872,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result: RecordSetChange = rightResultOf(
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
matches(result.recordSet, newRecord, okZone.name) shouldBe true
matches(result.updates.get, oldRecord, okZone.name) shouldBe true
@@ -899,9 +887,9 @@ class RecordSetServiceSpec
doReturn(IO.pure(Some(aaaa.copy(zoneId = zoneNotAuthorized.id))))
.when(mockRecordRepo)
.getRecordSet(aaaa.id)
val result = leftResultOf(
underTest.updateRecordSet(aaaa.copy(zoneId = zoneNotAuthorized.id), okAuth).value
)
val result =
underTest.updateRecordSet(aaaa.copy(zoneId = zoneNotAuthorized.id), okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
"succeed if the dotted record name is unchanged" in {
@@ -940,9 +928,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result: RecordSetChange = rightResultOf(
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.name shouldBe oldRecord.name
result.recordSet.ttl shouldBe oldRecord.ttl + 1000
@@ -961,7 +948,7 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSetsByName(okZone.id, newRecord.name)
val result = leftResultOf(underTest.updateRecordSet(newRecord, okAuth).value)
val result = underTest.updateRecordSet(newRecord, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"succeed if record is apex with dot" in {
@@ -1000,9 +987,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result: RecordSetChange = rightResultOf(
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.name shouldBe okZone.name
result.recordSet.ttl shouldBe oldRecord.ttl + 1000
@@ -1043,9 +1029,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result: RecordSetChange = rightResultOf(
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.name shouldBe okZone.name
result.recordSet.ttl shouldBe oldRecord.ttl + 1000
@@ -1086,9 +1071,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result: RecordSetChange = rightResultOf(
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value
)
val result: RecordSetChange =
underTest.updateRecordSet(newRecord, okAuth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.name shouldBe okZone.name
result.recordSet.ttl shouldBe oldRecord.ttl + 1000
@@ -1109,7 +1093,7 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSetsByName(okZone.id, newRecord.name)
val result = leftResultOf(underTest.updateRecordSet(newRecord, okAuth).value)
val result = underTest.updateRecordSet(newRecord, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe InvalidRequest(
HighValueDomainError(s"high-value-domain.${okZone.name}").message
)
@@ -1135,7 +1119,7 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSetsByName(okZone.id, newRecord.name)
val result = leftResultOf(underTest.updateRecordSet(newRecord, auth).value)
val result = underTest.updateRecordSet(newRecord, auth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
"fail if new owner group does not exist" in {
@@ -1164,7 +1148,7 @@ class RecordSetServiceSpec
.when(mockGroupRepo)
.getGroup("doesnt-exist")
val result = leftResultOf(underTest.updateRecordSet(newRecord, auth).value)
val result = underTest.updateRecordSet(newRecord, auth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidGroupError]
}
"fail if user not in new owner group" in {
@@ -1193,7 +1177,7 @@ class RecordSetServiceSpec
.when(mockGroupRepo)
.getGroup(okGroup.id)
val result = leftResultOf(underTest.updateRecordSet(newRecord, auth).value)
val result = underTest.updateRecordSet(newRecord, auth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"succeed if user is in owner group and zone is shared" in {
@@ -1242,9 +1226,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result = rightResultOf(
underTest.updateRecordSet(newRecord, auth).map(_.asInstanceOf[RecordSetChange]).value
)
val result =
underTest.updateRecordSet(newRecord, auth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.ttl shouldBe newRecord.ttl
result.recordSet.ownerGroupId shouldBe Some(oneUserDummyGroup.id)
@@ -1292,9 +1275,8 @@ class RecordSetServiceSpec
.when(mockUserRepo)
.getUsers(Set.empty, None, None)
val result = rightResultOf(
underTest.updateRecordSet(newRecord, auth).map(_.asInstanceOf[RecordSetChange]).value
)
val result =
underTest.updateRecordSet(newRecord, auth).map(_.asInstanceOf[RecordSetChange]).value.unsafeRunSync().toOption.get
result.recordSet.ttl shouldBe newRecord.ttl
result.recordSet.ownerGroupId shouldBe None
@@ -1312,7 +1294,7 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSet(newRecord.id)
val result = leftResultOf(underTest.updateRecordSet(newRecord, auth).value)
val result = underTest.updateRecordSet(newRecord, auth).value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
"succeed if new record exists in database but not in DNS backend" in {
@@ -1332,12 +1314,11 @@ class RecordSetServiceSpec
.when(mockBackend)
.resolve(newRecord.name, okZone.name, newRecord.typ)
val result: RecordSetChange = rightResultOf(
val result: RecordSetChange =
underTestWithDnsBackendValidations
.updateRecordSet(newRecord, okAuth)
.map(_.asInstanceOf[RecordSetChange])
.value
)
.value.unsafeRunSync().toOption.get
matches(result.recordSet, newRecord, okZone.name) shouldBe true
matches(result.updates.get, oldRecord, okZone.name) shouldBe true
@@ -1358,7 +1339,7 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSet(newRecord.id)
val result = leftResultOf(underTest.updateRecordSet(newRecord, auth).value)
val result = underTest.updateRecordSet(newRecord, auth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[InvalidRequest]
}
}
@@ -1370,12 +1351,11 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSet(record.id)
val result: RecordSetChange = rightResultOf(
val result: RecordSetChange =
underTest
.deleteRecordSet(record.id, okZone.id, okAuth)
.map(_.asInstanceOf[RecordSetChange])
.value
)
.value.unsafeRunSync().toOption.get
matches(result.recordSet, record, okZone.name) shouldBe true
result.changeType shouldBe RecordSetChangeType.Delete
@@ -1386,7 +1366,7 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSet(aaaa.id)
val result =
leftResultOf(underTest.deleteRecordSet(aaaa.id, zoneNotAuthorized.id, okAuth).value)
underTest.deleteRecordSet(aaaa.id, zoneNotAuthorized.id, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
"fail if the record is a high value domain" in {
@@ -1398,16 +1378,14 @@ class RecordSetServiceSpec
.getRecordSet(record.id)
val result =
leftResultOf(underTest.deleteRecordSet(record.id, okZone.id, okAuth).value)
underTest.deleteRecordSet(record.id, okZone.id, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe InvalidRequest(
HighValueDomainError(s"high-value-domain.${okZone.name}").message
)
}
"fail for user who is not in record owner group in shared zone" in {
val result =
leftResultOf(
underTest.deleteRecordSet(sharedZoneRecord.id, sharedZoneRecord.zoneId, dummyAuth).value
)
underTest.deleteRecordSet(sharedZoneRecord.id, sharedZoneRecord.zoneId, dummyAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
@@ -1417,9 +1395,7 @@ class RecordSetServiceSpec
.getZone(sharedZone.id)
val result =
leftResultOf(
underTest.deleteRecordSet(sharedZoneRecord.id, sharedZoneRecord.zoneId, okAuth).value
)
underTest.deleteRecordSet(sharedZoneRecord.id, sharedZoneRecord.zoneId, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
@@ -1468,7 +1444,7 @@ class RecordSetServiceSpec
doReturn(IO.pure(None)).when(mockGroupRepo).getGroup(any[String])
val result: RecordSetInfo =
rightResultOf(underTest.getRecordSet(aaaa.id, okAuth).value)
underTest.getRecordSet(aaaa.id, okAuth).value.unsafeRunSync().toOption.get
result shouldBe expectedRecordSetInfo
}
@@ -1479,7 +1455,7 @@ class RecordSetServiceSpec
.when(mockRecordRepo)
.getRecordSet(mockRecord.id)
val result = leftResultOf(underTest.getRecordSet(mockRecord.id, okAuth).value)
val result = underTest.getRecordSet(mockRecord.id, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[RecordSetNotFoundError]
}
@@ -1497,7 +1473,7 @@ class RecordSetServiceSpec
doReturn(IO.pure(None)).when(mockGroupRepo).getGroup(any[String])
val result: RecordSetInfo =
rightResultOf(underTest.getRecordSetByZone(aaaa.id, okZone.id, okAuth).value)
underTest.getRecordSetByZone(aaaa.id, okZone.id, okAuth).value.unsafeRunSync().toOption.get
result shouldBe expectedRecordSetInfo
}
@@ -1509,7 +1485,7 @@ class RecordSetServiceSpec
.getRecordSet(mockRecord.id)
val result =
leftResultOf(underTest.getRecordSetByZone(mockRecord.id, okZone.id, okAuth).value)
underTest.getRecordSetByZone(mockRecord.id, okZone.id, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[RecordSetNotFoundError]
}
@@ -1523,9 +1499,8 @@ class RecordSetServiceSpec
val expectedRecordSetInfo = RecordSetInfo(sharedZoneRecord, Some(okGroup.name))
val result: RecordSetInfo =
rightResultOf(
underTest.getRecordSetByZone(sharedZoneRecord.id, sharedZone.id, okAuth).value
)
underTest.getRecordSetByZone(sharedZoneRecord.id, sharedZone.id, okAuth).value.unsafeRunSync().toOption.get
result shouldBe expectedRecordSetInfo
}
@@ -1539,9 +1514,8 @@ class RecordSetServiceSpec
val expectedRecordSetInfo = RecordSetInfo(sharedZoneRecord, None)
val result: RecordSetInfo =
rightResultOf(
underTest.getRecordSetByZone(sharedZoneRecord.id, sharedZone.id, sharedAuth).value
)
underTest.getRecordSetByZone(sharedZoneRecord.id, sharedZone.id, sharedAuth).value.unsafeRunSync().toOption.get
result shouldBe expectedRecordSetInfo
}
@@ -1553,7 +1527,7 @@ class RecordSetServiceSpec
doReturn(IO.pure(None)).when(mockGroupRepo).getGroup(any[String])
val result =
leftResultOf(underTest.getRecordSetByZone(aaaa.id, zoneNotAuthorized.id, okAuth).value)
underTest.getRecordSetByZone(aaaa.id, zoneNotAuthorized.id, okAuth).value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
@@ -1567,11 +1541,10 @@ class RecordSetServiceSpec
val expectedRecordSetInfo = RecordSetInfo(sharedZoneRecordNoOwnerGroup, None)
val result: RecordSetInfo =
rightResultOf(
underTest
.getRecordSetByZone(sharedZoneRecordNoOwnerGroup.id, sharedZone.id, sharedAuth)
.value
)
.value.unsafeRunSync().toOption.get
result shouldBe expectedRecordSetInfo
}
@@ -1583,11 +1556,9 @@ class RecordSetServiceSpec
doReturn(IO.pure(None)).when(mockGroupRepo).getGroup(any[String])
val result =
leftResultOf(
underTest
.getRecordSetByZone(sharedZoneRecordNotApprovedRecordType.id, sharedZone.id, okAuth)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
@@ -1613,11 +1584,10 @@ class RecordSetServiceSpec
doReturn(IO.pure(Some(okGroup))).when(mockGroupRepo).getGroup(any[String])
val result = leftResultOf(
val result =
underTest
.getRecordSetByZone(notSharedZoneRecordWithOwnerGroup.id, zoneNotAuthorized.id, okAuth)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
}
@@ -1626,12 +1596,12 @@ class RecordSetServiceSpec
"return the group name if a record owner group ID is present" in {
doReturn(IO.pure(Some(okGroup))).when(mockGroupRepo).getGroup(any[String])
val result = rightResultOf(underTest.getGroupName(Some(okGroup.id)).value)
val result = underTest.getGroupName(Some(okGroup.id)).value.unsafeRunSync().toOption.get
result shouldBe Some("ok")
}
"return None if a record owner group ID is not present" in {
val result = rightResultOf(underTest.getGroupName(None).value)
val result = underTest.getGroupName(None).value.unsafeRunSync().toOption.get
result shouldBe None
}
}
@@ -1666,7 +1636,7 @@ class RecordSetServiceSpec
nameSort = any[NameSort.NameSort]
)
val result: ListGlobalRecordSetsResponse = rightResultOf(
val result: ListGlobalRecordSetsResponse =
underTest
.listRecordSets(
startFrom = None,
@@ -1677,8 +1647,8 @@ class RecordSetServiceSpec
nameSort = NameSort.ASC,
authPrincipal = sharedAuth
)
.value
)
.value.unsafeRunSync().toOption.get
result.recordSets shouldBe
List(
RecordSetGlobalInfo(
@@ -1691,7 +1661,7 @@ class RecordSetServiceSpec
}
"fail if recordNameFilter is fewer than two characters" in {
val result = leftResultOf(
val result =
underTest
.listRecordSets(
startFrom = None,
@@ -1702,8 +1672,8 @@ class RecordSetServiceSpec
nameSort = NameSort.ASC,
authPrincipal = okAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
}
@@ -1738,7 +1708,7 @@ class RecordSetServiceSpec
nameSort = any[NameSort.NameSort]
)
val result = rightResultOf(
val result =
underTest
.searchRecordSets(
startFrom = None,
@@ -1749,8 +1719,8 @@ class RecordSetServiceSpec
nameSort = NameSort.ASC,
authPrincipal = sharedAuth
)
.value
)
.value.unsafeRunSync().toOption.get
result.recordSets shouldBe
List(
RecordSetGlobalInfo(
@@ -1763,7 +1733,7 @@ class RecordSetServiceSpec
}
"fail recordSetData if recordNameFilter is fewer than two characters" in {
val result = leftResultOf(
val result =
underTest
.searchRecordSets(
startFrom = None,
@@ -1774,8 +1744,8 @@ class RecordSetServiceSpec
nameSort = NameSort.ASC,
authPrincipal = okAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe an[InvalidRequest]
}
}
@@ -1805,7 +1775,7 @@ class RecordSetServiceSpec
nameSort = NameSort.ASC
)
val result: ListRecordSetsByZoneResponse = rightResultOf(
val result: ListRecordSetsByZoneResponse =
underTest
.listRecordSetsByZone(
sharedZone.id,
@@ -1817,8 +1787,8 @@ class RecordSetServiceSpec
recordOwnerGroupFilter = None,
nameSort = NameSort.ASC
)
.value
)
.value.unsafeRunSync().toOption.get
result.recordSets shouldBe
List(
RecordSetListInfo(
@@ -1848,7 +1818,7 @@ class RecordSetServiceSpec
nameSort = NameSort.ASC
)
val result: ListRecordSetsByZoneResponse = rightResultOf(
val result: ListRecordSetsByZoneResponse =
underTest
.listRecordSetsByZone(
okZone.id,
@@ -1860,14 +1830,14 @@ class RecordSetServiceSpec
nameSort = NameSort.ASC,
authPrincipal = AuthPrincipal(okAuth.signedInUser.copy(isSupport = true), Seq.empty)
)
.value
)
.value.unsafeRunSync().toOption.get
result.recordSets shouldBe List(
RecordSetListInfo(RecordSetInfo(aaaa, None), AccessLevel.Read)
)
}
"fails when the account is not authorized" in {
val result = leftResultOf(
val result =
underTest
.listRecordSetsByZone(
zoneNotAuthorized.id,
@@ -1879,8 +1849,8 @@ class RecordSetServiceSpec
nameSort = NameSort.ASC,
authPrincipal = okAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
result shouldBe a[NotAuthorizedError]
}
}
@@ -1898,7 +1868,7 @@ class RecordSetServiceSpec
.getUsers(any[Set[String]], any[Option[String]], any[Option[Int]])
val result: ListRecordSetChangesResponse =
rightResultOf(underTest.listRecordSetChanges(okZone.id, authPrincipal = okAuth).value)
underTest.listRecordSetChanges(okZone.id, authPrincipal = okAuth).value.unsafeRunSync().toOption.get
val changesWithName =
completeRecordSetChanges.map(change => RecordSetChangeInfo(change, Some("ok")))
val expectedResults = ListRecordSetChangesResponse(
@@ -1917,7 +1887,7 @@ class RecordSetServiceSpec
.listRecordSetChanges(zoneId = okZone.id, startFrom = None, maxItems = 100)
val result: ListRecordSetChangesResponse =
rightResultOf(underTest.listRecordSetChanges(okZone.id, authPrincipal = okAuth).value)
underTest.listRecordSetChanges(okZone.id, authPrincipal = okAuth).value.unsafeRunSync().toOption.get
val expectedResults = ListRecordSetChangesResponse(
zoneId = okZone.id,
recordSetChanges = List(),
@@ -1929,9 +1899,9 @@ class RecordSetServiceSpec
}
"return a NotAuthorizedError" in {
val error = leftResultOf(
underTest.listRecordSetChanges(zoneNotAuthorized.id, authPrincipal = okAuth).value
)
val error =
underTest.listRecordSetChanges(zoneNotAuthorized.id, authPrincipal = okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -1944,7 +1914,7 @@ class RecordSetServiceSpec
.listRecordSetChanges(zoneId = okZone.id, startFrom = None, maxItems = 100)
val result: ListRecordSetChangesResponse =
rightResultOf(underTest.listRecordSetChanges(okZone.id, authPrincipal = okAuth).value)
underTest.listRecordSetChanges(okZone.id, authPrincipal = okAuth).value.unsafeRunSync().toOption.get
val changesWithName =
List(RecordSetChangeInfo(rsChange2, Some("ok")), RecordSetChangeInfo(rsChange1, Some("ok")))
val expectedResults = ListRecordSetChangesResponse(
@@ -1965,7 +1935,7 @@ class RecordSetServiceSpec
.getRecordSetChange(okZone.id, pendingCreateAAAA.id)
val actual: RecordSetChange =
rightResultOf(underTest.getRecordSetChange(okZone.id, pendingCreateAAAA.id, okAuth).value)
underTest.getRecordSetChange(okZone.id, pendingCreateAAAA.id, okAuth).value.unsafeRunSync().toOption.get
actual shouldBe pendingCreateAAAA
}
@@ -1975,9 +1945,8 @@ class RecordSetServiceSpec
.getRecordSetChange(sharedZone.id, pendingCreateSharedRecord.id)
val actual: RecordSetChange =
rightResultOf(
underTest.getRecordSetChange(sharedZone.id, pendingCreateSharedRecord.id, okAuth).value
)
underTest.getRecordSetChange(sharedZone.id, pendingCreateSharedRecord.id, okAuth).value.unsafeRunSync().toOption.get
actual shouldBe pendingCreateSharedRecord
}
@@ -1986,7 +1955,7 @@ class RecordSetServiceSpec
.when(mockRecordChangeRepo)
.getRecordSetChange(okZone.id, pendingCreateAAAA.id)
val error =
leftResultOf(underTest.getRecordSetChange(okZone.id, pendingCreateAAAA.id, okAuth).value)
underTest.getRecordSetChange(okZone.id, pendingCreateAAAA.id, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[RecordSetChangeNotFoundError]
}
@@ -1996,9 +1965,8 @@ class RecordSetServiceSpec
.when(mockRecordChangeRepo)
.getRecordSetChange(zoneActive.id, pendingCreateAAAA.id)
val error = leftResultOf(
underTest.getRecordSetChange(zoneActive.id, pendingCreateAAAA.id, dummyAuth).value
)
val error =
underTest.getRecordSetChange(zoneActive.id, pendingCreateAAAA.id, dummyAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -2009,15 +1977,14 @@ class RecordSetServiceSpec
.when(mockRecordChangeRepo)
.getRecordSetChange(zoneNotAuthorized.id, pendingCreateSharedRecordNotSharedZone.id)
val error = leftResultOf(
val error =
underTest
.getRecordSetChange(
zoneNotAuthorized.id,
pendingCreateSharedRecordNotSharedZone.id,
okAuth
)
.value
)
.value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -2025,17 +1992,17 @@ class RecordSetServiceSpec
"formatRecordNameFilter" should {
"return an FQDN from an IPv4 address" in {
rightResultOf(underTest.formatRecordNameFilter("10.10.0.25").value) shouldBe
underTest.formatRecordNameFilter("10.10.0.25").value.unsafeRunSync().toOption.get shouldBe
"25.0.10.10.in-addr.arpa."
}
"return an FQDN from an IPv6 address" in {
rightResultOf(underTest.formatRecordNameFilter("10.10.0.25").value) shouldBe
underTest.formatRecordNameFilter("10.10.0.25").value.unsafeRunSync().toOption.get shouldBe
"25.0.10.10.in-addr.arpa."
}
"return a string with a trailing dot" in {
rightResultOf(underTest.formatRecordNameFilter("thing.com").value) shouldBe
underTest.formatRecordNameFilter("thing.com").value.unsafeRunSync().toOption.get shouldBe
"thing.com."
}
}

View File

@@ -25,7 +25,6 @@ import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
import org.scalatest.BeforeAndAfterEach
import vinyldns.core.domain.record._
import vinyldns.api.ResultHelpers
import cats.effect._
import org.mockito.Matchers.any
import vinyldns.core.domain.Fqdn
@@ -40,7 +39,6 @@ class ZoneConnectionValidatorSpec
with Matchers
with MockitoSugar
with BeforeAndAfterEach
with ResultHelpers
with EitherMatchers
with EitherValues {
@@ -153,7 +151,7 @@ class ZoneConnectionValidatorSpec
doReturn(IO.pure(true)).when(mockBackend).zoneExists(any[Zone])
doReturn(mockBackend).when(mockBackendResolver).resolve(any[Zone])
val result = awaitResultOf(underTest.validateZoneConnections(testZone).value)
val result = underTest.validateZoneConnections(testZone).value.unsafeRunSync()
result should be(right)
}
@@ -165,7 +163,7 @@ class ZoneConnectionValidatorSpec
doReturn(IO.pure(true)).when(mockBackend).zoneExists(any[Zone])
doReturn(mockBackend).when(mockBackendResolver).resolve(any[Zone])
val result = leftResultOf(underTest.validateZoneConnections(testZone).value)
val result = underTest.validateZoneConnections(testZone).value.unsafeRunSync().swap.toOption.get
result shouldBe ZoneValidationFailed(
testZone,
List(s"Name Server not.approved. is not an approved name server."),
@@ -182,7 +180,7 @@ class ZoneConnectionValidatorSpec
doReturn(IO.pure(true)).when(mockBackend).zoneExists(any[Zone])
doReturn(mockBackend).when(mockBackendResolver).resolve(any[Zone])
val result = leftResultOf(underTest.validateZoneConnections(testZone).value)
val result = underTest.validateZoneConnections(testZone).value.unsafeRunSync().swap.toOption.get
result shouldBe a[ZoneValidationFailed]
result shouldBe ZoneValidationFailed(
testZone,
@@ -203,7 +201,7 @@ class ZoneConnectionValidatorSpec
doReturn(IO.pure(true)).when(mockBackend).zoneExists(any[Zone])
doReturn(mockBackend).when(mockBackendResolver).resolve(any[Zone])
val result = leftResultOf(underTest.validateZoneConnections(badZone).value)
val result = underTest.validateZoneConnections(badZone).value.unsafeRunSync().swap.toOption.get
result shouldBe a[ConnectionFailed]
}
@@ -220,7 +218,7 @@ class ZoneConnectionValidatorSpec
doReturn(IO.pure(true)).when(mockBackend).zoneExists(any[Zone])
doReturn(mockBackend).when(mockBackendResolver).resolve(any[Zone])
val result = leftResultOf(underTest.validateZoneConnections(badZone).value)
val result = underTest.validateZoneConnections(badZone).value.unsafeRunSync().swap.toOption.get
result shouldBe a[ConnectionFailed]
result.getMessage should include("transfer connection failure!")
}

View File

@@ -23,7 +23,6 @@ import org.scalatest.wordspec.AnyWordSpec
import org.scalatestplus.mockito.MockitoSugar
import cats.implicits._
import vinyldns.api.Interfaces._
import vinyldns.api.ResultHelpers
import cats.effect._
import org.scalatest.{BeforeAndAfterEach, EitherValues}
import vinyldns.api.domain.access.AccessValidations
@@ -37,13 +36,10 @@ import vinyldns.core.TestZoneData._
import vinyldns.core.crypto.NoOpCrypto
import vinyldns.core.domain.backend.BackendResolver
import scala.concurrent.duration._
class ZoneServiceSpec
extends AnyWordSpec
with Matchers
with MockitoSugar
with ResultHelpers
with BeforeAndAfterEach
with EitherValues {
@@ -109,9 +105,8 @@ class ZoneServiceSpec
"return an appropriate zone change response" in {
doReturn(IO.pure(None)).when(mockZoneRepo).getZoneByName(anyString)
val resultChange: ZoneChange = rightResultOf(
underTest.connectToZone(createZoneAuthorized, okAuth).map(_.asInstanceOf[ZoneChange]).value
)
val resultChange: ZoneChange =
underTest.connectToZone(createZoneAuthorized, okAuth).map(_.asInstanceOf[ZoneChange]).value.unsafeRunSync().toOption.get
resultChange.changeType shouldBe ZoneChangeType.Create
Option(resultChange.created) shouldBe defined
@@ -131,12 +126,11 @@ class ZoneServiceSpec
doReturn(IO.pure(None)).when(mockZoneRepo).getZoneByName(anyString)
val nonTestUser = okAuth.copy(signedInUser = okAuth.signedInUser.copy(isTest = false))
val resultChange: ZoneChange = rightResultOf(
val resultChange: ZoneChange =
underTest
.connectToZone(createZoneAuthorized, nonTestUser)
.map(_.asInstanceOf[ZoneChange])
.value
)
.value.unsafeRunSync().toOption.get
resultChange.zone.isTest shouldBe false
}
@@ -146,12 +140,11 @@ class ZoneServiceSpec
val testUser = okAuth.copy(signedInUser = okAuth.signedInUser.copy(isTest = true))
testUser.isTestUser shouldBe true
val resultChange: ZoneChange = rightResultOf(
val resultChange: ZoneChange =
underTest
.connectToZone(createZoneAuthorized, testUser)
.map(_.asInstanceOf[ZoneChange])
.value
)
.value.unsafeRunSync().toOption.get
resultChange.zone.isTest shouldBe true
}
@@ -159,7 +152,7 @@ class ZoneServiceSpec
"return a ZoneAlreadyExists error if the zone exists" in {
doReturn(IO.pure(Some(okZone))).when(mockZoneRepo).getZoneByName(anyString)
val error = leftResultOf(underTest.connectToZone(createZoneAuthorized, okAuth).value)
val error = underTest.connectToZone(createZoneAuthorized, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[ZoneAlreadyExistsError]
}
@@ -168,7 +161,7 @@ class ZoneServiceSpec
doReturn(IO.pure(None)).when(mockZoneRepo).getZoneByName(anyString)
doReturn(IO.pure(None)).when(mockGroupRepo).getGroup(anyString)
val error = leftResultOf(underTest.connectToZone(createZoneAuthorized, okAuth).value)
val error = underTest.connectToZone(createZoneAuthorized, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidGroupError]
}
@@ -176,9 +169,9 @@ class ZoneServiceSpec
"allow the zone to be created if it exists and the zone is deleted" in {
doReturn(IO.pure(Some(zoneDeleted))).when(mockZoneRepo).getZoneByName(anyString)
val resultChange: ZoneChange = rightResultOf(
underTest.connectToZone(createZoneAuthorized, okAuth).map(_.asInstanceOf[ZoneChange]).value
)
val resultChange: ZoneChange =
underTest.connectToZone(createZoneAuthorized, okAuth).map(_.asInstanceOf[ZoneChange]).value.unsafeRunSync().toOption.get
resultChange.changeType shouldBe ZoneChangeType.Create
}
@@ -186,7 +179,7 @@ class ZoneServiceSpec
val badAcl = ACLRule(baseAclRuleInfo.copy(recordMask = Some("x{5,-3}")))
val newZone = createZoneAuthorized.copy(acl = ZoneACL(Set(badAcl)))
val error = leftResultOf(underTest.connectToZone(newZone, okAuth).value)
val error = underTest.connectToZone(newZone, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidRequest]
}
@@ -194,9 +187,8 @@ class ZoneServiceSpec
val newZone = createZoneAuthorized.copy(shared = true)
doReturn(IO.pure(None)).when(mockZoneRepo).getZoneByName(anyString)
val resultZone = rightResultOf(
underTest.connectToZone(newZone, superUserAuth).map(_.asInstanceOf[ZoneChange]).value
).zone
val resultZone =
underTest.connectToZone(newZone, superUserAuth).map(_.asInstanceOf[ZoneChange]).value.unsafeRunSync().toOption.get.zone
Option(resultZone.id) should not be None
resultZone.email shouldBe okZone.email
@@ -210,12 +202,11 @@ class ZoneServiceSpec
val newZone = createZoneAuthorized.copy(shared = true)
doReturn(IO.pure(None)).when(mockZoneRepo).getZoneByName(anyString)
val resultZone = rightResultOf(
val resultZone =
underTest
.connectToZone(newZone, supportUserAuth)
.map(_.asInstanceOf[ZoneChange])
.value
).zone
.value.unsafeRunSync().toOption.get.zone
Option(resultZone.id) should not be None
resultZone.email shouldBe okZone.email
@@ -229,14 +220,14 @@ class ZoneServiceSpec
val newZone = createZoneAuthorized.copy(shared = true)
doReturn(IO.pure(None)).when(mockZoneRepo).getZoneByName(anyString)
val error = leftResultOf(underTest.connectToZone(newZone, okAuth).value)
val error = underTest.connectToZone(newZone, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
"return an InvalidRequest if zone has a specified backend ID that is invalid" in {
val newZone = createZoneAuthorized.copy(backendId = Some("badId"))
val error = leftResultOf(underTest.connectToZone(newZone, okAuth).value)
val error = underTest.connectToZone(newZone, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidRequest]
}
}
@@ -248,13 +239,11 @@ class ZoneServiceSpec
val doubleAuth = AuthPrincipal(TestDataLoader.okUser, Seq(twoUserGroup.id, okGroup.id))
val updateZoneInput = updateZoneAuthorized.copy(adminGroupId = twoUserGroup.id)
val resultChange: ZoneChange = rightResultOf(
val resultChange: ZoneChange =
underTest
.updateZone(updateZoneInput, doubleAuth)
.map(_.asInstanceOf[ZoneChange])
.value,
duration = 2.seconds
)
.value.unsafeRunSync().toOption.get
resultChange.zone.id shouldBe okZone.id
resultChange.changeType shouldBe ZoneChangeType.Update
@@ -272,12 +261,11 @@ class ZoneServiceSpec
val doubleAuth = AuthPrincipal(TestDataLoader.okUser, Seq(okGroup.id, okGroup.id))
val resultChange: ZoneChange =
rightResultOf(
underTest
.updateZone(newZone, doubleAuth)
.map(_.asInstanceOf[ZoneChange])
.value
)
.value.unsafeRunSync().toOption.get
resultChange.zone.id shouldBe oldZone.id
resultChange.zone.connection shouldBe oldZone.connection
}
@@ -288,7 +276,7 @@ class ZoneServiceSpec
val newZone =
updateZoneAuthorized.copy(connection = Some(badConnection), adminGroupId = okGroup.id)
val error = leftResultOf(underTest.updateZone(newZone, okAuth).value)
val error = underTest.updateZone(newZone, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[ConnectionFailed]
}
@@ -297,7 +285,7 @@ class ZoneServiceSpec
val noAuth = AuthPrincipal(TestDataLoader.okUser, Seq())
val error = leftResultOf(underTest.updateZone(updateZoneAuthorized, noAuth).value)
val error = underTest.updateZone(updateZoneAuthorized, noAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -307,7 +295,7 @@ class ZoneServiceSpec
val badAcl = ACLRule(baseAclRuleInfo.copy(recordMask = Some("x{5,-3}")))
val newZone = updateZoneAuthorized.copy(acl = ZoneACL(Set(badAcl)))
val error = leftResultOf(underTest.updateZone(newZone, okAuth).value)
val error = underTest.updateZone(newZone, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidRequest]
}
@@ -317,11 +305,11 @@ class ZoneServiceSpec
.when(mockZoneRepo)
.getZone(newZone.id)
val result = rightResultOf(
val result =
underTest
.updateZone(newZone, AuthPrincipal(superUser, List.empty))
.value
)
.value.unsafeRunSync().toOption.get
result shouldBe a[ZoneChange]
}
@@ -331,11 +319,11 @@ class ZoneServiceSpec
.when(mockZoneRepo)
.getZone(newZone.id)
val result = rightResultOf(
val result =
underTest
.updateZone(newZone, supportUserAuth)
.value
)
.value.unsafeRunSync().toOption.get
result shouldBe a[ZoneChange]
}
@@ -346,7 +334,7 @@ class ZoneServiceSpec
.when(mockZoneRepo)
.getZone(newZone.id)
val error = leftResultOf(underTest.updateZone(newZone, okAuth).value)
val error = underTest.updateZone(newZone, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -356,13 +344,13 @@ class ZoneServiceSpec
.when(mockZoneRepo)
.getZone(newZone.id)
val result = rightResultOf(underTest.updateZone(newZone, okAuth).value)
val result = underTest.updateZone(newZone, okAuth).value.unsafeRunSync().toOption.get
result shouldBe a[ZoneChange]
}
"return an InvalidRequest if zone has a specified backend ID that is invalid" in {
val newZone = updateZoneAuthorized.copy(backendId = Some("badId"))
val error = leftResultOf(underTest.updateZone(newZone, okAuth).value)
val error = underTest.updateZone(newZone, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidRequest]
}
}
@@ -372,7 +360,7 @@ class ZoneServiceSpec
doReturn(IO.pure(Some(okZone))).when(mockZoneRepo).getZone(anyString)
val resultChange: ZoneChange =
rightResultOf(underTest.deleteZone(okZone.id, okAuth).map(_.asInstanceOf[ZoneChange]).value)
underTest.deleteZone(okZone.id, okAuth).map(_.asInstanceOf[ZoneChange]).value.unsafeRunSync().toOption.get
resultChange.zone.id shouldBe okZone.id
resultChange.changeType shouldBe ZoneChangeType.Delete
@@ -383,7 +371,7 @@ class ZoneServiceSpec
val noAuth = AuthPrincipal(TestDataLoader.okUser, Seq())
val error = leftResultOf(underTest.deleteZone(okZone.id, noAuth).value)
val error = underTest.deleteZone(okZone.id, noAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
}
@@ -393,7 +381,7 @@ class ZoneServiceSpec
doReturn(IO.pure(Some(okZone))).when(mockZoneRepo).getZone(anyString)
val resultChange: ZoneChange =
rightResultOf(underTest.syncZone(okZone.id, okAuth).map(_.asInstanceOf[ZoneChange]).value)
underTest.syncZone(okZone.id, okAuth).map(_.asInstanceOf[ZoneChange]).value.unsafeRunSync().toOption.get
resultChange.zone.id shouldBe okZone.id
resultChange.changeType shouldBe ZoneChangeType.Sync
@@ -405,7 +393,7 @@ class ZoneServiceSpec
val noAuth = AuthPrincipal(TestDataLoader.okUser, Seq())
val error = leftResultOf(underTest.syncZone(okZone.id, noAuth).value)
val error = underTest.syncZone(okZone.id, noAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
}
@@ -414,7 +402,7 @@ class ZoneServiceSpec
"fail with no zone returned" in {
doReturn(IO.pure(None)).when(mockZoneRepo).getZone("notAZoneId")
val error = leftResultOf(underTest.getZone("notAZoneId", okAuth).value)
val error = underTest.getZone("notAZoneId", okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[ZoneNotFoundError]
}
@@ -423,7 +411,7 @@ class ZoneServiceSpec
val noAuth = AuthPrincipal(TestDataLoader.okUser, Seq())
val error = leftResultOf(underTest.getZone(okZone.id, noAuth).value)
val error = underTest.getZone(okZone.id, noAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -471,7 +459,7 @@ class ZoneServiceSpec
goodGroup.name,
AccessLevel.Delete
)
val result: ZoneInfo = rightResultOf(underTest.getZone(zoneWithRules.id, abcAuth).value)
val result: ZoneInfo = underTest.getZone(zoneWithRules.id, abcAuth).value.unsafeRunSync().toOption.get
result shouldBe expectedZoneInfo
}
@@ -485,14 +473,14 @@ class ZoneServiceSpec
val expectedZoneInfo =
ZoneInfo(abcZone, ZoneACLInfo(Set()), "Unknown group name", AccessLevel.Delete)
val result: ZoneInfo = rightResultOf(underTest.getZone(abcZone.id, abcAuth).value)
val result: ZoneInfo = underTest.getZone(abcZone.id, abcAuth).value.unsafeRunSync().toOption.get
result shouldBe expectedZoneInfo
}
"return a zone by name with failure when no zone is found" in {
doReturn(IO.pure(None)).when(mockZoneRepo).getZoneByName("someZoneName.")
val error = leftResultOf(underTest.getZoneByName("someZoneName", okAuth).value)
val error = underTest.getZoneByName("someZoneName", okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[ZoneNotFoundError]
}
@@ -518,7 +506,7 @@ class ZoneServiceSpec
.listZones(abcAuth, None, None, 100, false)
doReturn(IO.pure(Set(abcGroup))).when(mockGroupRepo).getGroups(any[Set[String]])
val result: ListZonesResponse = rightResultOf(underTest.listZones(abcAuth).value)
val result: ListZonesResponse = underTest.listZones(abcAuth).value.unsafeRunSync().toOption.get
result.zones shouldBe List()
result.maxItems shouldBe 100
result.startFrom shouldBe None
@@ -535,7 +523,7 @@ class ZoneServiceSpec
.when(mockGroupRepo)
.getGroups(any[Set[String]])
val result: ListZonesResponse = rightResultOf(underTest.listZones(abcAuth).value)
val result: ListZonesResponse = underTest.listZones(abcAuth).value.unsafeRunSync().toOption.get
result.zones shouldBe List(abcZoneSummary)
result.maxItems shouldBe 100
result.startFrom shouldBe None
@@ -553,7 +541,7 @@ class ZoneServiceSpec
.getGroups(any[Set[String]])
val result: ListZonesResponse =
rightResultOf(underTest.listZones(abcAuth, ignoreAccess = true).value)
underTest.listZones(abcAuth, ignoreAccess = true).value.unsafeRunSync().toOption.get
result.zones shouldBe List(abcZoneSummary, xyzZoneSummary)
result.maxItems shouldBe 100
result.startFrom shouldBe None
@@ -573,7 +561,7 @@ class ZoneServiceSpec
// When searchByAdminGroup is true, zones are filtered by admin group name given in nameFilter
val result: ListZonesResponse =
rightResultOf(underTest.listZones(abcAuth, Some("abcGroup"), None, 100, searchByAdminGroup = true, ignoreAccess = true).value)
underTest.listZones(abcAuth, Some("abcGroup"), None, 100, searchByAdminGroup = true, ignoreAccess = true).value.unsafeRunSync().toOption.get
result.zones shouldBe List(abcZoneSummary)
result.maxItems shouldBe 100
result.startFrom shouldBe None
@@ -592,7 +580,7 @@ class ZoneServiceSpec
// When searchByAdminGroup is false, zone name given in nameFilter is returned
val result: ListZonesResponse =
rightResultOf(underTest.listZones(abcAuth, Some("abcZone"), None, 100, searchByAdminGroup = false, ignoreAccess = true).value)
underTest.listZones(abcAuth, Some("abcZone"), None, 100, searchByAdminGroup = false, ignoreAccess = true).value.unsafeRunSync().toOption.get
result.zones shouldBe List(abcZoneSummary)
result.maxItems shouldBe 100
result.startFrom shouldBe None
@@ -607,7 +595,7 @@ class ZoneServiceSpec
.listZones(abcAuth, None, None, 100, false)
doReturn(IO.pure(Set(okGroup))).when(mockGroupRepo).getGroups(any[Set[String]])
val result: ListZonesResponse = rightResultOf(underTest.listZones(abcAuth).value)
val result: ListZonesResponse = underTest.listZones(abcAuth).value.unsafeRunSync().toOption.get
val expectedZones =
List(abcZoneSummary, xyzZoneSummary).map(_.copy(adminGroupName = "Unknown group name"))
result.zones shouldBe expectedZones
@@ -634,7 +622,7 @@ class ZoneServiceSpec
.getGroups(any[Set[String]])
val result: ListZonesResponse =
rightResultOf(underTest.listZones(abcAuth, maxItems = 2).value)
underTest.listZones(abcAuth, maxItems = 2).value.unsafeRunSync().toOption.get
result.zones shouldBe List(abcZoneSummary, xyzZoneSummary)
result.maxItems shouldBe 2
result.startFrom shouldBe None
@@ -660,7 +648,7 @@ class ZoneServiceSpec
.getGroups(any[Set[String]])
val result: ListZonesResponse =
rightResultOf(underTest.listZones(abcAuth, nameFilter = Some("foo"), maxItems = 2).value)
underTest.listZones(abcAuth, nameFilter = Some("foo"), maxItems = 2).value.unsafeRunSync().toOption.get
result.zones shouldBe List(abcZoneSummary, xyzZoneSummary)
result.nameFilter shouldBe Some("foo")
result.nextId shouldBe Some("zone2.")
@@ -684,7 +672,7 @@ class ZoneServiceSpec
.getGroups(any[Set[String]])
val result: ListZonesResponse =
rightResultOf(underTest.listZones(abcAuth, startFrom = Some("zone4."), maxItems = 2).value)
underTest.listZones(abcAuth, startFrom = Some("zone4."), maxItems = 2).value.unsafeRunSync().toOption.get
result.zones shouldBe List(abcZoneSummary, xyzZoneSummary)
result.startFrom shouldBe Some("zone4.")
}
@@ -707,7 +695,7 @@ class ZoneServiceSpec
.getGroups(any[Set[String]])
val result: ListZonesResponse =
rightResultOf(underTest.listZones(abcAuth, startFrom = Some("zone4."), maxItems = 2).value)
underTest.listZones(abcAuth, startFrom = Some("zone4."), maxItems = 2).value.unsafeRunSync().toOption.get
result.zones shouldBe List(abcZoneSummary, xyzZoneSummary)
result.nextId shouldBe Some("zone6.")
}
@@ -723,7 +711,7 @@ class ZoneServiceSpec
.listZoneChanges(okZone.id, startFrom = None, maxItems = 100)
val result: ListZoneChangesResponse =
rightResultOf(underTest.listZoneChanges(okZone.id, okAuth).value)
underTest.listZoneChanges(okZone.id, okAuth).value.unsafeRunSync().toOption.get
result.zoneChanges shouldBe List(zoneUpdate, zoneCreate)
result.zoneId shouldBe okZone.id
@@ -738,7 +726,7 @@ class ZoneServiceSpec
.listZoneChanges(okZone.id, startFrom = None, maxItems = 100)
val result: ListZoneChangesResponse =
rightResultOf(underTest.listZoneChanges(okZone.id, okAuth).value)
underTest.listZoneChanges(okZone.id, okAuth).value.unsafeRunSync().toOption.get
result.zoneChanges shouldBe empty
result.zoneId shouldBe okZone.id
@@ -749,7 +737,7 @@ class ZoneServiceSpec
.when(mockZoneRepo)
.getZone(zoneNotAuthorized.id)
val error = leftResultOf(underTest.listZoneChanges(zoneNotAuthorized.id, okAuth).value)
val error = underTest.listZoneChanges(zoneNotAuthorized.id, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -764,7 +752,7 @@ class ZoneServiceSpec
.listZoneChanges(zoneId = okZone.id, startFrom = None, maxItems = 100)
val result: ListZoneChangesResponse =
rightResultOf(underTest.listZoneChanges(okZone.id, okAuth).value)
underTest.listZoneChanges(okZone.id, okAuth).value.unsafeRunSync().toOption.get
result.zoneChanges.head shouldBe zoneUpdate
result.zoneChanges(1) shouldBe zoneCreate
@@ -776,19 +764,18 @@ class ZoneServiceSpec
doReturn(IO.pure(Some(zoneNotAuthorized))).when(mockZoneRepo).getZone(anyString)
val error =
leftResultOf(underTest.addACLRule(zoneNotAuthorized.id, baseAclRuleInfo, okAuth).value)
underTest.addACLRule(zoneNotAuthorized.id, baseAclRuleInfo, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
"generate a zone update if the request is valid" in {
doReturn(IO.pure(Some(okZone))).when(mockZoneRepo).getZone(anyString)
val result: ZoneChange = rightResultOf(
val result: ZoneChange =
underTest
.addACLRule(okZone.id, userAclRuleInfo, okAuth)
.map(_.asInstanceOf[ZoneChange])
.value
)
.value.unsafeRunSync().toOption.get
result.changeType shouldBe ZoneChangeType.Update
result.zone.acl.rules.size shouldBe 1
@@ -800,7 +787,7 @@ class ZoneServiceSpec
val invalidRegexMaskRuleInfo = baseAclRuleInfo.copy(recordMask = Some("x{5,-3}"))
val error =
leftResultOf(underTest.addACLRule(okZone.id, invalidRegexMaskRuleInfo, okAuth).value)
underTest.addACLRule(okZone.id, invalidRegexMaskRuleInfo, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe an[InvalidRequest]
}
}
@@ -810,7 +797,7 @@ class ZoneServiceSpec
doReturn(IO.pure(Some(zoneNotAuthorized))).when(mockZoneRepo).getZone(anyString)
val error =
leftResultOf(underTest.deleteACLRule(zoneNotAuthorized.id, baseAclRuleInfo, okAuth).value)
underTest.deleteACLRule(zoneNotAuthorized.id, baseAclRuleInfo, okAuth).value.unsafeRunSync().swap.toOption.get
error shouldBe a[NotAuthorizedError]
}
@@ -819,12 +806,11 @@ class ZoneServiceSpec
val zone = okZone.copy(acl = acl)
doReturn(IO.pure(Some(zone))).when(mockZoneRepo).getZone(anyString)
val result: ZoneChange = rightResultOf(
val result: ZoneChange =
underTest
.deleteACLRule(zone.id, userAclRuleInfo, okAuth)
.map(_.asInstanceOf[ZoneChange])
.value
)
.value.unsafeRunSync().toOption.get
result.changeType shouldBe ZoneChangeType.Update
result.zone.acl.rules.size shouldBe 0

View File

@@ -24,7 +24,6 @@ import org.mockito.Mockito.{doReturn, verify}
import org.scalatest.BeforeAndAfterEach
import org.scalatest.wordspec.AnyWordSpec
import org.scalatestplus.mockito.MockitoSugar
import vinyldns.api.CatsHelpers
import vinyldns.api.repository.InMemoryBatchChangeRepository
import vinyldns.core.domain.batch._
import vinyldns.core.domain.record._
@@ -35,8 +34,7 @@ import scala.concurrent.ExecutionContext
class BatchChangeHandlerSpec
extends AnyWordSpec
with MockitoSugar
with BeforeAndAfterEach
with CatsHelpers {
with BeforeAndAfterEach {
implicit val ec: ExecutionContext = scala.concurrent.ExecutionContext.global
implicit val contextShift: ContextShift[IO] = IO.contextShift(ec)
@@ -77,7 +75,7 @@ class BatchChangeHandlerSpec
"notify on batch change complete" in {
doReturn(IO.unit).when(mockNotifier).notify(any[Notification[_]])
await(batchRepo.save(completedBatchChange))
batchRepo.save(completedBatchChange).unsafeRunSync()
BatchChangeHandler
.process(batchRepo, notifiers, BatchChangeCommand(completedBatchChange.id))
@@ -92,7 +90,7 @@ class BatchChangeHandlerSpec
val partiallyFailedBatchChange =
completedBatchChange.copy(changes = List(addChange.copy(status = SingleChangeStatus.Failed)))
await(batchRepo.save(partiallyFailedBatchChange))
batchRepo.save(partiallyFailedBatchChange).unsafeRunSync()
BatchChangeHandler
.process(batchRepo, notifiers, BatchChangeCommand(partiallyFailedBatchChange.id))

View File

@@ -29,7 +29,6 @@ import org.scalatest.{BeforeAndAfterEach, EitherValues}
import vinyldns.api.backend.dns.DnsProtocol.{NotAuthorized, TryAgain}
import vinyldns.api.engine.RecordSetChangeHandler.{AlreadyApplied, ReadyToApply, Requeue}
import vinyldns.api.repository.InMemoryBatchChangeRepository
import vinyldns.api.CatsHelpers
import vinyldns.core.domain.batch.{BatchChange, BatchChangeApprovalStatus, SingleAddChange, SingleChangeStatus}
import vinyldns.core.domain.record.RecordType.RecordType
import vinyldns.core.domain.record.{ChangeSet, RecordChangeRepository, RecordSetRepository, _}
@@ -46,7 +45,6 @@ class RecordSetChangeHandlerSpec
with Matchers
with MockitoSugar
with BeforeAndAfterEach
with CatsHelpers
with EitherValues
with TransactionProvider {
@@ -116,7 +114,7 @@ class RecordSetChangeHandlerSpec
batchRepo.clear()
// seed the linked batch change in the DB
await(batchRepo.save(batchChange))
batchRepo.save(batchChange).unsafeRunSync()
doReturn(IO.pure(Nil))
.when(mockRsRepo)
@@ -151,7 +149,7 @@ class RecordSetChangeHandlerSpec
savedCs.status shouldBe ChangeSetStatus.Complete
savedCs.changes.head.status shouldBe RecordSetChangeStatus.Complete
val batchChangeUpdates = await(batchRepo.getBatchChange(batchChange.id))
val batchChangeUpdates = batchRepo.getBatchChange(batchChange.id).unsafeRunSync()
val updatedSingleChanges = completeCreateAAAASingleChanges.map { ch =>
ch.copy(
systemMessage= None,
@@ -197,7 +195,7 @@ class RecordSetChangeHandlerSpec
verify(mockBackend).applyChange(rsChange)
verify(mockBackend, times(2)).resolve(rs.name, rsChange.zone.name, rs.typ)
val batchChangeUpdates = await(batchRepo.getBatchChange(batchChange.id))
val batchChangeUpdates = batchRepo.getBatchChange(batchChange.id).unsafeRunSync()
val updatedSingleChanges = completeCreateAAAASingleChanges.map { ch =>
ch.copy(
systemMessage= None,
@@ -248,7 +246,7 @@ class RecordSetChangeHandlerSpec
// make sure we only called resolve once when validating, ensures that verify was not called
verify(mockBackend, times(1)).resolve(rs.name, rsChange.zone.name, rs.typ)
val batchChangeUpdates = await(batchRepo.getBatchChange(batchChange.id))
val batchChangeUpdates = batchRepo.getBatchChange(batchChange.id).unsafeRunSync()
val updatedSingleChanges = completeCreateAAAASingleChanges.map { ch =>
ch.copy(
status = SingleChangeStatus.Failed,
@@ -294,7 +292,7 @@ class RecordSetChangeHandlerSpec
// we will retry the verify 3 times based on the mock setup
verify(mockBackend, times(2)).resolve(rs.name, rsChange.zone.name, rs.typ)
val batchChangeUpdates = await(batchRepo.getBatchChange(batchChange.id))
val batchChangeUpdates = batchRepo.getBatchChange(batchChange.id).unsafeRunSync()
val updatedSingleChanges = completeCreateAAAASingleChanges.map { ch =>
ch.copy(
status = SingleChangeStatus.Failed,
@@ -350,7 +348,7 @@ class RecordSetChangeHandlerSpec
verify(mockBackend, never()).applyChange(rsChange)
verify(mockBackend, times(1)).resolve(rs.name, rsChange.zone.name, rs.typ)
val batchChangeUpdates = await(batchRepo.getBatchChange(batchChange.id))
val batchChangeUpdates = batchRepo.getBatchChange(batchChange.id).unsafeRunSync()
val updatedSingleChanges = completeCreateAAAASingleChanges.map { ch =>
ch.copy(
status = SingleChangeStatus.Failed,
@@ -393,7 +391,7 @@ class RecordSetChangeHandlerSpec
verify(mockBackend, times(1)).applyChange(rsChange)
verify(mockBackend, times(1)).resolve(rs.name, rsChange.zone.name, rs.typ)
val batchChangeUpdates = await(batchRepo.getBatchChange(batchChange.id))
val batchChangeUpdates = batchRepo.getBatchChange(batchChange.id).unsafeRunSync()
val updatedSingleChanges = completeCreateAAAASingleChanges.map { ch =>
ch.copy(
status = SingleChangeStatus.Failed,
@@ -448,7 +446,7 @@ class RecordSetChangeHandlerSpec
// make sure we never called resolve, as we skip validate step and verify
verify(mockBackend, never).resolve(rs.name, rsChange.zone.name, rs.typ)
val batchChangeUpdates = await(batchRepo.getBatchChange(batchChange.id))
val batchChangeUpdates = batchRepo.getBatchChange(batchChange.id).unsafeRunSync()
val updatedSingleChanges = completeCreateAAAASingleChanges.map { ch =>
ch.copy(
status = SingleChangeStatus.Complete,
@@ -602,7 +600,7 @@ class RecordSetChangeHandlerSpec
savedCs.status shouldBe ChangeSetStatus.Complete
savedCs.changes.head.status shouldBe RecordSetChangeStatus.Complete
val batchChangeUpdates = await(batchRepo.getBatchChange(batchChange.id))
val batchChangeUpdates = batchRepo.getBatchChange(batchChange.id).unsafeRunSync()
val updatedSingleChanges = completeCreateAAAASingleChanges.map { ch =>
ch.copy(
systemMessage= None,