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