public void PublishSfVacancyFunctionTest()
        {
            //Arrange
            var fakeRepo   = A.Fake <IApprenticeshipVacancyRepository>();
            var fakeLogger = A.Fake <IApplicationLogger>();

            //Act
            var publishFunc = new PublishSfVacancyFunction(fakeRepo, null, fakeLogger);

            //Assert
            publishFunc.Should().NotBe(null);
        }
        public void GetOutputTest()
        {
            //Assert
            const string testUrl    = "testURL";
            var          queueItem  = DataHelper.GetDummyProjectedVacancyDetails();
            var          fakeRepo   = A.Fake <IApprenticeshipVacancyRepository>();
            var          fakeLogger = A.Fake <IApplicationLogger>();

            A.CallTo(() => fakeRepo.PublishAsync(A <ApprenticeshipVacancyDetails> ._, A <Guid> ._)).Returns(testUrl);
            var fakeTokenClient = A.Fake <ITokenClient>();
            var publishFunc     = new PublishSfVacancyFunction(fakeRepo, fakeTokenClient, fakeLogger);

            //Act
            publishFunc.ExecuteAsync(queueItem).GetAwaiter().GetResult();

            //Assert
            publishFunc.GetOutput().Vacancies.FirstOrDefault()?.UrlName.Should().BeEquivalentTo(testUrl);
        }
        public void ExecuteAsyncTest()
        {
            //Arrange
            const string testUrl         = "testURL";
            var          queueItem       = DataHelper.GetDummyProjectedVacancyDetails();
            var          fakeRepo        = A.Fake <IApprenticeshipVacancyRepository>();
            var          fakeTokenClient = A.Fake <ITokenClient>();
            var          fakeLogger      = A.Fake <IApplicationLogger>();

            A.CallTo(() => fakeRepo.PublishAsync(A <ApprenticeshipVacancyDetails> ._, A <Guid> ._)).Returns(testUrl);
            var publishFunc = new PublishSfVacancyFunction(fakeRepo, fakeTokenClient, fakeLogger);

            //Act
            publishFunc.ExecuteAsync(queueItem).GetAwaiter().GetResult();

            //Assert
            A.CallTo(() => fakeRepo.DeleteExistingAsync(A <string> ._)).MustHaveHappened();
            A.CallTo(() => fakeRepo.PublishAsync(A <ApprenticeshipVacancyDetails> ._, A <Guid> ._)).MustHaveHappened(Repeated.Exactly.Times(queueItem.Vacancies.Count()));
            A.CallTo(() => fakeTokenClient.SetAccessToken(A <string> ._)).MustHaveHappened();
        }