public async Task IfInvalidVacancyStatus_ShouldThrowError(VacancyStatus invalidCloneStatus)
        {
            var newVacancyId    = Guid.NewGuid();
            var existingVacancy = _autoFixture.Build <Vacancy>().With(c => c.Status, invalidCloneStatus).Create();
            var currentTime     = DateTime.UtcNow;
            var startDate       = DateTime.Now.AddDays(20);
            var closingDate     = DateTime.Now.AddDays(10);

            var user = new VacancyUser {
                Name = "Test", Email = "*****@*****.**", UserId = "123"
            };

            var command = new CloneVacancyCommand(
                cloneVacancyId: existingVacancy.Id,
                newVacancyId: newVacancyId,
                user: user,
                sourceOrigin: SourceOrigin.EmployerWeb,
                startDate: startDate,
                closingDate: closingDate);

            var mockRepository   = new Mock <IVacancyRepository>();
            var mockTimeProvider = new Mock <ITimeProvider>();

            mockTimeProvider.Setup(x => x.Now).Returns(currentTime);
            mockRepository.Setup(x => x.GetVacancyAsync(existingVacancy.Id)).ReturnsAsync(existingVacancy);

            var handler = new CloneVacancyCommandHandler(
                Mock.Of <ILogger <CloneVacancyCommandHandler> >(),
                mockRepository.Object,
                Mock.Of <IMessaging>(),
                mockTimeProvider.Object
                );

            await Assert.ThrowsAsync <InvalidStateException>(() => handler.Handle(command, new CancellationToken()));
        }
コード例 #2
0
        public async Task CheckClonedVacancyHasCorrectFieldsSet()
        {
            var     newVacancyId    = Guid.NewGuid();
            var     existingVacancy = GetTestVacancy();
            var     currentTime     = DateTime.UtcNow;
            Vacancy clone           = null;

            var mockRepository   = new Mock <IVacancyRepository>();
            var mockTimeProvider = new Mock <ITimeProvider>();

            mockTimeProvider.Setup(x => x.Now).Returns(currentTime);
            mockRepository.Setup(x => x.GetVacancyAsync(existingVacancy.Id)).ReturnsAsync(existingVacancy);
            mockRepository.Setup(x => x.CreateAsync(It.IsAny <Vacancy>()))
            .Callback <Vacancy>(arg => clone = arg)
            .Returns(Task.CompletedTask);

            var handler = new CloneVacancyCommandHandler(
                Mock.Of <ILogger <CloneVacancyCommandHandler> >(),
                mockRepository.Object,
                Mock.Of <IMessaging>(),
                mockTimeProvider.Object
                );

            var user = new VacancyUser {
                Name = "Test", Email = "*****@*****.**", UserId = "123"
            };

            var command = new CloneVacancyCommand(cloneVacancyId: existingVacancy.Id, newVacancyId: newVacancyId, user: user, sourceOrigin: SourceOrigin.EmployerWeb);

            await handler.Handle(command, new CancellationToken());

            AssertUpdatedProperties(existingVacancy, currentTime, clone, command);
            AssertNulledOutProperties(clone);
            AssertUnchangedProperties(existingVacancy, clone);
        }
コード例 #3
0
        public async Task <Guid> CloneVacancyAsync(Guid vacancyId, VacancyUser user, SourceOrigin sourceOrigin)
        {
            var newVacancyId = GenerateVacancyId();

            var command = new CloneVacancyCommand(cloneVacancyId: vacancyId, newVacancyId: newVacancyId, user: user, sourceOrigin: sourceOrigin);

            await _messaging.SendCommandAsync(command);

            return(newVacancyId);
        }
コード例 #4
0
        public async Task <Guid> CloneVacancyAsync(
            Guid vacancyId, VacancyUser user, SourceOrigin sourceOrigin,
            DateTime startDate, DateTime closingDate)
        {
            var newVacancyId = GenerateVacancyId();

            var command = new CloneVacancyCommand(vacancyId, newVacancyId, user, sourceOrigin, startDate, closingDate);

            await _messaging.SendCommandAsync(command);

            await AssignVacancyNumber(newVacancyId);

            return(newVacancyId);
        }
 private static void AssertUpdatedProperties(Vacancy existingVacancy, DateTime currentTime, Vacancy clone,
                                             CloneVacancyCommand command, DateTime startDate, DateTime closingDate)
 {
     // Check properties that should have been updated to new values to the original
     clone.Id.Should().Be(command.NewVacancyId, "{0} should be updated", nameof(clone.Id));
     clone.CreatedByUser.Should().BeEquivalentTo(command.User, "{0} should be updated", nameof(clone.CreatedByUser));
     clone.CreatedDate.Should().Be(currentTime, "{0} should be updated", nameof(clone.CreatedDate));
     clone.LastUpdatedByUser.Should().Be(command.User, "{0} should be updated", nameof(clone.LastUpdatedByUser));
     clone.LastUpdatedDate.Should().Be(currentTime, "{0} should be correct", nameof(clone.LastUpdatedDate));
     clone.SourceOrigin.Should().Be(SourceOrigin.EmployerWeb, "{0} should be updated", nameof(clone.SourceOrigin));
     clone.SourceType.Should().Be(SourceType.Clone, "{0} should be updated", nameof(clone.SourceType));
     clone.SourceVacancyReference.Should().Be(existingVacancy.VacancyReference, "{0} should be updated", nameof(clone.SourceVacancyReference));
     clone.Status.Should().Be(VacancyStatus.Draft, "{0} should be updated", nameof(clone.Status));
     clone.IsDeleted.Should().Be(false, "{0} should be updated", nameof(clone.IsDeleted));
     clone.StartDate.Should().Be(startDate, "{0} should be updated", nameof(clone.StartDate));
     clone.ClosingDate.Should().Be(closingDate, "{0} should be updated", nameof(clone.ClosingDate));
 }