diff --git a/modules/api/src/it/scala/vinyldns/api/domain/record/RecordSetServiceIntegrationSpec.scala b/modules/api/src/it/scala/vinyldns/api/domain/record/RecordSetServiceIntegrationSpec.scala index f5daade4e..5f717913a 100644 --- a/modules/api/src/it/scala/vinyldns/api/domain/record/RecordSetServiceIntegrationSpec.scala +++ b/modules/api/src/it/scala/vinyldns/api/domain/record/RecordSetServiceIntegrationSpec.scala @@ -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] } diff --git a/modules/api/src/test/scala/vinyldns/api/CatsHelpers.scala b/modules/api/src/test/scala/vinyldns/api/CatsHelpers.scala index c3608c754..6064531e4 100644 --- a/modules/api/src/test/scala/vinyldns/api/CatsHelpers.scala +++ b/modules/api/src/test/scala/vinyldns/api/CatsHelpers.scala @@ -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") diff --git a/modules/api/src/test/scala/vinyldns/api/ResultHelpers.scala b/modules/api/src/test/scala/vinyldns/api/ResultHelpers.scala index 2fe473fb8..30ecf36df 100644 --- a/modules/api/src/test/scala/vinyldns/api/ResultHelpers.scala +++ b/modules/api/src/test/scala/vinyldns/api/ResultHelpers.scala @@ -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 diff --git a/modules/api/src/test/scala/vinyldns/api/domain/auth/MembershipAuthPrincipalProviderSpec.scala b/modules/api/src/test/scala/vinyldns/api/domain/auth/MembershipAuthPrincipalProviderSpec.scala index 6558c1c69..fb5c66c8a 100644 --- a/modules/api/src/test/scala/vinyldns/api/domain/auth/MembershipAuthPrincipalProviderSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/domain/auth/MembershipAuthPrincipalProviderSpec.scala @@ -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() diff --git a/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeConverterSpec.scala b/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeConverterSpec.scala index 8a46c66fc..0fb8d1497 100644 --- a/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeConverterSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeConverterSpec.scala @@ -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 } } diff --git a/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeInterfacesSpec.scala b/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeInterfacesSpec.scala index fffcd46dd..ec9f21bb9 100644 --- a/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeInterfacesSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeInterfacesSpec.scala @@ -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() } } diff --git a/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeServiceSpec.scala b/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeServiceSpec.scala index e184c8c6b..5ed6526ca 100644 --- a/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeServiceSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/domain/batch/BatchChangeServiceSpec.scala @@ -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) } diff --git a/modules/api/src/test/scala/vinyldns/api/domain/membership/MembershipServiceSpec.scala b/modules/api/src/test/scala/vinyldns/api/domain/membership/MembershipServiceSpec.scala index 923f89959..bbceb1dba 100644 --- a/modules/api/src/test/scala/vinyldns/api/domain/membership/MembershipServiceSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/domain/membership/MembershipServiceSpec.scala @@ -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] } } diff --git a/modules/api/src/test/scala/vinyldns/api/domain/record/RecordSetServiceSpec.scala b/modules/api/src/test/scala/vinyldns/api/domain/record/RecordSetServiceSpec.scala index 7f704f437..ca583bc6e 100644 --- a/modules/api/src/test/scala/vinyldns/api/domain/record/RecordSetServiceSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/domain/record/RecordSetServiceSpec.scala @@ -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." } } diff --git a/modules/api/src/test/scala/vinyldns/api/domain/zone/ZoneConnectionValidatorSpec.scala b/modules/api/src/test/scala/vinyldns/api/domain/zone/ZoneConnectionValidatorSpec.scala index 01dc10bbb..793cf6366 100644 --- a/modules/api/src/test/scala/vinyldns/api/domain/zone/ZoneConnectionValidatorSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/domain/zone/ZoneConnectionValidatorSpec.scala @@ -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!") } diff --git a/modules/api/src/test/scala/vinyldns/api/domain/zone/ZoneServiceSpec.scala b/modules/api/src/test/scala/vinyldns/api/domain/zone/ZoneServiceSpec.scala index 69faad71a..d1a6c7bbe 100644 --- a/modules/api/src/test/scala/vinyldns/api/domain/zone/ZoneServiceSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/domain/zone/ZoneServiceSpec.scala @@ -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 diff --git a/modules/api/src/test/scala/vinyldns/api/engine/BatchChangeHandlerSpec.scala b/modules/api/src/test/scala/vinyldns/api/engine/BatchChangeHandlerSpec.scala index ce2561f28..9a044b51f 100644 --- a/modules/api/src/test/scala/vinyldns/api/engine/BatchChangeHandlerSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/engine/BatchChangeHandlerSpec.scala @@ -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)) diff --git a/modules/api/src/test/scala/vinyldns/api/engine/RecordSetChangeHandlerSpec.scala b/modules/api/src/test/scala/vinyldns/api/engine/RecordSetChangeHandlerSpec.scala index 5ed73ebc4..bcab42aa2 100644 --- a/modules/api/src/test/scala/vinyldns/api/engine/RecordSetChangeHandlerSpec.scala +++ b/modules/api/src/test/scala/vinyldns/api/engine/RecordSetChangeHandlerSpec.scala @@ -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,