public void ImportForSocsParmeterNullTest()
        {
            // Arrange
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            Assert.Throws <ArgumentNullException>(() => skillsImportService.ImportForSocs(null));
        }
        public void ImportForSocsTest(int numberOfJobProfiles)
        {
            var numberOfRelatedSkills = 2;
            var dummySoc         = GetSOCs(1).FirstOrDefault();
            var dummyJobProfiles = GetLiveImportJobProfiles(numberOfJobProfiles);

            var dummySocMappingStatus = new SocMappingStatus {
                AwaitingUpdate = 1, SelectedForUpdate = 2, UpdateCompleted = 3
            };

            A.CallTo(() => fakeSkillsFrameworkService.GetSocMappingStatus()).Returns(dummySocMappingStatus);
            A.CallTo(() => fakeSkillsFrameworkService.SetSocStatusCompleted(A <SocCode> ._)).DoesNothing();
            A.CallTo(() => fakeSkillsFrameworkService.SetSocStatusSelectedForUpdate(A <SocCode> ._)).DoesNothing();
            A.CallTo(() => fakeSocSkillMatrixRepository.UpsertSocSkillMatrix(A <SocSkillMatrix> ._)).DoesNothing();
            A.CallTo(() => fakeJobProfileSocCodeRepository.GetBySocCode(A <string> ._)).Returns(dummySoc);
            A.CallTo(() => fakeJobProfileSocCodeRepository.GetLiveJobProfilesBySocCode(dummySoc.SOCCode)).Returns(dummyJobProfiles);
            A.CallTo(() => fakeSkillsFrameworkService.GetDigitalSkillLevel(A <string> ._)).Returns(DigitalSkillsLevel.Level3);
            A.CallTo(() => fakeSkillsFrameworkService.GetRelatedSkillMapping(A <string> ._)).Returns(GetRelatedSkill(numberOfRelatedSkills));
            A.CallTo(() => fakeJobProfileRepository.UpdateSocSkillMatrices(A <JobProfileOverloadForWhatItTakes> ._, A <IEnumerable <SocSkillMatrix> > ._)).Returns(new RepoActionResult {
                Success = true
            });
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            //Act
            skillsImportService.ImportForSocs(string.Join(",", dummyJobProfiles.ToList().Select(s => s.SOCCode)));
            A.CallTo(() => fakeSkillsFrameworkService.GetSocMappingStatus()).MustHaveHappened(2, Times.Exactly);
            A.CallTo(() => fakeSkillsFrameworkService.SetSocStatusCompleted(A <SocCode> ._)).MustHaveHappened(numberOfJobProfiles, Times.Exactly);
        }
        public void ResetStartedSocStatusTest()
        {
            // Arrange
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            A.CallTo(() => fakeSkillsFrameworkService.ResetStartedSocStatus()).DoesNothing();

            // Act
            skillsImportService.ResetStartedSocStatus();
            A.CallTo(() => fakeSkillsFrameworkService.ResetStartedSocStatus()).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeReportAuditRepository.CreateAudit("SummaryDetails", A <string> ._)).MustHaveHappened(2, Times.Exactly);
        }
        public void GetNextBatchOfSOCsToImportTests(int batchSize)
        {
            //Arrange
            var dummySocs           = GetSOCs(batchSize);
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            A.CallTo(() => fakeSkillsFrameworkService.GetNextBatchSocMappingsForUpdate(batchSize)).Returns(dummySocs);

            // Act
            var result = skillsImportService.GetNextBatchOfSOCsToImport(batchSize);

            A.CallTo(() => fakeSkillsFrameworkService.GetNextBatchSocMappingsForUpdate(batchSize)).MustHaveHappenedOnceExactly();

            result.Should().BeEquivalentTo(string.Join(",", dummySocs.ToList().Select(s => s.SOCCode)));
        }
        public void GetSocMappingStatusTest()
        {
            // Arrange
            var dummySocMappingStatus = new SocMappingStatus {
                AwaitingUpdate = 1, SelectedForUpdate = 2, UpdateCompleted = 3
            };
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            A.CallTo(() => fakeSkillsFrameworkService.GetSocMappingStatus()).Returns(dummySocMappingStatus);

            // Act
            var result = skillsImportService.GetSocMappingStatus();

            A.CallTo(() => fakeSkillsFrameworkService.GetSocMappingStatus()).MustHaveHappenedOnceExactly();
            result.Should().BeEquivalentTo(dummySocMappingStatus);
        }
        public void ImportForSingleSocNoSocTest()
        {
            var dummySoc = GetSOCs(1).FirstOrDefault();

            //Arrange
            A.CallTo(() => fakeSkillsFrameworkService.SetSocStatusCompleted(A <SocCode> ._)).DoesNothing();
            A.CallTo(() => fakeJobProfileSocCodeRepository.GetBySocCode(A <string> ._)).Returns(null);
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            //Act
            skillsImportService.ImportForSingleSoc(dummySoc.SOCCode);

            //asserts
            A.CallTo(() => fakeReportAuditRepository.CreateAudit("ErrorDetails", A <string> ._)).MustHaveHappened();
            A.CallTo(() => fakeSkillsFrameworkService.SetSocStatusCompleted(A <SocCode> ._)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeReportAuditRepository.CreateAudit("ActionDetails", A <string> ._)).MustHaveHappened();
        }
        public void ImportFrameworkSkillsTest(int numberOfskills)
        {
            // Arrange
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            //Dummies and Fakes
            A.CallTo(() => fakeSkillsFrameworkService.GetAllTranslations()).Returns(GetFrameworkSkills(numberOfskills));
            A.CallTo(() => fakeReportAuditRepository.CreateAudit(A <string> ._, A <string> ._)).DoesNothing();
            A.CallTo(() => fakeFrameworkSkillRepository.GetFrameworkSkills()).Returns(Enumerable.Empty <FrameworkSkill>().AsQueryable());
            A.CallTo(() => fakeFrameworkSkillRepository.UpsertFrameworkSkill(A <FrameworkSkill> ._)).Returns(new RepoActionResult());

            // Act
            skillsImportService.ImportFrameworkSkills();

            // Assert
            A.CallTo(() => fakeSkillsFrameworkService.GetAllTranslations()).MustHaveHappened();
            A.CallTo(() => fakeReportAuditRepository.CreateAudit(A <string> ._, A <string> ._)).MustHaveHappened();
            A.CallTo(() => fakeFrameworkSkillRepository.UpsertFrameworkSkill(A <FrameworkSkill> ._)).MustHaveHappened(numberOfskills, Times.Exactly);
        }
        public void ExportNewONetMappingsTest(string cMSSOCCode, string cMSOnetCode, bool expectToInsertNewSOCs, int numberAuditMatches)
        {
            // Arrange
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            A.CallTo(() => fakeSkillsFrameworkService.AddNewSOCMappings(A <List <SocCode> > ._)).DoesNothing();

            var SocCodesFromOnet = new List <SocCode>
            {
                new SocCode {
                    SOCCode = "ExistingSOC", ONetOccupationalCode = "TestONetCode"
                }
            };

            A.CallTo(() => fakeSkillsFrameworkService.GetAllSocMappings()).Returns(SocCodesFromOnet);

            var SocCodesFromCMS = new List <SocCode>
            {
                new SocCode {
                    SOCCode = cMSSOCCode, ONetOccupationalCode = cMSOnetCode
                }
            };

            A.CallTo(() => fakeJobProfileSocCodeRepository.GetSocCodes()).Returns(SocCodesFromCMS.AsQueryable());

            A.CallTo(() => fakeSkillsFrameworkService.AddNewSOCMappings(A <IEnumerable <SocCode> > ._)).DoesNothing();

            // Act
            skillsImportService.ExportNewONetMappings();

            //Asserts
            if (expectToInsertNewSOCs)
            {
                A.CallTo(() => fakeSkillsFrameworkService.AddNewSOCMappings(A <IEnumerable <SocCode> > ._)).MustHaveHappenedOnceExactly();
            }
            else
            {
                A.CallTo(() => fakeSkillsFrameworkService.AddNewSOCMappings(A <IEnumerable <SocCode> > ._)).MustNotHaveHappened();
            }

            A.CallTo(() => fakeReportAuditRepository.CreateAudit("SummaryDetails", A <string> ._)).MustHaveHappened(numberAuditMatches, Times.Exactly);
        }
        public void UpdateSocCodesOccupationalCodeTest(int numberOfSocs)
        {
            // Arrange
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            //Dummies and Fakes
            A.CallTo(() => fakeJobProfileSocCodeRepository.GetSocCodes()).Returns(GetSOCs(numberOfSocs));
            A.CallTo(() => fakeSkillsFrameworkService.GetAllSocMappings()).Returns(new List <SocCode>());
            A.CallTo(() => fakeReportAuditRepository.CreateAudit(A <string> ._, A <string> ._)).DoesNothing();
            A.CallTo(() => fakeJobProfileSocCodeRepository.UpdateSocOccupationalCode(A <SocCode> ._)).Returns(new RepoActionResult());

            // Act
            skillsImportService.UpdateSocCodesOccupationalCode();

            // Assert
            A.CallTo(() => fakeJobProfileSocCodeRepository.GetSocCodes()).MustHaveHappened();
            A.CallTo(() => fakeReportAuditRepository.CreateAudit(A <string> ._, A <string> ._)).MustHaveHappened();
            A.CallTo(() => fakeSkillsFrameworkService.GetAllSocMappings()).MustHaveHappened();
            A.CallTo(() => fakeJobProfileSocCodeRepository.UpdateSocOccupationalCode(A <SocCode> ._)).MustHaveHappened(numberOfSocs * 2, Times.OrLess);
        }
        public void UpdateSocCodesOccupationalCodeNullTest()
        {
            // Arrange
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            var SocCodesFromOnet = new List <SocCode>();

            SocCodesFromOnet.Add(new SocCode {
                SOCCode = "1", ONetOccupationalCode = null
            });
            SocCodesFromOnet.Add(new SocCode {
                SOCCode = "3", ONetOccupationalCode = ""
            });

            var SocCodesFromSitefinity = new List <SocCode>();

            SocCodesFromSitefinity.Add(new SocCode {
                SOCCode = "1", ONetOccupationalCode = ""
            });
            SocCodesFromSitefinity.Add(new SocCode {
                SOCCode = "3", ONetOccupationalCode = ""
            });

            //Dummies and Fakes
            A.CallTo(() => fakeJobProfileSocCodeRepository.GetSocCodes()).Returns(SocCodesFromSitefinity.AsQueryable());
            A.CallTo(() => fakeSkillsFrameworkService.GetAllSocMappings()).Returns(SocCodesFromOnet);
            A.CallTo(() => fakeReportAuditRepository.CreateAudit(A <string> ._, A <string> ._)).DoesNothing();
            A.CallTo(() => fakeJobProfileSocCodeRepository.UpdateSocOccupationalCode(A <SocCode> ._)).Returns(new RepoActionResult());

            // Act
            skillsImportService.UpdateSocCodesOccupationalCode();

            // Assert
            A.CallTo(() => fakeJobProfileSocCodeRepository.GetSocCodes()).MustHaveHappened();
            A.CallTo(() => fakeSkillsFrameworkService.GetAllSocMappings()).MustHaveHappened();
            A.CallTo(() => fakeJobProfileSocCodeRepository.UpdateSocOccupationalCode(A <SocCode> ._)).MustNotHaveHappened();
        }
        public void ImportForSingleSocJobProfileLockedTest(bool lockedJp)
        {
            var numberOfRelatedSkills = 2;
            var dummySoc         = GetSOCs(1).FirstOrDefault();
            var dummyJobProfiles = GetLiveImportJobProfiles(1, lockedJp);


            A.CallTo(() => fakeSkillsFrameworkService.SetSocStatusCompleted(A <SocCode> ._)).DoesNothing();
            A.CallTo(() => fakeSkillsFrameworkService.SetSocStatusSelectedForUpdate(A <SocCode> ._)).DoesNothing();
            A.CallTo(() => fakeSocSkillMatrixRepository.UpsertSocSkillMatrix(A <SocSkillMatrix> ._)).DoesNothing();

            A.CallTo(() => fakeJobProfileSocCodeRepository.GetBySocCode(A <string> ._)).Returns(dummySoc);
            A.CallTo(() => fakeJobProfileSocCodeRepository.GetLiveJobProfilesBySocCode(dummySoc.SOCCode)).Returns(dummyJobProfiles);
            A.CallTo(() => fakeSkillsFrameworkService.GetDigitalSkillLevel(A <string> ._)).Returns(DigitalSkillsLevel.Level3);
            A.CallTo(() => fakeSkillsFrameworkService.GetRelatedSkillMapping(A <string> ._)).Returns(GetRelatedSkill(numberOfRelatedSkills));
            A.CallTo(() => fakeJobProfileRepository.UpdateSocSkillMatrices(A <JobProfileOverloadForWhatItTakes> ._, A <IEnumerable <SocSkillMatrix> > ._)).Returns(new RepoActionResult {
                Success = true
            });

            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            //Act
            skillsImportService.ImportForSingleSoc(dummySoc.SOCCode);

            if (lockedJp)
            {
                A.CallTo(() => fakeJobProfileRepository.UpdateSocSkillMatrices(A <JobProfileOverloadForWhatItTakes> ._, A <IEnumerable <SocSkillMatrix> > ._)).MustNotHaveHappened();
                A.CallTo(() => fakeReportAuditRepository.CreateAudit("SummaryDetails", A <string> .That.Contains("could not be updated as it is locked or already in a Draft status with Soc code"))).MustHaveHappened();
            }
            else
            {
                A.CallTo(() => fakeJobProfileRepository.UpdateSocSkillMatrices(A <JobProfileOverloadForWhatItTakes> ._, A <IEnumerable <SocSkillMatrix> > ._)).MustHaveHappened(dummyJobProfiles.Count(), Times.Exactly);
                A.CallTo(() => fakeReportAuditRepository.CreateAudit("SummaryDetails", A <string> .That.Contains("could not be updated as it is locked or already in a Draft status with Soc code"))).MustNotHaveHappened();
            }

            A.CallTo(() => fakeReportAuditRepository.CreateAudit("ActionDetails", A <string> ._)).MustHaveHappened(4, Times.OrMore);
        }
        public void CreateSocSkillsMatrixRecordsTest(int numberOfSocSkills)
        {
            // Arrange
            var skillsImportService = new SkillsFrameworkDataImportService(fakeSkillsFrameworkService, fakeFrameworkSkillRepository, fakeJobProfileSocCodeRepository, fakeJobProfileRepository, fakeSocSkillMatrixRepository, fakeReportAuditRepository);

            //Dummies and Fakes
            A.CallTo(() => fakeSkillsFrameworkService.GetRelatedSkillMapping(A <string> ._)).Returns(GetRelatedSkill(numberOfSocSkills));
            A.CallTo(() => fakeSocSkillMatrixRepository.UpsertSocSkillMatrix(A <SocSkillMatrix> ._)).DoesNothing();

            // Act
            skillsImportService.CreateSocSkillsMatrixRecords(new SocCode {
                SOCCode = "dummySOC"
            });

            // Assert
            A.CallTo(() => fakeSkillsFrameworkService.GetRelatedSkillMapping(A <string> ._)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeReportAuditRepository.CreateAudit("ActionDetails", A <string> ._)).MustHaveHappened((numberOfSocSkills + 1), Times.Exactly);
            A.CallTo(() => fakeSocSkillMatrixRepository.UpsertSocSkillMatrix(A <SocSkillMatrix> ._)).MustHaveHappened(numberOfSocSkills, Times.Exactly);

            if (numberOfSocSkills == 0)
            {
                A.CallTo(() => fakeReportAuditRepository.CreateAudit("ErrorDetails", A <string> ._)).MustHaveHappened();
            }
        }