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