public async Task ValidMappings_ExportIsSuccessful() { var message = UniMicroTestSetup.ValidApprovedMessageToday; var unitId = message.Message.UnitId; var employeeId = message.Message.EmployeeId; var localAbsenceCode = (int)message.Message.AbsenceEntries.FirstOrDefault().AbsenceSubType; var(consumer, dbFactory) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(unitId) .WithUnitMapped(localId: unitId, externalId: 36, unitId: unitId) .WithAbsenceMappedToWorkType(localAbsenceCode, 7, unitId) .WithLocalEmployeeMappedToWorkRelation(employeeId, "2", unitId) .UniMicroServiceReturnsWorkItem(message.Message) .SetupApprovedConsumer(); var db = await dbFactory.CreateDbContext(); // Act await consumer.Consume(message); // Assert var absenceExport = db.AbsenceExports.FirstOrDefault(); Assert.IsNotNull(absenceExport); Assert.AreEqual((int)AbsenceExportStatus.Success, absenceExport.Status); Assert.AreEqual((int)AbsenceExportAction.Create, absenceExport.Action); }
public async Task MissingAbsenceTypeMapping_ExportFailedWithCorrectMessage() { var message = UniMicroTestSetup.ValidApprovedMessageToday; var unitId = message.Message.UnitId; var(consumer, dbFactory) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(1000) .WithUnitMapped(localId: 1000, externalId: 36, unitId: unitId) .WithLocalEmployeeMappedToWorkRelation(87889, "2", unitId) .UniMicroServiceReturnsWorkItem(message.Message) .SetupApprovedConsumer(); var db = await dbFactory.CreateDbContext(); var exportCount = db.AbsenceExports.Count(); // Act await consumer.Consume(message); // Assert Assert.AreEqual(exportCount + 1, db.AbsenceExports.Count()); var absenceExport = db.AbsenceExports.Last(); Assert.AreEqual((int)AbsenceExportStatus.Failed, absenceExport.Status); Assert.AreEqual($"Missing mapping from AbsenceType to WorkType or EmploymentLeaveType {Vacation}", absenceExport.Message); }
public async Task UniMicroFails_ErrorMessageIsSaved() { var message = UniMicroTestSetup.ValidApprovedMessageToday; var unitId = message.Message.UnitId; var errorMessage = "Error requesting Unimicro-Api"; var(consumer, dbFactory) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(1000) .WithUnitMapped(localId: 1000, externalId: 36, unitId: unitId) .WithAbsenceMappedToWorkType(Vacation, 7, unitId) .WithLocalEmployeeMappedToWorkRelation(87889, "2", unitId) .UniMicroServiceFails() .SetupApprovedConsumer(); var db = await dbFactory.CreateDbContext(); var exportCount = db.AbsenceExports.Count(); // Act await consumer.Consume(message); // Assert Assert.AreEqual(exportCount + 1, db.AbsenceExports.Count()); var absenceExport = db.AbsenceExports.Last(); Assert.AreEqual((int)AbsenceExportStatus.Failed, absenceExport.Status); Assert.AreEqual($"Communication with external system failed: {errorMessage}", absenceExport.Message); }
public async Task AbsenceExportExists_ValidMappings_ExternalEmployeeLeaveIsDeleted() { var dbId = Guid.NewGuid().ToString(); var message = UniMicroTestSetup.ValidMessageParentalLeave; var unitId = message.Message.UnitId; var employeeId = message.Message.EmployeeId; var localAbsenceCode = (int)message.Message.AbsenceEntries.FirstOrDefault().AbsenceSubType; var externalAbsenceIds = new List <int> { new Random().Next(1, 1000), new Random().Next(1, 1000) }; var(consumer, dbFactory, unimicroClient) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(unitId) .WithUnitMapped(localId: unitId, externalId: 36, unitId: unitId) .WithAbsenceMappedToLeaveType(localAbsenceCode, LeaveType.Educational_leave, unitId) .WithLocalEmployeeMappedToEmployment(employeeId, "2", unitId) .WithExistingAbsenceExport(unitId, message.Message.AbsenceId, localAbsenceCode, externalAbsenceIds, dbId) .SetupExposingClient(); // Act await consumer.Consume(message); // Assert foreach (var externalAbsenceId in externalAbsenceIds) { A.CallTo(() => unimicroClient.DeleteEmploymentLeave(externalAbsenceId.ToString())) .MustHaveHappenedOnceExactly(); A.CallTo(() => unimicroClient.DeleteWorkItem(externalAbsenceId.ToString())) .MustNotHaveHappened(); } }
public async Task WhenIntegrationIsConnectedToTheParentOfTheAbsenceUnitid_ThenItShouldBeReturned() { var parentUnitId = 1; var message = UniMicroTestSetup.ValidApprovedMessageToday; var childUnitId = message.Message.UnitId; var employeeId = message.Message.EmployeeId; var localAbsenceCode = (int)message.Message.AbsenceEntries.FirstOrDefault().AbsenceSubType; var integration = UniMicroTestSetup.GetValidIntegration(parentUnitId); var unit = UniMicroTestSetup.GetValidUnit(childUnitId, parentUnitId); var(consumer, dbFactory) = new UniMicroTestSetup() .WithIntegrations(new List <Integrations.Api.Contracts.Integration> { integration }) .WithUnits(new List <Unit> { unit }) .WithUnitMapped(parentUnitId, 36, parentUnitId) .WithAbsenceMappedToWorkType(localAbsenceCode, 7, parentUnitId) .WithLocalEmployeeMappedToWorkRelation(employeeId, "2", parentUnitId) .UniMicroServiceReturnsWorkItem(message.Message) .SetupApprovedConsumer(); var db = await dbFactory.CreateDbContext(); // Act await consumer.Consume(message); // Assert var absenceExport = db.AbsenceExports.FirstOrDefault(); Assert.IsNotNull(absenceExport); }
public async Task ValidMappings_ExportsAllAbsenceEntries_ParentalLeave() { var message = UniMicroTestSetup.ValidMessageParentalLeave; var unitId = message.Message.UnitId; var(consumer, dbFactory) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(1000) .WithUnitMapped(localId: 1000, externalId: 36, unitId: unitId) .WithAbsenceMappedToLeaveType((int)AbsenceSubType.ParentalLeave, LeaveType.Leave_with_parental_benefit, unitId) .WithLocalEmployeeMappedToEmployment(87889, "9", unitId) .UniMicroServiceReturnsWorkItem(message.Message) .SetupApprovedConsumer(); // Act await consumer.Consume(message); // Assert var db = await dbFactory.CreateDbContext(); var absenceExport = db.AbsenceExports.FirstOrDefault(); Assert.IsNotNull(absenceExport); Assert.AreEqual("Absence successfully exported", absenceExport.Message); Assert.AreEqual((int)AbsenceExportStatus.Success, absenceExport.Status); var absence = JsonConvert.DeserializeObject <Absence>(absenceExport.AbsenceJson); var entry = absence.AbsenceEntries.Single(); Assert.AreEqual("9", entry.ExternalEntityId); Assert.AreEqual(((int)LeaveType.Leave_with_parental_benefit).ToString(), entry.ExternalAbsenceCode); Assert.AreEqual("101", entry.ExternalId); }
public async Task AbsenceExportExists_ValidMappings_NewExportedWithSuccess() { var dbId = Guid.NewGuid().ToString(); var message = UniMicroTestSetup.ValidApprovedMessageToday; var unitId = message.Message.UnitId; var employeeId = message.Message.EmployeeId; var localAbsenceCode = (int)message.Message.AbsenceEntries.FirstOrDefault().AbsenceSubType; var externalAbsenceIds = new List <int> { new Random().Next(1, 1000), new Random().Next(1, 1000) }; var(consumer, dbFactory) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(unitId) .WithUnitMapped(localId: unitId, externalId: 36, unitId: unitId) .WithAbsenceMappedToWorkType(localAbsenceCode, 7, unitId) .WithLocalEmployeeMappedToWorkRelation(employeeId, "2", unitId) .WithExistingAbsenceExport(unitId, message.Message.AbsenceId, localAbsenceCode, externalAbsenceIds, dbId) .SetupApprovedConsumer(); // Act await consumer.Consume(message); // Assert var db = await dbFactory.CreateDbContext(); var absenceExport = db.AbsenceExports.Last(); Assert.IsNotNull(absenceExport); Assert.AreEqual(AbsenceExportStatus.Success, Enum.Parse <AbsenceExportStatus>(absenceExport.Status.ToString()), absenceExport.Message); }
public async Task ValidMappings_ParentalLeave_ExportsAllAbsenceEntries() { var message = UniMicroTestSetup.ValidMessageOneMonthParentalLeaveWithVacation; var unitId = message.Message.UnitId; var employmentId = "11"; var workRelationId = "2"; var(consumer, dbFactory) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(1000) .WithUnitMapped(localId: 1000, externalId: 36, unitId: unitId) .WithAbsenceMappedToLeaveType((int)AbsenceSubType.ParentalLeave, LeaveType.Leave_with_parental_benefit, unitId) .WithAbsenceMappedToWorkType(Vacation, 7, unitId) .WithLocalEmployeeMappedToWorkRelation(87889, workRelationId, unitId) .WithLocalEmployeeMappedToEmployment(87889, employmentId, unitId) .UniMicroServiceReturnsWorkItem(message.Message) .SetupApprovedConsumer(); // Act await consumer.Consume(message); // Assert var db = await dbFactory.CreateDbContext(); var absenceExport = db.AbsenceExports.FirstOrDefault(); Assert.IsNotNull(absenceExport); Assert.AreEqual("Absence successfully exported", absenceExport.Message); Assert.AreEqual((int)AbsenceExportStatus.Success, absenceExport.Status); var absence = JsonConvert.DeserializeObject <Absence>(absenceExport.AbsenceJson); // Correct number of absenceEntries created in unimicro var externalIds = absence.AbsenceEntries.Select(x => x.ExternalId).Distinct(); Assert.AreEqual(message.Message.AbsenceEntries.Count, externalIds.Count()); var firstLeave = absence.AbsenceEntries[0]; Assert.AreEqual("101", firstLeave.ExternalId); Assert.AreEqual(employmentId, firstLeave.ExternalEntityId); Assert.AreEqual(((int)LeaveType.Leave_with_parental_benefit).ToString(), firstLeave.ExternalAbsenceCode); var vacationEntries = absence.AbsenceEntries.Where(ae => ae.LocalAbsenceCode == Vacation).ToList(); Assert.AreEqual(5, vacationEntries.Count); var externalId = 1; vacationEntries.ForEach(vacation => { Assert.AreEqual(workRelationId, vacation.ExternalEntityId); Assert.AreEqual((externalId++).ToString(), vacation.ExternalId); }); var secondLeave = absence.AbsenceEntries[6]; Assert.AreEqual("102", secondLeave.ExternalId); Assert.AreEqual(employmentId, secondLeave.ExternalEntityId); Assert.AreEqual(((int)LeaveType.Leave_with_parental_benefit).ToString(), secondLeave.ExternalAbsenceCode); }
public async Task OtherIntegrationDeleted_NothingHappens() { var message = UniMicroTestSetup.OtherIntegartionDeletedMessage; var unitId = message.Message.UnitId; var(consumer, dbFactory) = new UniMicroTestSetup() .SetupIntegrationDeleteConsumer(); var context = await dbFactory.CreateDbContext(); context.AbsenceExports.AddRange(GenerateFakeAbsenceExports(10, unitId)); context.AbsenceExports.AddRange(GenerateFakeAbsenceExports(10, unitId + 100)); context.SaveChanges(); await consumer.Consume(message); Assert.AreEqual(20, context.AbsenceExports.Count(), "No absence exports are deleted"); Assert.AreEqual(10, context.AbsenceExports.Where(x => x.UnitId == unitId).Count(), "Some unit absence export deleted"); }
public async Task TimeregIntegrationDeleted_DeleteAbsenceExports() { var message = UniMicroTestSetup.TimeregIntegartionDeletedMessage; var unitId = message.Message.UnitId; var(consumer, dbFactory) = new UniMicroTestSetup() .SetupIntegrationDeleteConsumer(); var context = await dbFactory.CreateDbContext(); context.AbsenceExports.AddRange(GenerateFakeAbsenceExports(10, unitId)); context.AbsenceExports.AddRange(GenerateFakeAbsenceExports(10, unitId + 100)); context.SaveChanges(); await consumer.Consume(message); Assert.AreEqual(10, context.AbsenceExports.Count(), "Unit absence exports are not deleted"); Assert.IsTrue(context.AbsenceExports.All(x => x.UnitId != unitId), "Found unit exports"); }
public async Task EmployeeDeleted_DeleteAbsence() { var message = UniMicroTestSetup.TimeregEmployeeDeletedMessage; var employeeId = message.Message.EmployeeId; var(consumer, dbFactory) = new UniMicroTestSetup() .SetupEmployeeDeleteConsumer(); var context = await dbFactory.CreateDbContext(); context.AbsenceExports.AddRange(A.CollectionOfFake <Repositories.Models.AbsenceExport>(10).Select(x => { x.EmployeeId = employeeId; x.UnitId = message.Message.OrgUnitId; return(x); })); context.SaveChanges(); await consumer.Consume(message); Assert.AreEqual(0, context.AbsenceExports.Count(), "Employee absence exports are not deleted"); }
public async Task ValidMappings_ExportsAllAbsenceEntries_Vacation() { var message = UniMicroTestSetup.ValidMessageWeekVacation; var unitId = message.Message.UnitId; var workRelationId = "2"; var externalVacation = 7; var(consumer, dbFactory) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(1000) .WithUnitMapped(localId: 1000, externalId: 36, unitId: unitId) .WithAbsenceMappedToWorkType(Vacation, externalVacation, unitId) .WithLocalEmployeeMappedToWorkRelation(87889, workRelationId, unitId) .UniMicroServiceReturnsWorkItem(message.Message) .SetupApprovedConsumer(); // Act await consumer.Consume(message); // Assert var db = await dbFactory.CreateDbContext(); var absenceExport = db.AbsenceExports.FirstOrDefault(); Assert.IsNotNull(absenceExport); Assert.AreEqual("Absence successfully exported", absenceExport.Message); Assert.AreEqual((int)AbsenceExportStatus.Success, absenceExport.Status); var absence = JsonConvert.DeserializeObject <Absence>(absenceExport.AbsenceJson); // Correct number of absenceEntries created in unimicro var externalIds = absence.AbsenceEntries.Select(x => x.ExternalId).Distinct(); Assert.AreEqual(message.Message.AbsenceEntries.Count, externalIds.Count()); absence.AbsenceEntries.ForEach(entry => { Assert.AreEqual(workRelationId, entry.ExternalEntityId); Assert.AreEqual(externalVacation.ToString(), entry.ExternalAbsenceCode); }); }
public async Task ValidMappings_AbsenceIsSaved() { var context = UniMicroTestSetup.ValidApprovedMessageToday; var unitId = context.Message.UnitId; var(consumer, dbFactory) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(1000) .WithUnitMapped(localId: context.Message.UnitId, externalId: 36, unitId: unitId) .WithAbsenceMappedToWorkType(Vacation, 7, unitId) .WithLocalEmployeeMappedToWorkRelation(87889, "2", unitId) .UniMicroServiceReturnsWorkItem(context.Message) .SetupApprovedConsumer(); var db = await dbFactory.CreateDbContext(); var exportCount = db.AbsenceExports.Count(); // Act await consumer.Consume(context); // Assert Assert.AreEqual(exportCount + 1, db.AbsenceExports.Count()); var absenceExport = db.AbsenceExports.Last(); var absence = JsonConvert.DeserializeObject <Absence>(absenceExport.AbsenceJson); Assert.AreEqual(87889, absence.EmployeeId); Assert.AreEqual(context.Message.UnitId, absence.UnitId); var absenceEntry = absence.AbsenceEntries.First(); var messageAbsenceEntry = context.Message.AbsenceEntries.First(); Assert.AreEqual("1", absenceEntry.ExternalId); Assert.AreEqual((int)AbsenceSubType.Vacation, absenceEntry.LocalAbsenceCode); Assert.AreEqual("7", absenceEntry.ExternalAbsenceCode); Assert.AreEqual("2", absenceEntry.ExternalEntityId); Assert.AreEqual(messageAbsenceEntry.FromDate, absenceEntry.StartTime.DateTime); Assert.AreEqual(messageAbsenceEntry.ToDate, absenceEntry.EndTime.DateTime); }
public async Task MissingUserMapping_ExportFailedWithCorrectMessage() { var message = UniMicroTestSetup.ValidApprovedMessageToday; var unitId = message.Message.UnitId; var(consumer, dbFactory) = new UniMicroTestSetup() .WithUniMicroEnabledForUnitId(1000) .WithUnitMapped(localId: 1000, externalId: 36, unitId: unitId) .WithAbsenceMappedToWorkType(Vacation, 7, unitId) .SetupApprovedConsumer(); var db = await dbFactory.CreateDbContext(); var exportCount = db.AbsenceExports.ToArray().Length; // Act await consumer.Consume(message); // Assert Assert.AreEqual(exportCount + 1, db.AbsenceExports.Count()); var absenceExport = db.AbsenceExports.Last(); Assert.AreEqual((int)AbsenceExportStatus.Failed, absenceExport.Status); Assert.AreEqual($"Missing mapping from Employee to WorkRelation {message.Message.EmployeeId}", absenceExport.Message); }