public ReactorDummyFactory()
        {
            /* Add any overriding or custom registrations here. */

            // ------------------------------- ENUMS --------------------------------------
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(CompositeHandlingStatusMatchStrategy.Unknown);

            // ------------------------------- BASE CLASSES -------------------------------
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IReactionContext>();
        }
        public DatabaseDummyFactory()
        {
            // ------------------------------- EVENTS -------------------------------------
            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new HandlingForStreamDisabledEvent(
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new HandlingForStreamEnabledEvent(
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new HandlingForRecordDisabledEvent(
                    A.Dummy <long>(),
                    A.Dummy <string>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var record = A.Dummy <StreamRecord>();

                return(new RecordHandlingAvailableEvent(
                           record.InternalRecordId,
                           A.Dummy <string>(),
                           record,
                           A.Dummy <UtcDateTime>(),
                           A.Dummy <string>()));
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new RecordHandlingCanceledEvent(
                    A.Dummy <long>(),
                    A.Dummy <string>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new RecordHandlingCompletedEvent(
                    A.Dummy <long>(),
                    A.Dummy <string>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new RecordHandlingFailedEvent(
                    A.Dummy <long>(),
                    A.Dummy <string>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new RecordHandlingFailureResetEvent(
                    A.Dummy <long>(),
                    A.Dummy <string>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new RecordHandlingRunningEvent(
                    A.Dummy <long>(),
                    A.Dummy <string>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new RecordHandlingSelfCanceledEvent(
                    A.Dummy <long>(),
                    A.Dummy <string>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new PruneOperationExecutedEvent(
                    A.Dummy <IPruneOp>(),
                    A.Dummy <PruneSummary>(),
                    A.Dummy <UtcDateTime>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new PruneOperationRequestedEvent(
                    A.Dummy <IPruneOp>(),
                    A.Dummy <UtcDateTime>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new PruneRequestCanceledEvent(
                    A.Dummy <string>(),
                    A.Dummy <UtcDateTime>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new UniqueLongIssuedEvent(
                    A.Dummy <long>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var result = new IdDeprecatedEvent(
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new IdDeprecatedEvent <Version, Version>(
                    A.Dummy <Version>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new IdDeprecatedEvent <Version>(
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            // ------------------------------- MODELS -------------------------------------
            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new StreamRecordHandlingEntry(
                    A.Dummy <long>(),
                    A.Dummy <long>(),
                    A.Dummy <string>(),
                    A.Dummy <HandlingStatus>(),
                    A.Dummy <IReadOnlyCollection <NamedValue <string> > >(),
                    A.Dummy <string>(),
                    A.Dummy <UtcDateTime>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var scenario = ThreadSafeRandom.Next(1, 4);

                switch (scenario)
                {
                case 1:
                    return(new CreateStreamResult(false, true));

                case 2:
                    return(new CreateStreamResult(true, false));

                case 3:
                    return(new CreateStreamResult(true, true));

                default:
                    throw new NotSupportedException(
                        FormattableString.Invariant($"Invalid scenario {scenario} for creating a dummy {nameof(CreateStreamResult)}."));
                }
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new StreamRecordMetadata(
                    A.Dummy <string>(),
                    A.Dummy <SerializerRepresentation>(),
                    A.Dummy <TypeRepresentationWithAndWithoutVersion>(),
                    A.Dummy <TypeRepresentationWithAndWithoutVersion>(),
                    A.Dummy <IReadOnlyCollection <NamedValue <string> > >(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <UtcDateTime>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new StreamRecordMetadata <Version>(
                    A.Dummy <Version>(),
                    A.Dummy <SerializerRepresentation>(),
                    A.Dummy <TypeRepresentationWithAndWithoutVersion>(),
                    A.Dummy <TypeRepresentationWithAndWithoutVersion>(),
                    A.Dummy <IReadOnlyCollection <NamedValue <string> > >(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <UtcDateTime>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new GetStreamFromRepresentationOp <FileStreamRepresentation, MemoryStandardStream>(
                    A.Dummy <FileStreamRepresentation>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var scenario = ThreadSafeRandom.Next(1, 5);

                switch (scenario)
                {
                case 1:
                    return(new PutRecordResult(A.Dummy <long>(), null));

                case 2:
                    return(new PutRecordResult(null, Some.ReadOnlyDummies <long>().ToList()));

                case 3:
                    return(new PutRecordResult(null, Some.ReadOnlyDummies <long>().ToList(), Some.ReadOnlyDummies <long>().ToList()));

                case 4:
                    return(new PutRecordResult(A.Dummy <long>(), Some.ReadOnlyDummies <long>().ToList(), Some.ReadOnlyDummies <long>().ToList()));

                default:
                    throw new NotSupportedException(FormattableString.Invariant($"Invalid scenario {scenario} for creating a dummy {nameof(PutRecordResult)}."));
                }
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var scenario = ThreadSafeRandom.Next(1, 4);

                switch (scenario)
                {
                case 1:
                    return(new TryHandleRecordResult(null, false));

                case 2:
                    return(new TryHandleRecordResult(A.Dummy <StreamRecord>(), false));

                case 3:
                    return(new TryHandleRecordResult(null, true));

                default:
                    throw new NotSupportedException(FormattableString.Invariant($"Invalid scenario {scenario} for creating a dummy {nameof(TryHandleRecordResult)}."));
                }
            });

            // ------------------------------- ENUMS --------------------------------------
            AutoFixtureBackedDummyFactory.ConstrainDummyToBeOneOf(VersionMatchStrategy.Any, VersionMatchStrategy.SpecifiedVersion);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(CompositeHandlingStatus.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(ExistingDatabaseStrategy.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(ExistingRecordStrategy.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(ExistingStreamStrategy.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(HandlingStatus.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(OrderRecordsBy.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(RecordNotFoundStrategy.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(StreamNotFoundStrategy.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(StreamRecordItemsToInclude.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(TagMatchStrategy.Unknown);

            // ------------------------------- MODEL INTERFACES --------------------------------------
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IResourceLocator>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IStreamRepresentation>();

            // ------------------------------- OPERATIONS -------------------------------------
            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new PruneBeforeInternalRecordDateOp(
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new StandardPruneStreamOp(
                    A.Dummy <long>(),
                    A.Dummy <UtcDateTime>(),
                    A.Dummy <string>(),
                    A.Dummy <IResourceLocator>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new StandardUpdateHandlingStatusForRecordOp(
                    A.Dummy <long>(),
                    A.Dummy <string>(),
                    A.Dummy <HandlingStatus>().ThatIsNot(HandlingStatus.DisabledForStream),
                    Some.ReadOnlyDummies <HandlingStatus>().ToList(),
                    A.Dummy <string>(),
                    Some.ReadOnlyDummies <NamedValue <string> >().ToList(),
                    A.Dummy <bool>(),
                    A.Dummy <IResourceLocator>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () => new StandardUpdateHandlingStatusForStreamOp(
                    A.Dummy <HandlingStatus>().ThatIsIn(new[] { HandlingStatus.DisabledForStream, HandlingStatus.AvailableByDefault }),
                    A.Dummy <string>(),
                    Some.ReadOnlyDummies <NamedValue <string> >().ToList(),
                    A.Dummy <IResourceLocator>()));

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var existingRecordStrategy = A.Dummy <ExistingRecordStrategy>();

                var result = new PutAndReturnInternalRecordIdOp <Version>(
                    A.Dummy <Version>(),
                    A.Dummy <IReadOnlyCollection <NamedValue <string> > >(),
                    existingRecordStrategy,
                    existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundById || existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundByIdAndType
                            ? (int?)A.Dummy <ZeroOrPositiveInteger>()
                            : null,
                    A.Dummy <VersionMatchStrategy>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var existingRecordStrategy = A.Dummy <ExistingRecordStrategy>();

                var result = new PutOp <Version>(
                    A.Dummy <Version>(),
                    A.Dummy <IReadOnlyCollection <NamedValue <string> > >(),
                    existingRecordStrategy,
                    existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundById || existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundByIdAndType
                            ? (int?)A.Dummy <ZeroOrPositiveInteger>()
                            : null,
                    A.Dummy <VersionMatchStrategy>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var existingRecordStrategy = A.Dummy <ExistingRecordStrategy>();

                var result = new PutWithIdAndReturnInternalRecordIdOp <Version, Version>(
                    A.Dummy <Version>(),
                    A.Dummy <Version>(),
                    A.Dummy <IReadOnlyCollection <NamedValue <string> > >(),
                    existingRecordStrategy,
                    existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundById || existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundByIdAndType
                            ? (int?)A.Dummy <ZeroOrPositiveInteger>()
                            : null,
                    A.Dummy <VersionMatchStrategy>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var existingRecordStrategy = A.Dummy <ExistingRecordStrategy>();

                var result = new PutWithIdOp <Version, Version>(
                    A.Dummy <Version>(),
                    A.Dummy <Version>(),
                    A.Dummy <IReadOnlyCollection <NamedValue <string> > >(),
                    existingRecordStrategy,
                    existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundById || existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundByIdAndType
                            ? (int?)A.Dummy <ZeroOrPositiveInteger>()
                            : null,
                    A.Dummy <VersionMatchStrategy>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var existingRecordStrategy = A.Dummy <ExistingRecordStrategy>();

                var result = new StandardPutRecordOp(
                    A.Dummy <StreamRecordMetadata>(),
                    A.Dummy <DescribedSerializationBase>(),
                    existingRecordStrategy,
                    existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundById || existingRecordStrategy == ExistingRecordStrategy.PruneIfFoundByIdAndType
                            ? (int?)A.Dummy <ZeroOrPositiveInteger>()
                            : null,
                    A.Dummy <VersionMatchStrategy>(),
                    A.Dummy <long?>(),
                    A.Dummy <IResourceLocator>());

                return(result);
            });

            // ------------------------------- OPERATION INTERFACES -------------------------------------
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IPruneOp>();
        }
        public AccountingTimeDummyFactory()
        {
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(DayOfMonth.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(MonthNumber.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(MonthOfYear.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(QuarterNumber.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(UnitOfTimeKind.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(UnitOfTimeGranularity.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(ReportingPeriodComponent.Invalid);

            AutoFixtureBackedDummyFactory.UseRandomConcreteSubclassForDummy <UnitOfTime>();
            AutoFixtureBackedDummyFactory.UseRandomConcreteSubclassForDummy <CalendarUnitOfTime>();
            AutoFixtureBackedDummyFactory.UseRandomConcreteSubclassForDummy <FiscalUnitOfTime>();
            AutoFixtureBackedDummyFactory.UseRandomConcreteSubclassForDummy <GenericUnitOfTime>();

            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IHaveAMonth>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IHaveAQuarter>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IHaveAYear>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IAmBoundedTime>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IAmUnboundedTime>();

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                var result = new GenericMonth(year, A.Dummy <MonthNumber>());
                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                var result = new GenericQuarter(year, A.Dummy <QuarterNumber>());
                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                var result = new GenericYear(year);
                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                var result = new FiscalMonth(year, A.Dummy <MonthNumber>());
                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                var result = new FiscalQuarter(year, A.Dummy <QuarterNumber>());
                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                var result = new FiscalYear(year);
                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                while (true)
                {
                    try
                    {
                        var date   = A.Dummy <DateTime>();
                        var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                        var result = new CalendarDay(year, (MonthOfYear)date.Month, (DayOfMonth)date.Day);
                        return(result);
                    }
                    catch (ArgumentException)
                    {
                    }
                }
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                var result = new CalendarMonth(year, A.Dummy <MonthOfYear>());
                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                var result = new CalendarQuarter(year, A.Dummy <QuarterNumber>());
                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year   = ThreadSafeRandom.Next(MinYear, MaxYear + 1);
                var result = new CalendarYear(year);
                return(result);
            });

            AddDummyCreatorForAbstractReportingPeriod <UnitOfTime>();
            AddDummyCreatorForAbstractReportingPeriod <CalendarUnitOfTime>();
            AddDummyCreatorForAbstractReportingPeriod <FiscalUnitOfTime>();
            AddDummyCreatorForAbstractReportingPeriod <GenericUnitOfTime>();
            AddDummyCreatorForConcreteReportingPeriod <CalendarDay>();
            AddDummyCreatorForConcreteReportingPeriod <CalendarQuarter>();
            AddDummyCreatorForConcreteReportingPeriod <CalendarMonth>();
            AddDummyCreatorForConcreteReportingPeriod <CalendarYear>();
            AddDummyCreatorForConcreteReportingPeriod <CalendarUnbounded>();
            AddDummyCreatorForConcreteReportingPeriod <FiscalMonth>();
            AddDummyCreatorForConcreteReportingPeriod <FiscalQuarter>();
            AddDummyCreatorForConcreteReportingPeriod <FiscalYear>();
            AddDummyCreatorForConcreteReportingPeriod <FiscalUnbounded>();
            AddDummyCreatorForConcreteReportingPeriod <GenericMonth>();
            AddDummyCreatorForConcreteReportingPeriod <GenericQuarter>();
            AddDummyCreatorForConcreteReportingPeriod <GenericYear>();
            AddDummyCreatorForConcreteReportingPeriod <GenericUnbounded>();
        }
Пример #4
0
        public NotificationDummyFactory()
        {
            /* Add any overriding or custom registrations here. */

            // enums
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(CannotPrepareToSendOnChannelAction.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(DeliveryChannelAction.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(FailureAction.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(PrepareToSendOnChannelFailureAction.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(AttemptToSendNotificationOutcome.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(ChannelOperationOutcome.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(GetAudienceOutcome.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(GetDeliveryChannelConfigsOutcome.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(PrepareToSendNotificationOutcome.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(PrepareToSendOnChannelOutcome.Unknown);

            // interfaces
            AutoFixtureBackedDummyFactory.AddDummyCreator <IOperation>(A.Dummy <OperationBase>);// remove when moved to Protocol Dummy Factory
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IAudience>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IDeliveryChannel>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IFailure>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <INotification>();

            // events
            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new CouldNotSendOnAnyPreparedChannelEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              A.Dummy <AttemptToSendNotificationResult>().Whose(_ => _.GetOutcome() == AttemptToSendNotificationOutcome.CouldNotSendOnAnyPreparedChannel)));

            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new SentOnAllPreparedChannelsEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              A.Dummy <AttemptToSendNotificationResult>().Whose(_ => _.GetOutcome() == AttemptToSendNotificationOutcome.SentOnAllPreparedChannels)));

            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new SentOnSomePreparedChannelsEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              A.Dummy <AttemptToSendNotificationResult>().Whose(_ => _.GetOutcome() == AttemptToSendNotificationOutcome.SentOnSomePreparedChannels)));

            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new CouldNotGetOrUseAudienceEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              A.Dummy <GetAudienceResult>().Whose(_ => (_.GetOutcome() != GetAudienceOutcome.GotAudienceWithNoFailuresReported) && (_.GetOutcome() != GetAudienceOutcome.GotAudienceWithReportedFailuresIgnored))));

            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new CouldNotGetOrUseDeliveryChannelConfigsEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              GetPassingAudienceResult(),
                                                              A.Dummy <GetDeliveryChannelConfigsResult>().Whose(_ => (_.GetOutcome() != GetDeliveryChannelConfigsOutcome.GotDeliveryChannelConfigsWithNoFailuresReported) && (_.GetOutcome() != GetDeliveryChannelConfigsOutcome.GotDeliveryChannelConfigsWithReportedFailuresIgnored))));

            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new AudienceOptedOutOfAllChannelsEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              GetPassingAudienceResult(),
                                                              GetPassingDeliveryChannelConfigsResult(),
                                                              A.Dummy <PrepareToSendNotificationResult>().Whose(_ => (_.GetOutcome() == PrepareToSendNotificationOutcome.AudienceOptedOutOfAllChannels))));

            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new CouldNotPrepareToSendOnAnyChannelEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              GetPassingAudienceResult(),
                                                              GetPassingDeliveryChannelConfigsResult(),
                                                              A.Dummy <PrepareToSendNotificationResult>().Whose(_ => (_.GetOutcome() == PrepareToSendNotificationOutcome.CouldNotPrepareToSendOnAnyChannelDespiteAttemptingAll) || (_.GetOutcome() == PrepareToSendNotificationOutcome.CouldNotPrepareToSendOnAnyChannelBecauseOneForcedAllToBeDiscarded))));

            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new PreparedToSendOnAllChannelsEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              GetPassingAudienceResult(),
                                                              GetPassingDeliveryChannelConfigsResult(),
                                                              A.Dummy <PrepareToSendNotificationResult>().Whose(_ => (_.GetOutcome() == PrepareToSendNotificationOutcome.PreparedToSendOnAllChannels))));

            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new PreparedToSendOnSomeChannelsEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              GetPassingAudienceResult(),
                                                              GetPassingDeliveryChannelConfigsResult(),
                                                              A.Dummy <PrepareToSendNotificationResult>().Whose(_ => (_.GetOutcome() == PrepareToSendNotificationOutcome.PreparedToSendOnSomeChannels))));

            AutoFixtureBackedDummyFactory.AddDummyCreator(() => new SendNotificationRequestedEvent(
                                                              A.Dummy <long>(),
                                                              A.Dummy <UtcDateTime>(),
                                                              A.Dummy <SendNotificationOp>()));

            // model classes
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var channelToOperationsOutcomeInfoMap = new Dictionary <IDeliveryChannel, IReadOnlyCollection <ChannelOperationOutcomeInfo> >();

                var randomIndex = ThreadSafeRandom.Next(1, 4);

                var randomChannels = new IDeliveryChannel[] { new SlackDeliveryChannel(), new EmailDeliveryChannel() }.RandomizeElements().ToArray();

                if (randomIndex == 1)
                {
                    // SentOnAllPreparedChannels
                    randomChannels = randomChannels.Take(ThreadSafeRandom.Next(1, randomChannels.Length + 1)).ToArray();

                    foreach (var randomChannel in randomChannels)
                    {
                        channelToOperationsOutcomeInfoMap.Add(
                            randomChannel,
                            Some.ReadOnlyDummies <ChannelOperationOutcomeInfo>().Whose(_ => _.All(o => o.Outcome == ChannelOperationOutcome.Succeeded)).ToList());
                    }
                }
                else if (randomIndex == 2)
                {
                    // SentOnSomePreparedChannels
                    channelToOperationsOutcomeInfoMap.Add(
                        randomChannels[0],
                        Some.ReadOnlyDummies <ChannelOperationOutcomeInfo>().Whose(_ => _.Select(o => o.Outcome).Distinct().Count() > 1).ToList());

                    channelToOperationsOutcomeInfoMap.Add(
                        randomChannels[1],
                        Some.ReadOnlyDummies <ChannelOperationOutcomeInfo>().Whose(_ => _.All(o => o.Outcome == ChannelOperationOutcome.Succeeded)).ToList());
                }
                else
                {
                    // CouldNotSendOnAnyPreparedChannel
                    channelToOperationsOutcomeInfoMap.Add(
                        randomChannels[0],
                        Some.ReadOnlyDummies <ChannelOperationOutcomeInfo>().Whose(_ => _.Select(o => o.Outcome).Distinct().Count() > 1).ToList());

                    channelToOperationsOutcomeInfoMap.Add(
                        randomChannels[1],
                        Some.ReadOnlyDummies <ChannelOperationOutcomeInfo>().Whose(_ => _.All(o => o.Outcome == ChannelOperationOutcome.Failed)).ToList());
                }


                var result = new AttemptToSendNotificationResult(channelToOperationsOutcomeInfoMap);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var randomIndex = ThreadSafeRandom.Next(1, 6);

                GetAudienceResult result;

                if (randomIndex == 1)
                {
                    // GotAudienceWithNoFailuresReported
                    result = new GetAudienceResult(A.Dummy <IAudience>(), null, A.Dummy <FailureAction>());
                }
                else if (randomIndex == 2)
                {
                    // GotAudienceWithReportedFailuresIgnored
                    result = new GetAudienceResult(A.Dummy <IAudience>(), Some.ReadOnlyDummies <IFailure>().ToList(), FailureAction.IgnoreAndProceedIfPossibleOtherwiseStop);
                }
                else if (randomIndex == 3)
                {
                    // CouldNotGetAudienceAndNoFailuresReported
                    if (ThreadSafeRandom.Next(2) == 0)
                    {
                        result = new GetAudienceResult(null, null, A.Dummy <FailureAction>());
                    }
                    else
                    {
                        result = new GetAudienceResult(null, new IFailure[0], A.Dummy <FailureAction>());
                    }
                }
                else if (randomIndex == 4)
                {
                    // CouldNotGetAudienceWithSomeFailuresReported
                    result = new GetAudienceResult(null, Some.ReadOnlyDummies <IFailure>().ToList(), A.Dummy <FailureAction>());
                }
                else
                {
                    // DespiteGettingAudienceFailuresPreventUsingIt
                    result = new GetAudienceResult(A.Dummy <IAudience>(), Some.ReadOnlyDummies <IFailure>().ToList(), FailureAction.Stop);
                }

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var randomChannels = new IDeliveryChannel[] { new SlackDeliveryChannel(), new EmailDeliveryChannel() };

                randomChannels = randomChannels.RandomizeElements().Take(ThreadSafeRandom.Next(1, randomChannels.Length + 1)).ToArray();

                var deliveryChannelConfigs = randomChannels.Select(_ => new DeliveryChannelConfig(_, A.Dummy <DeliveryChannelAction>())).ToList();

                var randomIndex = ThreadSafeRandom.Next(1, 6);

                GetDeliveryChannelConfigsResult result;

                if (randomIndex == 1)
                {
                    // GotDeliveryChannelConfigsWithNoFailuresReported
                    result = new GetDeliveryChannelConfigsResult(
                        deliveryChannelConfigs,
                        null,
                        A.Dummy <FailureAction>());
                }
                else if (randomIndex == 2)
                {
                    // GotDeliveryChannelConfigsWithReportedFailuresIgnored
                    result = new GetDeliveryChannelConfigsResult(
                        deliveryChannelConfigs,
                        Some.ReadOnlyDummies <IFailure>().ToList(),
                        FailureAction.IgnoreAndProceedIfPossibleOtherwiseStop);
                }
                else if (randomIndex == 3)
                {
                    // CouldNotGetDeliveryChannelConfigsAndNoFailuresReported
                    result = new GetDeliveryChannelConfigsResult(null, null, A.Dummy <FailureAction>());
                }
                else if (randomIndex == 4)
                {
                    // CouldNotGetDeliveryChannelConfigsWithSomeFailuresReported
                    result = new GetDeliveryChannelConfigsResult(null, Some.ReadOnlyDummies <IFailure>().ToList(), A.Dummy <FailureAction>());
                }
                else
                {
                    // DespiteGettingDeliveryChannelConfigsFailuresPreventUsingThem
                    result = new GetDeliveryChannelConfigsResult(
                        deliveryChannelConfigs,
                        Some.ReadOnlyDummies <IFailure>().ToList(),
                        FailureAction.Stop);
                }

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var randomChannels = new IDeliveryChannel[] { new SlackDeliveryChannel(), new EmailDeliveryChannel() }.RandomizeElements().ToArray();

                var randomIndex = ThreadSafeRandom.Next(1, 6);

                PrepareToSendNotificationResult result;

                if (randomIndex == 1)
                {
                    // AudienceOptedOutOfAllChannels
                    result = new PrepareToSendNotificationResult(
                        new Dictionary <IDeliveryChannel, PrepareToSendOnChannelResult>(),
                        A.Dummy <CannotPrepareToSendOnChannelAction>(),
                        new IDeliveryChannel[0]);
                }
                else if (randomIndex == 2)
                {
                    // PreparedToSendOnAllChannels
                    var channelToPrepareToSendOnChannelResultMap = new Dictionary <IDeliveryChannel, PrepareToSendOnChannelResult>();

                    foreach (var randomChannel in randomChannels)
                    {
                        channelToPrepareToSendOnChannelResultMap.Add(
                            randomChannel,
                            new PrepareToSendOnChannelResult(GetChannelOperationInstructions(), null, A.Dummy <PrepareToSendOnChannelFailureAction>()));
                    }

                    result = new PrepareToSendNotificationResult(
                        channelToPrepareToSendOnChannelResultMap,
                        A.Dummy <CannotPrepareToSendOnChannelAction>(),
                        randomChannels);
                }
                else if (randomIndex == 3)
                {
                    // PreparedToSendOnSomeChannels
                    result = new PrepareToSendNotificationResult(
                        new Dictionary <IDeliveryChannel, PrepareToSendOnChannelResult>
                    {
                        {
                            randomChannels[0],
                            new PrepareToSendOnChannelResult(
                                GetChannelOperationInstructions(),
                                Some.ReadOnlyDummies <IFailure>().ToList(),
                                PrepareToSendOnChannelFailureAction.IgnoreAndProceedIfPossibleOtherwiseDoNotSendOnChannel)
                        },
                        {
                            randomChannels[1],
                            new PrepareToSendOnChannelResult(
                                null,
                                null,
                                PrepareToSendOnChannelFailureAction.IgnoreAndProceedIfPossibleOtherwiseDoNotSendOnChannel)
                        },
                    },
                        CannotPrepareToSendOnChannelAction.ContinueAndAttemptPreparingToSendOnNextChannel,
                        new IDeliveryChannel[] { randomChannels[0] });
                }
                else if (randomIndex == 4)
                {
                    // CouldNotPrepareToSendOnAnyChannelDespiteAttemptingAll
                    result = new PrepareToSendNotificationResult(
                        new Dictionary <IDeliveryChannel, PrepareToSendOnChannelResult>
                    {
                        {
                            new SlackDeliveryChannel(),
                            new PrepareToSendOnChannelResult(
                                null,
                                null,
                                PrepareToSendOnChannelFailureAction.IgnoreAndProceedIfPossibleOtherwiseDoNotSendOnChannel)
                        },
                        {
                            new EmailDeliveryChannel(),
                            new PrepareToSendOnChannelResult(
                                GetChannelOperationInstructions(),
                                Some.ReadOnlyDummies <IFailure>().ToList(),
                                PrepareToSendOnChannelFailureAction.DoNotSendOnChannel)
                        },
                    },
                        CannotPrepareToSendOnChannelAction.ContinueAndAttemptPreparingToSendOnNextChannel,
                        new IDeliveryChannel[0]);
                }
                else
                {
                    // CouldNotPrepareToSendOnAnyChannelBecauseOneForcedAllToBeDiscarded
                    result = new PrepareToSendNotificationResult(
                        new Dictionary <IDeliveryChannel, PrepareToSendOnChannelResult>
                    {
                        {
                            randomChannels[0],
                            new PrepareToSendOnChannelResult(
                                GetChannelOperationInstructions(),
                                Some.ReadOnlyDummies <IFailure>().ToList(),
                                PrepareToSendOnChannelFailureAction.DoNotSendOnChannel)
                        },
                    },
                        CannotPrepareToSendOnChannelAction.StopAndNotDoNotSendOnAnyChannel,
                        new IDeliveryChannel[0]);
                }

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var randomIndex = ThreadSafeRandom.Next(1, 6);

                PrepareToSendOnChannelResult result;

                if (randomIndex == 1)
                {
                    // PreparedToSendOnChannelWithNoFailuresReported
                    result = new PrepareToSendOnChannelResult(
                        GetChannelOperationInstructions(),
                        null,
                        A.Dummy <PrepareToSendOnChannelFailureAction>());
                }
                else if (randomIndex == 2)
                {
                    // PreparedToSendOnChannelWithReportedFailuresIgnored
                    result = new PrepareToSendOnChannelResult(
                        GetChannelOperationInstructions(),
                        Some.ReadOnlyDummies <IFailure>().ToList(),
                        PrepareToSendOnChannelFailureAction.IgnoreAndProceedIfPossibleOtherwiseDoNotSendOnChannel);
                }
                else if (randomIndex == 3)
                {
                    // CouldNotPrepareToSendOnChannelAndNoFailuresReported
                    if (ThreadSafeRandom.Next(2) == 0)
                    {
                        result = new PrepareToSendOnChannelResult(
                            null,
                            null,
                            PrepareToSendOnChannelFailureAction.IgnoreAndProceedIfPossibleOtherwiseDoNotSendOnChannel);
                    }
                    else
                    {
                        result = new PrepareToSendOnChannelResult(
                            new ChannelOperationInstruction[0],
                            new IFailure[0],
                            PrepareToSendOnChannelFailureAction.IgnoreAndProceedIfPossibleOtherwiseDoNotSendOnChannel);
                    }
                }
                else if (randomIndex == 4)
                {
                    // CouldNotPrepareToSendOnChannelWithSomeFailuresReported
                    result = new PrepareToSendOnChannelResult(
                        null,
                        Some.ReadOnlyDummies <IFailure>().ToList(),
                        PrepareToSendOnChannelFailureAction.IgnoreAndProceedIfPossibleOtherwiseDoNotSendOnChannel);
                }
                else
                {
                    // DespitePreparingToSendOnChannelFailuresPreventUsingIt
                    result = new PrepareToSendOnChannelResult(
                        GetChannelOperationInstructions(),
                        Some.ReadOnlyDummies <IFailure>().ToList(),
                        PrepareToSendOnChannelFailureAction.DoNotSendOnChannel);
                }

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var succeededEventType = A.Dummy <TypeRepresentation>();

                var failedEventType = A.Dummy <TypeRepresentation>().ThatIsNot(succeededEventType);

                var result = new ChannelOperationMonitoringInfo(A.Dummy <long>(), succeededEventType, failedEventType);

                return(result);
            });
        }
Пример #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AccountingTimeDummyFactory"/> class.
        /// </summary>
        public AccountingTimeDummyFactory()
        {
            // ------------------------------------------------------------------------------------
            // ---------------------------  accounting period system ------------------------------
            // ------------------------------------------------------------------------------------
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(FiftyTwoFiftyThreeWeekMethodology.Unknown);

            AutoFixtureBackedDummyFactory.UseRandomConcreteSubclassForDummy <AccountingPeriodSystem>();

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var result = new FiscalYearAccountingPeriodSystem(A.Dummy <MonthOfYear>().ThatIsNot(MonthOfYear.December));

                return(result);
            });

            // ------------------------------------------------------------------------------------
            // -------------------------------------  time ----------------------------------------
            // ------------------------------------------------------------------------------------
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(DayOfMonth.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(MonthNumber.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(MonthOfYear.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(QuarterNumber.Invalid);

            AutoFixtureBackedDummyFactory.UseRandomConcreteSubclassForDummy <UnitOfTime>();
            AutoFixtureBackedDummyFactory.UseRandomConcreteSubclassForDummy <CalendarUnitOfTime>();
            AutoFixtureBackedDummyFactory.UseRandomConcreteSubclassForDummy <FiscalUnitOfTime>();
            AutoFixtureBackedDummyFactory.UseRandomConcreteSubclassForDummy <GenericUnitOfTime>();

            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IHaveAMonth>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IHaveAQuarter>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IHaveAYear>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IAmBoundedTime>();
            AutoFixtureBackedDummyFactory.UseRandomInterfaceImplementationForDummy <IAmUnboundedTime>();

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                var result = new GenericMonth(year, A.Dummy <MonthNumber>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                var result = new GenericQuarter(year, A.Dummy <QuarterNumber>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                var result = new GenericYear(year);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                var result = new FiscalMonth(year, A.Dummy <MonthNumber>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                var result = new FiscalQuarter(year, A.Dummy <QuarterNumber>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                var result = new FiscalYear(year);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                while (true)
                {
                    try
                    {
                        var date = A.Dummy <DateTime>();

                        var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                        var result = new CalendarDay(year, (MonthOfYear)date.Month, (DayOfMonth)date.Day);

                        return(result);
                    }
                    catch (ArgumentException)
                    {
                    }
                }
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                var result = new CalendarMonth(year, A.Dummy <MonthOfYear>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                var result = new CalendarQuarter(year, A.Dummy <QuarterNumber>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var year = ThreadSafeRandom.Next(MinYear, MaxYear + 1);

                var result = new CalendarYear(year);

                return(result);
            });

            // ------------------------------------------------------------------------------------
            // ------------------------------  reporting period -----------------------------------
            // ------------------------------------------------------------------------------------
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(ReportingPeriodComponent.Invalid);

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var potentialTypes = new[] { typeof(GenericReportingPeriod), typeof(FiscalReportingPeriod), typeof(CalendarReportingPeriod) };

                var result = GetRandomReportingPeriodWrapper(potentialTypes).ReportingPeriod;

                return(result);
            });

            // ------------------------------------------------------------------------------------
            // -------------------------------------  unit ----------------------------------------
            // ------------------------------------------------------------------------------------
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(UnitOfTimeKind.Invalid);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(UnitOfTimeGranularity.Invalid);

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var unitOfTime = A.Dummy <UnitOfTime>().ThatIs(_ => !(_ is IAmUnboundedTime));

                var result = new Unit(unitOfTime.UnitOfTimeKind, unitOfTime.UnitOfTimeGranularity);

                return(result);
            });

            // ------------------------------------------------------------------------------------
            // --------------------------  reporting period wrappers ------------------------------
            // ------------------------------------------------------------------------------------
            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <GenericMonth>();

                var end = A.Dummy <GenericMonth>();

                var result = end >= start
                        ? new GenericMonthReportingPeriod(start, end)
                        : new GenericMonthReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <GenericQuarter>();

                var end = A.Dummy <GenericQuarter>();

                var result = end >= start
                        ? new GenericQuarterReportingPeriod(start, end)
                        : new GenericQuarterReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <GenericYear>();

                var end = A.Dummy <GenericYear>();

                var result = end >= start
                        ? new GenericYearReportingPeriod(start, end)
                        : new GenericYearReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <FiscalMonth>();

                var end = A.Dummy <FiscalMonth>();

                var result = end >= start
                        ? new FiscalMonthReportingPeriod(start, end)
                        : new FiscalMonthReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <FiscalQuarter>();

                var end = A.Dummy <FiscalQuarter>();

                var result = end >= start
                        ? new FiscalQuarterReportingPeriod(start, end)
                        : new FiscalQuarterReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <FiscalYear>();

                var end = A.Dummy <FiscalYear>();

                var result = end >= start
                        ? new FiscalYearReportingPeriod(start, end)
                        : new FiscalYearReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <CalendarDay>();

                var end = A.Dummy <CalendarDay>();

                var result = end >= start
                        ? new CalendarDayReportingPeriod(start, end)
                        : new CalendarDayReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <CalendarMonth>();

                var end = A.Dummy <CalendarMonth>();

                var result = end >= start
                        ? new CalendarMonthReportingPeriod(start, end)
                        : new CalendarMonthReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <CalendarQuarter>();

                var end = A.Dummy <CalendarQuarter>();

                var result = end >= start
                        ? new CalendarQuarterReportingPeriod(start, end)
                        : new CalendarQuarterReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var start = A.Dummy <CalendarYear>();

                var end = A.Dummy <CalendarYear>();

                var result = end >= start
                        ? new CalendarYearReportingPeriod(start, end)
                        : new CalendarYearReportingPeriod(end, start);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var potentialTypes = new[] { typeof(BoundedGenericReportingPeriod), typeof(BoundedFiscalReportingPeriod), typeof(BoundedCalendarReportingPeriod) };

                var reportingPeriod = GetRandomReportingPeriodWrapper(potentialTypes).ReportingPeriod;

                var result = new BoundedReportingPeriod(reportingPeriod.Start, reportingPeriod.End);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var potentialTypes = new[] { typeof(GenericMonthReportingPeriod), typeof(GenericQuarterReportingPeriod), typeof(GenericYearReportingPeriod) };

                var reportingPeriod = GetRandomReportingPeriodWrapper(potentialTypes).ReportingPeriod;

                var result = new BoundedGenericReportingPeriod((GenericUnitOfTime)reportingPeriod.Start, (GenericUnitOfTime)reportingPeriod.End);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var potentialTypes = new[] { typeof(FiscalMonthReportingPeriod), typeof(FiscalQuarterReportingPeriod), typeof(FiscalYearReportingPeriod) };

                var reportingPeriod = GetRandomReportingPeriodWrapper(potentialTypes).ReportingPeriod;

                var result = new BoundedFiscalReportingPeriod((FiscalUnitOfTime)reportingPeriod.Start, (FiscalUnitOfTime)reportingPeriod.End);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var potentialTypes = new[] { typeof(CalendarDayReportingPeriod), typeof(CalendarMonthReportingPeriod), typeof(CalendarQuarterReportingPeriod), typeof(CalendarYearReportingPeriod) };

                var reportingPeriod = GetRandomReportingPeriodWrapper(potentialTypes).ReportingPeriod;

                var result = new BoundedCalendarReportingPeriod((CalendarUnitOfTime)reportingPeriod.Start, (CalendarUnitOfTime)reportingPeriod.End);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var boundedReportingPeriod = A.Dummy <BoundedGenericReportingPeriod>().ReportingPeriod;

                var result = ThreadSafeRandom.Next(0, 2) == 0
                        ? new SemiBoundedGenericReportingPeriod((GenericUnitOfTime)boundedReportingPeriod.Start, new GenericUnbounded())
                        : new SemiBoundedGenericReportingPeriod(new GenericUnbounded(), (GenericUnitOfTime)boundedReportingPeriod.End);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var boundedReportingPeriod = A.Dummy <BoundedFiscalReportingPeriod>().ReportingPeriod;

                var result = ThreadSafeRandom.Next(0, 2) == 0
                        ? new SemiBoundedFiscalReportingPeriod((FiscalUnitOfTime)boundedReportingPeriod.Start, new FiscalUnbounded())
                        : new SemiBoundedFiscalReportingPeriod(new FiscalUnbounded(), (FiscalUnitOfTime)boundedReportingPeriod.End);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var boundedReportingPeriod = A.Dummy <BoundedCalendarReportingPeriod>().ReportingPeriod;

                var result = ThreadSafeRandom.Next(0, 2) == 0
                        ? new SemiBoundedCalendarReportingPeriod((CalendarUnitOfTime)boundedReportingPeriod.Start, new CalendarUnbounded())
                        : new SemiBoundedCalendarReportingPeriod(new CalendarUnbounded(), (CalendarUnitOfTime)boundedReportingPeriod.End);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var potentialTypes = new[] { typeof(GenericUnboundedReportingPeriod), typeof(SemiBoundedGenericReportingPeriod), typeof(BoundedGenericReportingPeriod) };

                var reportingPeriod = GetRandomReportingPeriodWrapper(potentialTypes).ReportingPeriod;

                var result = new GenericReportingPeriod((GenericUnitOfTime)reportingPeriod.Start, (GenericUnitOfTime)reportingPeriod.End);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var potentialTypes = new[] { typeof(FiscalUnboundedReportingPeriod), typeof(SemiBoundedFiscalReportingPeriod), typeof(BoundedFiscalReportingPeriod) };

                var reportingPeriod = GetRandomReportingPeriodWrapper(potentialTypes).ReportingPeriod;

                var result = new FiscalReportingPeriod((FiscalUnitOfTime)reportingPeriod.Start, (FiscalUnitOfTime)reportingPeriod.End);

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var potentialTypes = new[] { typeof(CalendarUnboundedReportingPeriod), typeof(SemiBoundedCalendarReportingPeriod), typeof(BoundedCalendarReportingPeriod) };

                var reportingPeriod = GetRandomReportingPeriodWrapper(potentialTypes).ReportingPeriod;

                var result = new CalendarReportingPeriod((CalendarUnitOfTime)reportingPeriod.Start, (CalendarUnitOfTime)reportingPeriod.End);

                return(result);
            });

            // ------------------------------------------------------------------------------------
            // ------------------------------------  cutoff ---------------------------------------
            // ------------------------------------------------------------------------------------
            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var result = new RelativeCutoff(A.Dummy <Duration>(), A.Dummy <ReportingPeriodComponent>().ThatIsIn(new[] { ReportingPeriodComponent.Start, ReportingPeriodComponent.End }));

                return(result);
            });

            // ------------------------------------------------------------------------------------
            // ----------------------------------  timeseries -------------------------------------
            // ------------------------------------------------------------------------------------
            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var result = (IDatapoint)A.Dummy <Datapoint <Version> >();

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var result = (ITimeseries)A.Dummy <Timeseries <Version> >();

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var result = GetDummyTimeseries <Version>();

                return(result);
            });
        }