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

            //Act
            var avRepository = new AVRepository(fakeRepo, fakeLogger);

            //Assert
            avRepository.Should().NotBe(null);
        }
        public void GetOrphanedApprenticeshipVacanciesAsyncTest()
        {
            var fakeRepo          = A.Fake <IAVSitefinityOdataRepository>();
            var fakeLogger        = A.Fake <IApplicationLogger>();
            var vacanciesToDelete = DataHelper.GetDummySfApprenticeshipVacancies(2);

            A.CallTo(() => fakeRepo.GetManyAsync(A <Expression <Func <SfApprenticeshipVacancy, bool> > > ._)).Returns(vacanciesToDelete);

            var avRepository = new AVRepository(fakeRepo, fakeLogger);

            //Act
            var results = avRepository.GetOrphanedApprenticeshipVacanciesAsync();

            A.CallTo(() => fakeRepo.GetManyAsync(A <Expression <Func <SfApprenticeshipVacancy, bool> > > .That.Matches(m => LinqExpressionsTestHelper.IsExpressionEqual(m, v => v.SOCCode == null || (v.SOCCode.apprenticeshipstandards.Count() == 0 && v.SOCCode.apprenticeshipframeworks.Count() == 0))))).MustHaveHappened();
        }
        public void DeleteByIdAsyncTest()
        {
            //Arrange
            var fakeRepo        = A.Fake <IAVSitefinityOdataRepository>();
            var fakeLogger      = A.Fake <IApplicationLogger>();
            var dummyDeleteGuid = new Guid();

            A.CallTo(() => fakeRepo.DeleteByIdAsync(dummyDeleteGuid)).Returns(Task.CompletedTask);
            var avRepository = new AVRepository(fakeRepo, fakeLogger);

            //Act
            avRepository.DeleteByIdAsync(dummyDeleteGuid).GetAwaiter().GetResult();

            //Assert
            A.CallTo(() => fakeRepo.DeleteByIdAsync(dummyDeleteGuid)).MustHaveHappened(Repeated.Exactly.Once);
        }
        public void PublishAsyncTest()
        {
            //Arrange
            var vacancyDetails   = DataHelper.GetDummyApprenticeshipVacancyDetails();
            var vacancyToPublish = DataHelper.GetDummySfApprenticeshipVacancies(1).FirstOrDefault();
            var fakeRepo         = A.Fake <IAVSitefinityOdataRepository>();
            var fakeLogger       = A.Fake <IApplicationLogger>();

            A.CallTo(() => fakeRepo.AddAsync(A <SfApprenticeshipVacancy> ._)).Returns(vacancyToPublish);
            var avRepository = new AVRepository(fakeRepo, fakeLogger);

            //Act
            avRepository.PublishAsync(vacancyDetails, new Guid()).GetAwaiter().GetResult();

            //Assert
            A.CallTo(() => fakeRepo.AddAsync(A <SfApprenticeshipVacancy> ._)).MustHaveHappened();
            A.CallTo(() => fakeRepo.AddRelatedAsync(A <string> ._, A <Guid> ._)).MustHaveHappened();
            A.CallTo(() => fakeRepo.UnlockAndPublishAsync(A <string> ._)).MustHaveHappened();
        }
        public void DeleteExistingAsyncTest(int numberofVacancies)
        {
            //Arrange
            var vacanciesToDelete = DataHelper.GetDummySfApprenticeshipVacancies(numberofVacancies);
            var fakeRepo          = A.Fake <IAVSitefinityOdataRepository>();
            var fakeLogger        = A.Fake <IApplicationLogger>();
            var dummySOC          = nameof(SfSocCode.SOCCode);

            A.CallTo(() => fakeRepo.GetManyAsync(A <Expression <Func <SfApprenticeshipVacancy, bool> > > ._)).Returns(vacanciesToDelete);
            A.CallTo(() => fakeRepo.DeleteAsync(A <SfApprenticeshipVacancy> ._)).Returns(Task.CompletedTask);

            var avRepository = new AVRepository(fakeRepo, fakeLogger);

            //Act
            avRepository.DeleteExistingAsync(dummySOC).GetAwaiter().GetResult();

            //Assert
            A.CallTo(() => fakeRepo.GetManyAsync(A <Expression <Func <SfApprenticeshipVacancy, bool> > > ._)).MustHaveHappened();
            A.CallTo(() => fakeRepo.DeleteAsync(A <SfApprenticeshipVacancy> ._)).MustHaveHappened(Repeated.Exactly.Times(numberofVacancies));
        }