Example #1
0
        public Task When_adding_grade_separated_junctions()
        {
            var message         = _fixture.Create <BackOffice.Messages.RoadNetworkChangesBasedOnArchiveAccepted>();
            var expectedRecords = Array.ConvertAll(message.Changes, change =>
            {
                var junction = change.GradeSeparatedJunctionAdded;
                return((object)new GradeSeparatedJunctionRecord
                {
                    Id = junction.Id,
                    DbaseRecord = new GradeSeparatedJunctionDbaseRecord
                    {
                        OK_OIDN = { Value = junction.Id },
                        TYPE = { Value = GradeSeparatedJunctionType.Parse(junction.Type).Translation.Identifier },
                        LBLTYPE = { Value = GradeSeparatedJunctionType.Parse(junction.Type).Translation.Name },
                        BO_WS_OIDN = { Value = junction.UpperRoadSegmentId },
                        ON_WS_OIDN = { Value = junction.LowerRoadSegmentId },
                        BEGINTIJD = { Value = Editor.Projections.LocalDateTimeTranslator.TranslateFromWhen(message.When) },
                        BEGINORG = { Value = message.OrganizationId },
                        LBLBGNORG = { Value = message.Organization }
                    }.ToBytes(_services.MemoryStreamManager, Encoding.UTF8)
                });
            });

            return(new RoadRegistry.Product.Projections.GradeSeparatedJunctionRecordProjection(_services.MemoryStreamManager, Encoding.UTF8)
                   .Scenario()
                   .Given(message)
                   .Expect(expectedRecords));
        }
Example #2
0
        public Task When_importing_grade_separated_junctions()
        {
            var data = _fixture
                       .CreateMany <ImportedGradeSeparatedJunction>()
                       .Select(junction =>
            {
                var expected = new GradeSeparatedJunctionRecord
                {
                    Id          = junction.Id,
                    DbaseRecord = new GradeSeparatedJunctionDbaseRecord
                    {
                        OK_OIDN    = { Value = junction.Id },
                        TYPE       = { Value = GradeSeparatedJunctionType.Parse(junction.Type).Translation.Identifier },
                        LBLTYPE    = { Value = GradeSeparatedJunctionType.Parse(junction.Type).Translation.Name },
                        BO_WS_OIDN = { Value = junction.UpperRoadSegmentId },
                        ON_WS_OIDN = { Value = junction.LowerRoadSegmentId },
                        BEGINTIJD  = { Value = junction.Origin.Since },
                        BEGINORG   = { Value = junction.Origin.OrganizationId },
                        LBLBGNORG  = { Value = junction.Origin.Organization }
                    }.ToBytes(_services.MemoryStreamManager, Encoding.UTF8)
                };

                return(new
                {
                    junction,
                    expected
                });
            }).ToList();

            return(new RoadRegistry.Product.Projections.GradeSeparatedJunctionRecordProjection(new RecyclableMemoryStreamManager(), Encoding.UTF8)
                   .Scenario()
                   .Given(data.Select(d => d.junction))
                   .Expect(data.Select(d => d.expected)));
        }
Example #3
0
 private static GradeSeparatedJunctionTypeDbaseRecord RecordFrom(GradeSeparatedJunctionType item)
 {
     return(new GradeSeparatedJunctionTypeDbaseRecord
     {
         TYPE = { Value = item.Translation.Identifier },
         LBLTYPE = { Value = item.Translation.Name },
         DEFTYPE = { Value = item.Translation.Description }
     });
 }
 public AddGradeSeparatedJunction(
     GradeSeparatedJunctionId temporaryId,
     GradeSeparatedJunctionType type,
     RoadSegmentId upperSegmentId,
     RoadSegmentId lowerSegmentId)
 {
     TemporaryId    = temporaryId;
     Type           = type ?? throw new ArgumentNullException(nameof(type));
     UpperSegmentId = upperSegmentId;
     LowerSegmentId = lowerSegmentId;
 }
Example #5
0
        private AddGradeSeparatedJunction Translate(Messages.AddGradeSeparatedJunction command, IRequestedChangeIdentityTranslator translator)
        {
            var permanent = _nextGradeSeparatedJunctionId();
            var temporary = new GradeSeparatedJunctionId(command.TemporaryId);

            var           upperSegmentId = new RoadSegmentId(command.UpperSegmentId);
            RoadSegmentId?temporaryUpperSegmentId;

            if (translator.TryTranslateToPermanent(upperSegmentId, out var permanentUpperSegmentId))
            {
                temporaryUpperSegmentId = upperSegmentId;
                upperSegmentId          = permanentUpperSegmentId;
            }
            else
            {
                temporaryUpperSegmentId = null;
            }

            var           lowerSegmentId = new RoadSegmentId(command.LowerSegmentId);
            RoadSegmentId?temporaryLowerSegmentId;

            if (translator.TryTranslateToPermanent(lowerSegmentId, out var permanentLowerSegmentId))
            {
                temporaryLowerSegmentId = lowerSegmentId;
                lowerSegmentId          = permanentLowerSegmentId;
            }
            else
            {
                temporaryLowerSegmentId = null;
            }

            return(new AddGradeSeparatedJunction(
                       permanent,
                       temporary,
                       GradeSeparatedJunctionType.Parse(command.Type),
                       upperSegmentId,
                       temporaryUpperSegmentId,
                       lowerSegmentId,
                       temporaryLowerSegmentId));
        }
Example #6
0
        public GradeSeparatedJunctionRecordProjection(RecyclableMemoryStreamManager manager, Encoding encoding)
        {
            if (manager == null)
            {
                throw new ArgumentNullException(nameof(manager));
            }
            if (encoding == null)
            {
                throw new ArgumentNullException(nameof(encoding));
            }

            When <Envelope <ImportedGradeSeparatedJunction> >(async(context, envelope, token) =>
            {
                var translation    = GradeSeparatedJunctionType.Parse(envelope.Message.Type).Translation;
                var junctionRecord = new GradeSeparatedJunctionRecord
                {
                    Id          = envelope.Message.Id,
                    DbaseRecord = new GradeSeparatedJunctionDbaseRecord
                    {
                        OK_OIDN    = { Value = envelope.Message.Id },
                        TYPE       = { Value = translation.Identifier },
                        LBLTYPE    = { Value = translation.Name },
                        BO_WS_OIDN = { Value = envelope.Message.UpperRoadSegmentId },
                        ON_WS_OIDN = { Value = envelope.Message.LowerRoadSegmentId },
                        BEGINTIJD  = { Value = envelope.Message.Origin.Since },
                        BEGINORG   = { Value = envelope.Message.Origin.OrganizationId },
                        LBLBGNORG  = { Value = envelope.Message.Origin.Organization },
                    }.ToBytes(manager, encoding)
                };

                await context.AddAsync(junctionRecord, token);
            });

            When <Envelope <RoadNetworkChangesBasedOnArchiveAccepted> >(async(context, envelope, token) =>
            {
                foreach (var change in envelope.Message.Changes.Flatten())
                {
                    switch (change)
                    {
                    case GradeSeparatedJunctionAdded junction:
                        var translation    = GradeSeparatedJunctionType.Parse(junction.Type).Translation;
                        var junctionRecord = new GradeSeparatedJunctionRecord
                        {
                            Id          = junction.Id,
                            DbaseRecord = new GradeSeparatedJunctionDbaseRecord
                            {
                                OK_OIDN    = { Value = junction.Id },
                                TYPE       = { Value = translation.Identifier },
                                LBLTYPE    = { Value = translation.Name },
                                BO_WS_OIDN = { Value = junction.UpperRoadSegmentId },
                                ON_WS_OIDN = { Value = junction.LowerRoadSegmentId },
                                BEGINTIJD  =
                                {
                                    Value = LocalDateTimeTranslator.TranslateFromWhen(envelope.Message.When)
                                },
                                BEGINORG  = { Value = envelope.Message.OrganizationId },
                                LBLBGNORG = { Value = envelope.Message.Organization },
                            }.ToBytes(manager, encoding)
                        };

                        await context.AddAsync(junctionRecord, token);
                        break;
                    }
                }
            });
        }