write unit tests using weaver for the following:

package nl.dpes.job.poster.api.service.apikey

import cats.effect.Sync
import cats.implicits.catsSyntaxApplicativeError
import cats.syntax.either._
import cats.syntax.flatMap._
import cats.syntax.functor._
import nl.dpes.job.poster.api.service.BearerToken
import nl.dpes.job.poster.api.service.recruiter.RecruiterService.{RecruiterForbidden, RecruiterUnauthorized}
import nl.dpes.job.poster.api.service.recruiter.{AccessToken, RecruiterService}
import nl.dpes.job.poster.api.{ErrorMessage, Forbidden, Unauthorized}

trait ApiKeyService[F[_]] {
  def generateKey(bearerToken: BearerToken)(x: Unit): F[Either[ErrorMessage, ApiKey]]
}

object ApiKeyService {

  def apply[F[_]: Sync](recruiterService: RecruiterService[F], repository: ApiKeyRepository[F]): ApiKeyService[F] =
    new ApiKeyService[F] {

      override def generateKey(bearerToken: BearerToken)(x: Unit): F[Either[ErrorMessage, ApiKey]] = (for {
        recruiter <- recruiterService.getRecruiter(AccessToken(bearerToken.token))
        key       <- ApiKey.generate
        _         <- repository.storeKey(recruiter.salesforceId, key)
      } yield key.asRight[ErrorMessage]).recover {
        case RecruiterUnauthorized(message) => Unauthorized(message).asLeft
        case RecruiterForbidden(message)    => Forbidden(message).asLeft
      }
    }
}
