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);
        }
예제 #6
0
        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);
        }
예제 #8
0
        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");
        }
예제 #11
0
        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");
        }
예제 #12
0
        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);
        }