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())); }
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); }
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); }
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)); }