public void TranslateWithRecordsReturnsExpectedResult() { var records = _fixture .CreateMany <EuropeanRoadChangeDbaseRecord>(new Random().Next(1, 5)) .Select((record, index) => { record.EU_OIDN.Value = index + 1; record.RECORDTYPE.Value = (short)RecordType.Added.Translation.Identifier; return(record); }) .ToArray(); var enumerator = records.ToDbaseRecordEnumerator(); var result = _sut.Translate(_entry, enumerator, TranslatedChanges.Empty); var expected = records.Aggregate( TranslatedChanges.Empty, (changes, current) => changes.Append( new Uploads.AddRoadSegmentToEuropeanRoad( new AttributeId(current.EU_OIDN.Value), new RoadSegmentId(current.WS_OIDN.Value), EuropeanRoadNumber.Parse(current.EUNUMMER.Value))) ); Assert.Equal(expected, result, new TranslatedChangeEqualityComparer()); }
private AddRoadSegmentToEuropeanRoad Translate(Messages.AddRoadSegmentToEuropeanRoad command, IRequestedChangeIdentityTranslator translator) { var permanent = _nextEuropeanRoadAttributeId(); var temporary = new AttributeId(command.TemporaryAttributeId); var segmentId = new RoadSegmentId(command.SegmentId); RoadSegmentId?temporarySegmentId; if (translator.TryTranslateToPermanent(segmentId, out var permanentSegmentId)) { temporarySegmentId = segmentId; segmentId = permanentSegmentId; } else { temporarySegmentId = null; } var number = EuropeanRoadNumber.Parse(command.Number); return(new AddRoadSegmentToEuropeanRoad ( permanent, temporary, segmentId, temporarySegmentId, number )); }
public AddRoadSegmentToEuropeanRoad( AttributeId temporaryAttributeId, RoadSegmentId segmentId, EuropeanRoadNumber number) { TemporaryAttributeId = temporaryAttributeId; SegmentId = segmentId; Number = number; }
public TranslatedChanges Translate(ZipArchiveEntry entry, IDbaseRecordEnumerator <EuropeanRoadChangeDbaseRecord> records, TranslatedChanges changes) { if (entry == null) { throw new ArgumentNullException(nameof(entry)); } if (records == null) { throw new ArgumentNullException(nameof(records)); } if (changes == null) { throw new ArgumentNullException(nameof(changes)); } while (records.MoveNext()) { var record = records.Current; if (record != null) { switch (record.RECORDTYPE.Value) { case RecordType.AddedIdentifier: changes = changes.Append( new AddRoadSegmentToEuropeanRoad( new AttributeId(record.EU_OIDN.Value), new RoadSegmentId(record.WS_OIDN.Value), EuropeanRoadNumber.Parse(record.EUNUMMER.Value) ) ); break; } } } return(changes); }
public ZipArchiveProblems Validate(ZipArchiveEntry entry, IDbaseRecordEnumerator <EuropeanRoadChangeDbaseRecord> records) { if (entry == null) { throw new ArgumentNullException(nameof(entry)); } if (records == null) { throw new ArgumentNullException(nameof(records)); } var problems = ZipArchiveProblems.None; try { var identifiers = new Dictionary <AttributeId, RecordNumber>(); var moved = records.MoveNext(); if (moved) { while (moved) { var recordContext = entry.AtDbaseRecord(records.CurrentRecordNumber); var record = records.Current; if (record != null) { if (!record.RECORDTYPE.HasValue) { problems += recordContext.RequiredFieldIsNull(record.RECORDTYPE.Field); } else { if (!RecordType.ByIdentifier.ContainsKey(record.RECORDTYPE.Value)) { problems += recordContext.RecordTypeMismatch(record.RECORDTYPE.Value); } } if (record.EU_OIDN.HasValue) { if (record.EU_OIDN.Value == 0) { problems += recordContext.IdentifierZero(); } else { var identifier = new AttributeId(record.EU_OIDN.Value); if (identifiers.TryGetValue(identifier, out var takenByRecordNumber)) { problems += recordContext.IdentifierNotUnique(identifier, takenByRecordNumber); } else { identifiers.Add(identifier, records.CurrentRecordNumber); } } } else { problems += recordContext.RequiredFieldIsNull(record.EU_OIDN.Field); } if (record.EUNUMMER.Value == null) { problems += recordContext.RequiredFieldIsNull(record.EUNUMMER.Field); } else if (!EuropeanRoadNumber.CanParse(record.EUNUMMER.Value)) { problems += recordContext.NotEuropeanRoadNumber(record.EUNUMMER.Value); } if (!record.WS_OIDN.HasValue) { problems += recordContext.RequiredFieldIsNull(record.WS_OIDN.Field); } else if (!RoadSegmentId.Accepts(record.WS_OIDN.Value)) { problems += recordContext.RoadSegmentIdOutOfRange(record.WS_OIDN.Value); } } moved = records.MoveNext(); } } else { problems += entry.HasNoDbaseRecords(true); } } catch (Exception exception) { problems += entry.AtDbaseRecord(records.CurrentRecordNumber).HasDbaseRecordFormatError(exception); } return(problems); }