コード例 #1
0
        public void GetDistinctStringSerializedIds()
        {
            var stream = this.GetCreatedSqlStream();

            var firstId  = Guid.NewGuid().ToString().Replace("-", ",");
            var secondId = Guid.NewGuid().ToString().Replace("-", ",");

            var putOpOne            = new PutWithIdAndReturnInternalRecordIdOp <string, string>(firstId, A.Dummy <string>());
            var internalRecordIdOne = stream.GetStreamWritingWithIdProtocols <string, string>().Execute(putOpOne);

            var putOpOneAgain            = new PutWithIdAndReturnInternalRecordIdOp <string, string>(firstId, A.Dummy <string>());
            var internalRecordIdOneAgain = stream.GetStreamWritingWithIdProtocols <string, string>().Execute(putOpOneAgain);

            var putOpOneOtherType            = new PutWithIdAndReturnInternalRecordIdOp <string, short>(secondId, A.Dummy <short>());
            var internalRecordIdOneOtherType = stream.GetStreamWritingWithIdProtocols <string, short>().Execute(putOpOneOtherType);

            var putOpTwo            = new PutWithIdAndReturnInternalRecordIdOp <string, string>(secondId, A.Dummy <string>());
            var internalRecordIdTwo = stream.GetStreamWritingWithIdProtocols <string, string>().Execute(putOpTwo);

            var putOpTwoAgain         = new PutWithIdAndReturnInternalRecordIdOp <string, IdDeprecatedEvent>(secondId, new IdDeprecatedEvent(DateTime.UtcNow));
            var internalRecordIdThree = stream.GetStreamWritingWithIdProtocols <string, IdDeprecatedEvent>().Execute(putOpTwoAgain);

            var distinctWrongType = stream.Execute(
                new StandardGetDistinctStringSerializedIdsOp(
                    new RecordFilter(
                        idTypes: new[]
            {
                typeof(string).ToRepresentation(),
            },
                        objectTypes: new[]
            {
                typeof(long).ToRepresentation(),
            },
                        deprecatedIdTypes: new[]
            {
                typeof(IdDeprecatedEvent).ToRepresentation(),
            })));

            distinctWrongType.MustForTest().BeEmptyEnumerable();

            var distinct = stream.Execute(
                new StandardGetDistinctStringSerializedIdsOp(
                    new RecordFilter(
                        idTypes: new[]
            {
                typeof(string).ToRepresentation(),
            },
                        deprecatedIdTypes: new[]
            {
                typeof(IdDeprecatedEvent).ToRepresentation(),
            })));

            distinct.MustForTest().NotBeNull();
            distinct.Single().StringSerializedId.MustForTest().BeEqualTo(Invariant($"\"{firstId}\""));
        }
コード例 #2
0
        public void GetDistinctStringSerializedIds___SamedId___WithDifferentTypes()
        {
            var stream = this.GetCreatedSqlStream();

            var firstId  = Guid.NewGuid().ToString().Replace("-", ",");
            var secondId = Guid.NewGuid().ToString().Replace("-", ",");
            var thirdId  = Guid.NewGuid().ToString().Replace("-", ",");

            var putOneShortOp            = new PutWithIdAndReturnInternalRecordIdOp <string, short>(firstId, A.Dummy <short>());
            var internalRecordIdOneShort = stream.GetStreamWritingWithIdProtocols <string, short>().Execute(putOneShortOp);

            var putTwoShortOp            = new PutWithIdAndReturnInternalRecordIdOp <string, short>(secondId, A.Dummy <short>());
            var internalRecordIdTwoShort = stream.GetStreamWritingWithIdProtocols <string, short>().Execute(putTwoShortOp);

            var putThreeShortOp            = new PutWithIdAndReturnInternalRecordIdOp <string, short>(thirdId, A.Dummy <short>());
            var internalRecordIdThreeShort = stream.GetStreamWritingWithIdProtocols <string, short>().Execute(putThreeShortOp);

            var putOneLongOp            = new PutWithIdAndReturnInternalRecordIdOp <string, long>(firstId, A.Dummy <long>());
            var internalRecordIdOneLong = stream.GetStreamWritingWithIdProtocols <string, long>().Execute(putOneLongOp);

            var putTwoLongOp            = new PutWithIdAndReturnInternalRecordIdOp <string, long>(secondId, A.Dummy <long>());
            var internalRecordIdTwoLong = stream.GetStreamWritingWithIdProtocols <string, long>().Execute(putTwoLongOp);

            var putThreeLongOp            = new PutWithIdAndReturnInternalRecordIdOp <string, long>(thirdId, A.Dummy <long>());
            var internalRecordIdThreeLong = stream.GetStreamWritingWithIdProtocols <string, long>().Execute(putThreeLongOp);

            var distinct = stream.Execute(
                new StandardGetDistinctStringSerializedIdsOp(
                    new RecordFilter(
                        idTypes: new[]
            {
                typeof(string).ToRepresentation(),
            },
                        objectTypes: new[]
            {
                typeof(short).ToRepresentation(),
            },
                        deprecatedIdTypes: new[]
            {
                typeof(IdDeprecatedEvent).ToRepresentation(),
            })));

            distinct.MustForTest().NotBeNull();
            distinct.Select(_ => _.StringSerializedId)
            .ToList()
            .MustForTest()
            .BeEqualTo(
                new[]
            {
                Invariant($"\"{firstId}\""),
                Invariant($"\"{secondId}\""),
                Invariant($"\"{thirdId}\""),
            }.ToList());
        }
コード例 #3
0
        public void TagsCanBeNullTest()
        {
            var stream = this.GetCreatedSqlStream();

            var id = A.Dummy <string>();

            var putOpTwo            = new PutWithIdAndReturnInternalRecordIdOp <string, string>(id, A.Dummy <string>());
            var internalRecordIdTwo = stream.GetStreamWritingWithIdProtocols <string, string>().Execute(putOpTwo);
            var latestTwo           = stream.Execute(
                new StandardGetLatestRecordOp(
                    new RecordFilter(
                        new[]
            {
                (long)internalRecordIdTwo,
            })));

            latestTwo.InternalRecordId.MustForTest().BeEqualTo((long)internalRecordIdTwo);
            latestTwo.Metadata.Tags.MustForTest().BeNull();
        }
コード例 #4
0
        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>();
        }