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