Exemplo n.º 1
0
 public LifeCycleStageWasRemoved(
     PublicServiceId publicServiceId,
     LifeCycleStageId lifeCycleStageId)
 {
     PublicServiceId  = publicServiceId;
     LifeCycleStageId = lifeCycleStageId;
 }
Exemplo n.º 2
0
        public Task DoesNotSetNextLifeCycleStageWhenDayHasPassedWhenThatLifeCycleStageWasRemoved()
        {
            var clockProviderStub = new ClockProviderStub(Today);

            var publicServiceId   = new PublicServiceId("DVR000000001");
            var publicServiceName = new PublicServiceName("Test");
            var events            = new object[]
            {
                new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), LifeCycleStageType.Active, PeriodOverlappingWithToday),
                new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(2), LifeCycleStageType.PhasingOut, PeriodOverlappingWithTomorrow),
                new LifeCycleStageWasRemoved(publicServiceId, LifeCycleStageId.FromNumber(2)),
                new ClockHasTicked(Tomorrow),
            };

            return(new PublicServiceListProjections(clockProviderStub)
                   .Scenario()
                   .Given(events)
                   .Expect(new PublicServiceListItem
            {
                Name = publicServiceName,
                PublicServiceId = publicServiceId,
                CurrentLifeCycleStageType = null,
                CurrentLifeCycleStageId = null,
                CurrentLifeCycleStageEndsAt = null,
            }));
        }
Exemplo n.º 3
0
        public async Task WhenPeriodOfLifeCycleStageWasChanged()
        {
            var projection = new PublicServiceLifeCycleListProjections();
            var resolver   = ConcurrentResolve.WhenEqualToHandlerMessageType(projection.Handlers);

            var stageWasAddedToLifeCycle         = _fixture.Create <StageWasAddedToLifeCycle>();
            var periodOfLifeCycleStageWasChanged = new PeriodOfLifeCycleStageWasChanged(
                new PublicServiceId(stageWasAddedToLifeCycle.PublicServiceId),
                LifeCycleStageId.FromNumber(stageWasAddedToLifeCycle.LifeCycleStageId),
                _fixture.Create <LifeCycleStagePeriod>());

            await new ConnectedProjectionScenario <BackofficeContext>(resolver)
            .Given(
                new Envelope <StageWasAddedToLifeCycle>(new Envelope(stageWasAddedToLifeCycle, new Dictionary <string, object>())),
                new Envelope <PeriodOfLifeCycleStageWasChanged>(new Envelope(periodOfLifeCycleStageWasChanged, new Dictionary <string, object>())))
            .Verify(async context =>
            {
                var publicService =
                    await context.PublicServiceLifeCycleList.FirstAsync(a =>
                                                                        a.PublicServiceId == stageWasAddedToLifeCycle.PublicServiceId && a.LifeCycleStageId == stageWasAddedToLifeCycle.LifeCycleStageId);

                publicService.Should().BeEquivalentTo(new PublicServiceLifeCycleItem()
                {
                    LifeCycleStageId   = stageWasAddedToLifeCycle.LifeCycleStageId,
                    PublicServiceId    = stageWasAddedToLifeCycle.PublicServiceId,
                    LifeCycleStageType = stageWasAddedToLifeCycle.LifeCycleStageType,
                    From = periodOfLifeCycleStageWasChanged.From,
                    To   = periodOfLifeCycleStageWasChanged.To
                });

                return(VerificationResult.Pass());
            })
            .Assert();
        }
Exemplo n.º 4
0
        public Task DoesNotClearLifeCycleStageWhenAnotherLifeCycleStageNoLongerOverlapsWithToday()
        {
            var clockProviderStub = new ClockProviderStub(Today);

            var publicServiceId   = new PublicServiceId("DVR000000001");
            var publicServiceName = new PublicServiceName("Test");
            var events            = new object[]
            {
                new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), LifeCycleStageType.Active, PeriodOverlappingWithToday),
                new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(2), LifeCycleStageType.PhasingOut, PeriodOverlappingWithTomorrow),
                new PeriodOfLifeCycleStageWasChanged(publicServiceId, LifeCycleStageId.FromNumber(2), PeriodOverlappingWithYesterday),
            };

            return(new PublicServiceListProjections(clockProviderStub)
                   .Scenario()
                   .Given(events)
                   .Expect(new PublicServiceListItem
            {
                Name = publicServiceName,
                PublicServiceId = publicServiceId,
                CurrentLifeCycleStageType = "Active",
                CurrentLifeCycleStageId = 1,
                CurrentLifeCycleStageEndsAt = LocalDate.FromDateTime(Today),
            }));
        }
Exemplo n.º 5
0
        public async Task WhenLifeCycleStageWasRemoved()
        {
            var projection = new PublicServiceLifeCycleListProjections();
            var resolver   = ConcurrentResolve.WhenEqualToHandlerMessageType(projection.Handlers);

            var stageWasAddedToLifeCycle = _fixture.Create <StageWasAddedToLifeCycle>();
            var lifeCycleStageWasRemoved = new LifeCycleStageWasRemoved(
                new PublicServiceId(stageWasAddedToLifeCycle.PublicServiceId),
                LifeCycleStageId.FromNumber(stageWasAddedToLifeCycle.LifeCycleStageId));

            await new ConnectedProjectionScenario <BackofficeContext>(resolver)
            .Given(
                new Envelope <StageWasAddedToLifeCycle>(new Envelope(stageWasAddedToLifeCycle, new Dictionary <string, object>())),
                new Envelope <LifeCycleStageWasRemoved>(new Envelope(lifeCycleStageWasRemoved, new Dictionary <string, object>())))
            .Verify(async context =>
            {
                var publicService =
                    await context.PublicServiceLifeCycleList.FirstOrDefaultAsync(a =>
                                                                                 a.PublicServiceId == stageWasAddedToLifeCycle.PublicServiceId && a.LifeCycleStageId == stageWasAddedToLifeCycle.LifeCycleStageId);

                publicService.Should().BeNull();

                return(VerificationResult.Pass());
            })
            .Assert();
        }
 public RemoveStageFromLifeCycle(
     PublicServiceId publicServiceId,
     LifeCycleStageId lifeCycleStageId)
 {
     PublicServiceId  = publicServiceId;
     LifeCycleStageId = lifeCycleStageId;
 }
Exemplo n.º 7
0
        private void When(StageWasAddedToLifeCycle @event)
        {
            _lastUsedId = LifeCycleStageId.FromNumber(@event.LifeCycleStageId);

            var lifeCycleStagePeriod = new LifeCycleStagePeriod(new ValidFrom(@event.From), new ValidTo(@event.To));

            _lifeCycleStagePeriods[@event.LifeCycleStageId] = lifeCycleStagePeriod;
        }
Exemplo n.º 8
0
 public ChangePeriodOfLifeCycleStage(
     PublicServiceId publicServiceId,
     LifeCycleStageId lifeCycleStageId,
     LifeCycleStagePeriod lifeCycleStagePeriod)
 {
     PublicServiceId      = publicServiceId;
     LifeCycleStageId     = lifeCycleStageId;
     LifeCycleStagePeriod = lifeCycleStagePeriod;
 }
Exemplo n.º 9
0
 public static ChangePeriodOfLifeCycleStage Map(string id, int lifeCycleStageId, ChangePeriodOfLifeCycleStageRequest message)
 {
     return(new ChangePeriodOfLifeCycleStage(
                new PublicServiceId(id),
                LifeCycleStageId.FromNumber(lifeCycleStageId),
                new LifeCycleStagePeriod(
                    new ValidFrom(message.Vanaf.HasValue ? LocalDate.FromDateTime(message.Vanaf.Value) : (LocalDate?)null),
                    new ValidTo(message.Tot.HasValue ? LocalDate.FromDateTime(message.Tot.Value) : (LocalDate?)null))));
 }
 public PeriodOfLifeCycleStageWasChanged(
     PublicServiceId publicServiceId,
     LifeCycleStageId lifeCycleStageId,
     LifeCycleStagePeriod period)
 {
     PublicServiceId  = publicServiceId;
     LifeCycleStageId = lifeCycleStageId;
     From             = period.Start;
     To = period.End;
 }
Exemplo n.º 11
0
 public static void CustomizeStageWasAddedToLifeCycle(this IFixture fixture) =>
 fixture.Customize <StageWasAddedToLifeCycle>(customization =>
                                              customization
                                              .FromFactory(generator =>
                                                           new StageWasAddedToLifeCycle(
                                                               PublicServiceId.FromNumber(fixture.Create <int>()),
                                                               LifeCycleStageId.FromNumber(fixture.Create <int>()),
                                                               LifeCycleStageType.All[generator.Next() % LifeCycleStageType.All.Length],
                                                               fixture.Create <LifeCycleStagePeriod>()
                                                               )).OmitAutoProperties());
 public StageWasAddedToLifeCycle(PublicServiceId publicServiceId,
     LifeCycleStageId lifeCycleStageId,
     LifeCycleStageType lifeCycleStageType,
     LifeCycleStagePeriod period)
 {
     PublicServiceId = publicServiceId;
     LifeCycleStageId = lifeCycleStageId;
     LifeCycleStageType = lifeCycleStageType;
     From = period.Start;
     To = period.End;
 }
Exemplo n.º 13
0
        public void RemoveStage(LifeCycleStageId lifeCycleStageId)
        {
            if (!_lifeCycleStagePeriods.ContainsKey(lifeCycleStageId))
            {
                throw new LifeCycleStageWithGivenIdNotFound(lifeCycleStageId);
            }

            Apply(
                new LifeCycleStageWasRemoved(
                    _publicServiceId,
                    lifeCycleStageId));
        }
Exemplo n.º 14
0
 public void WithValidData(
     PublicServiceId publicServiceId,
     PublicServiceName publicServiceName,
     LifeCycleStageType lifeCycleStageType,
     LifeCycleStagePeriod period)
 {
     Assert(new Scenario()
            .Given(publicServiceId,
                   new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered))
            .When(new AddStageToLifeCycle(publicServiceId, lifeCycleStageType, period))
            .Then(publicServiceId,
                  new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), lifeCycleStageType, period)));
 }
Exemplo n.º 15
0
 public async Task <IActionResult> RemoveStageFromLifeCycle(
     [FromCommandId] Guid commandId,
     [FromRoute] string id,
     [FromRoute] int faseId,
     CancellationToken cancellationToken = default)
 {
     return(Accepted(
                await Bus.Dispatch(
                    commandId,
                    new RemoveStageFromLifeCycle(new PublicServiceId(id), LifeCycleStageId.FromNumber(faseId)),
                    GetMetadata(),
                    cancellationToken)));
 }
 public void CannotRemoveLifeCycleStageOnRemovedPublicService(
     PublicServiceId publicServiceId,
     PublicServiceName publicServiceName,
     ReasonForRemoval reasonForRemoval,
     LifeCycleStagePeriod period)
 {
     Assert(new Scenario()
            .Given(publicServiceId,
                   new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                   new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), LifeCycleStageType.PhasingOut, period),
                   new PublicServiceWasRemoved(publicServiceId, reasonForRemoval))
            .When(new RemoveStageFromLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1)))
            .Throws(new CannotPerformActionOnRemovedPublicService()));
 }
 public void CantRemoveARemovedLifeCycleStage(
     PublicServiceId publicServiceId,
     PublicServiceName publicServiceName,
     LifeCycleStagePeriod period)
 {
     Assert(
         new Scenario()
         .Given(publicServiceId,
                new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), LifeCycleStageType.PhasingOut, period),
                new LifeCycleStageWasRemoved(publicServiceId, LifeCycleStageId.FromNumber(1)))
         .When(new RemoveStageFromLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1)))
         .Throws(new LifeCycleStageWithGivenIdNotFound(1)));
 }
Exemplo n.º 18
0
 public void WithValidData(
     PublicServiceId publicServiceId,
     PublicServiceName publicServiceName,
     LifeCycleStageType lifeCycleStageType,
     LifeCycleStagePeriod period,
     LifeCycleStageId lifeCycleStageLocalId)
 {
     Assert(new Scenario()
            .Given(publicServiceId,
                   new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                   new StageWasAddedToLifeCycle(publicServiceId, lifeCycleStageLocalId, lifeCycleStageType, period))
            .When(new ChangePeriodOfLifeCycleStage(publicServiceId, lifeCycleStageLocalId, period))
            .Then(publicServiceId,
                  new PeriodOfLifeCycleStageWasChanged(publicServiceId, lifeCycleStageLocalId, period)));
 }
Exemplo n.º 19
0
        public void ChangePeriod(LifeCycleStageId lifeCycleStageId, LifeCycleStagePeriod period)
        {
            if (_lifeCycleStagePeriods
                .Where(pair => pair.Key != lifeCycleStageId)
                .Any(pair => pair.Value.OverlapsWith(period)))
            {
                throw new LifeCycleCannotHaveOverlappingPeriods();
            }

            Apply(
                new PeriodOfLifeCycleStageWasChanged(
                    _publicServiceId,
                    lifeCycleStageId,
                    period));
        }
Exemplo n.º 20
0
        public void LifeCycleCannotHaveOverlappingPeriods(
            PublicServiceId publicServiceId,
            PublicServiceName publicServiceName,
            LifeCycleStageType lifeCycleStage1,
            LifeCycleStageType lifeCycleStage2)
        {
            var period1 = new LifeCycleStagePeriod(new ValidFrom(2018, LifeCycleStageId.FromNumber(1), 1), new ValidTo(2020, LifeCycleStageId.FromNumber(1), 1));
            var period2 = new LifeCycleStagePeriod(new ValidFrom(2019, LifeCycleStageId.FromNumber(1), 1), new ValidTo(2021, LifeCycleStageId.FromNumber(1), 1));

            Assert(new Scenario()
                   .Given(publicServiceId,
                          new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                          new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), lifeCycleStage1, period1))
                   .When(new AddStageToLifeCycle(publicServiceId, lifeCycleStage2, period2))
                   .Throws(new LifeCycleCannotHaveOverlappingPeriods()));
        }
Exemplo n.º 21
0
 public void CannotChangePeriodOfLifeCycleStageOnRemovedPublicService(
     PublicServiceId publicServiceId,
     PublicServiceName publicServiceName,
     ReasonForRemoval reasonForRemoval,
     LifeCycleStageType lifeCycleStageType,
     LifeCycleStagePeriod period,
     LifeCycleStageId lifeCycleStageId)
 {
     Assert(new Scenario()
            .Given(publicServiceId,
                   new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                   new StageWasAddedToLifeCycle(publicServiceId, lifeCycleStageId, lifeCycleStageType, period),
                   new PublicServiceWasRemoved(publicServiceId, reasonForRemoval))
            .When(new ChangePeriodOfLifeCycleStage(publicServiceId, lifeCycleStageId, period))
            .Throws(new CannotPerformActionOnRemovedPublicService()));
 }
Exemplo n.º 22
0
        public void LifeCycleOverlapsTakesChangesIntoAccount(
            PublicServiceId publicServiceId,
            PublicServiceName publicServiceName,
            LifeCycleStageType lifeCycleStageType)
        {
            var period1 = new LifeCycleStagePeriod(new ValidFrom(2018, 1, 1), new ValidTo(2018, 1, 1));
            var period2 = new LifeCycleStagePeriod(new ValidFrom(2020, 1, 2), new ValidTo(2022, 1, 1));
            // Combining period2 with period3 will cause an overlap.
            var period3 = new LifeCycleStagePeriod(new ValidFrom(2019, 1, 1), new ValidTo(2021, 1, 1));

            Assert(new Scenario()
                   .Given(publicServiceId,
                          new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                          new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), lifeCycleStageType, period1),
                          new PeriodOfLifeCycleStageWasChanged(publicServiceId, LifeCycleStageId.FromNumber(1), period2))
                   .When(new AddStageToLifeCycle(publicServiceId, lifeCycleStageType, period3))
                   .Throws(new LifeCycleCannotHaveOverlappingPeriods()));
        }
Exemplo n.º 23
0
        public void LifeCycleCannotHaveOverlappingPeriods(
            PublicServiceId publicServiceId,
            PublicServiceName publicServiceName,
            LifeCycleStageType lifeCycleStageType)
        {
            // These two periods are ok because they don't overlap
            var period1 = new LifeCycleStagePeriod(new ValidFrom(2018, 1, 1), new ValidTo(2020, 1, 1));
            var period2 = new LifeCycleStagePeriod(new ValidFrom(2020, 1, 2), new ValidTo(2021, 1, 1));
            // Combining period1 with period3 will cause an overlap, however.
            var period3 = new LifeCycleStagePeriod(new ValidFrom(2018, 1, 1), new ValidTo(2020, 1, 1));

            Assert(new Scenario()
                   .Given(publicServiceId,
                          new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                          new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), lifeCycleStageType, period1),
                          new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(2), lifeCycleStageType, period2))
                   .When(new ChangePeriodOfLifeCycleStage(publicServiceId, LifeCycleStageId.FromNumber(2), period3))
                   .Throws(new LifeCycleCannotHaveOverlappingPeriods()));
        }
Exemplo n.º 24
0
        public void LifeCycleStageDoesNotOverlapWhenChangingItsOwnPeriod(
            PublicServiceId publicServiceId,
            PublicServiceName publicServiceName,
            LifeCycleStageType lifeCycleStageType)
        {
            // These two periods are ok because they don't overlap
            var period1 = new LifeCycleStagePeriod(new ValidFrom(2018, 1, 1), new ValidTo(2020, 1, 1));
            var period2 = new LifeCycleStagePeriod(new ValidFrom(2020, 1, 2), new ValidTo(2021, 1, 1));
            // Changing period1 to period3 for '1' will not cause an overlap
            var period3 = new LifeCycleStagePeriod(new ValidFrom(2018, 1, 1), new ValidTo(2019, 1, 1));

            Assert(new Scenario()
                   .Given(publicServiceId,
                          new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                          new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), lifeCycleStageType, period1),
                          new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(2), lifeCycleStageType, period2))
                   .When(new ChangePeriodOfLifeCycleStage(publicServiceId, LifeCycleStageId.FromNumber(1), period3))
                   .Then(publicServiceId,
                         new PeriodOfLifeCycleStageWasChanged(publicServiceId, LifeCycleStageId.FromNumber(1), period3)));
        }
Exemplo n.º 25
0
        public Task ShowsLifeCycleStageWhenLifeCycleStageWasAddedThatOverlapsWithToday()
        {
            var clockProviderStub = new ClockProviderStub(Today);

            var publicServiceId   = new PublicServiceId("DVR000000001");
            var publicServiceName = new PublicServiceName("Test");
            var events            = new object[]
            {
                new PublicServiceWasRegistered(publicServiceId, publicServiceName, PrivateZoneId.Unregistered),
                new StageWasAddedToLifeCycle(publicServiceId, LifeCycleStageId.FromNumber(1), LifeCycleStageType.Active, PeriodValidAlways),
            };

            return(new PublicServiceListProjections(clockProviderStub)
                   .Scenario()
                   .Given(events)
                   .Expect(new PublicServiceListItem
            {
                Name = publicServiceName,
                PublicServiceId = publicServiceId,
                CurrentLifeCycleStageType = "Active",
                CurrentLifeCycleStageId = 1,
            }));
        }
        public void ImplicitConversionReturnsExpectedResult()
        {
            int result = LifeCycleStageId.FromNumber(1);

            Assert.Equal(1, result);
        }
 public void NextReturnsExpectedResult()
 {
     Assert.Equal(LifeCycleStageId.FromNumber(1), LifeCycleStageId.Zero().Next());
     Assert.Equal(LifeCycleStageId.FromNumber(3), LifeCycleStageId.FromNumber(2).Next());
 }
 public void ZeroReturns0()
 {
     Assert.Equal(0, LifeCycleStageId.Zero());
 }
 public void CannotCreateFromNumberLowerThan1()
 {
     Assert.Throws <ArgumentException>(() => LifeCycleStageId.FromNumber(0));
     Assert.Throws <ArgumentException>(() => LifeCycleStageId.FromNumber(-1));
 }
 public void ExplicitConversionReturnsExpectedResult()
 {
     Assert.Equal(1, (int)LifeCycleStageId.FromNumber(1));
 }