Esempio n. 1
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)));
        }
Esempio n. 2
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;
                    }
                }
            });
        }