public void CreateX12Segment_NoElements_CorrectSegmentCreated() { //arrange var items = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; var rec = new KeyValRecord(items, 12, 3, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var x12Seg = rec.CreateEmptyX12Segment("LX", 0); //not really practical to have a segment with no elements //assert x12Seg.Should().NotBeSameAs(rec); x12Seg.Count.Should().Be(1); // 1 + 4 x12Seg.RecNo.Should().Be(12); x12Seg.SourceNo.Should().Be(3); x12Seg.Keys.Count.Should().Be(1); x12Seg.Items.Count.Should().Be(1); x12Seg[0].Should().Be("LX"); x12Seg["Segment"].Should().Be("LX"); x12Seg.Keys[0].Should().Be("Segment"); x12Seg[1].Should().BeNull(); x12Seg["Elem001"].Should().BeNull(); //x12Seg.Keys[5].Should().BeNull(); - this throws ArgumentOutOfRangeException }
public void ConstructRecordWithDupKey_WithinThresholdIgnoreDups_WarningLogged() { //This is really an integration test //arrange var items = new IItem[] { KeyValItem.CreateItem("Fld1", "71941", _typeDefs), KeyValItem.CreateItem("Fld2", "blahblah", _typeDefs), KeyValItem.CreateItem("Fld1", 243, _typeDefs) }; //this field has the same key as the first field int recNo = 25; //act var logger = (MockLogger)_config.Logger; var rec = new KeyValRecord(items, recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //assert // Item1=severity, Item2=message (evaluated by logger), Item3=entire log entry (passed through by logger) logger.Results.Count.Should().Be(3); //incl. Log Title Box and "Configuration initialized." entry var result = logger.Results[2]; result.Item1.Should().Be(LogEntrySeverity.Warning); result.Item2.Contains("Duplicate key in field #3 of record #25:").Should().BeTrue(); //text from KeyValRecord class result.Item2.Contains("Item containing value of '243' has been ignored.").Should().BeTrue(); var entry = result.Item3; result.Item2.Should().Be(entry.MessageOnDemand()); //this confirms that timestamp in a message is from a time of LogInfo method entry.Severity.Should().Be(LogEntrySeverity.Warning); entry.MessageOnDemand.Should().BeOfType(typeof(Func <string>)); entry.Exception.Should().BeNull(); var msg = result.Item3.MessageOnDemand(); //evaluate message on demand one more time msg.Contains("Duplicate key in field #3 of record #25:").Should().BeTrue(); msg.Contains("Item containing value of '243' has been ignored.").Should().BeTrue(); msg.Should().Be(entry.MessageOnDemand()); //this confirms again that timestamp in a message is from a time of LogInfo method }
public void GetItemClone_NewTypedValue_CorrectData() { //arrange var item = KeyValItem.CreateItem("I_fld", 156, _typeDefs); var items = new IItem[] { item }; int recNo = 14; var rec = new KeyValRecord(items, recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var clone = rec.GetItemClone(item, 3); //assert clone.Should().NotBeSameAs(item); clone.Should().BeOfType(typeof(KeyValItem <int>)); clone.ItemDef.Type.Should().Be(ItemType.Int); clone.Key.Should().Be("I_fld"); clone.Value.Should().Be(3); //act2 clone = rec.GetItemClone(item, "4"); //assert2 clone.Should().NotBeSameAs(item); clone.Should().BeOfType(typeof(KeyValItem <int>)); clone.ItemDef.Type.Should().Be(ItemType.Int); clone.Key.Should().Be("I_fld"); clone.Value.Should().Be(4); }
public void GetEmptyClone_SimpleValues_SameRecNoButEmptyData() { //arrange var items = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; var rec = new KeyValRecord(items, 12, 11, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var clone = rec.GetEmptyClone(); var cloneR = (IRecord)clone; //this is no different, both clone and cloneR are of type IRecord var cloneU = (IUntypedRecord)clone; dynamic cloneD = clone; //n/a as there are no dynamic properties in this case //assert clone.Should().NotBeSameAs(rec); clone.Count.Should().Be(0); clone.RecNo.Should().Be(12); clone.SourceNo.Should().Be(11); clone.Keys.Count.Should().Be(0); clone.Items.Count.Should().Be(0); clone[0].Should().BeNull(); clone["any"].Should().BeNull(); cloneR[0].Should().BeNull(); cloneR["any"].Should().BeNull(); cloneU[0].Should().BeNull(); cloneU["any"].Should().BeNull(); }
public void GetEmptyClone_DisallowAlterFields_EmptyData() { //arrange var items1 = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; var items2 = new IItem[] { KeyValItem.CreateItem("I_#", 15, _typeDefs), KeyValItem.CreateItem("Fld1", "data1", _typeDefs) }; var recs = new KeyValRecord[] { new KeyValRecord(items1, 16, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem), new KeyValRecord(items2, 17, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem) }; _config.AllowTransformToAlterFields = false; //it was set to true in test Initialize method var cluster = new KeyValCluster(recs, 9, 16, 1, null, null, _typeDefs, _config, null); //clstr# 9 starting at rec# 16; AllowTransformToAlterFields is false //act var clone = cluster.GetEmptyClone(); //assert clone.Count.Should().Be(0); clone.ClstrNo.Should().Be(9); clone.StartRecNo.Should().Be(16); clone.Records.Count.Should().Be(0); clone.GetRecord(0).Should().BeNull(); }
public void KvRecCtor_NoItems_CorrectData() { //arrange var items = new List <IItem>(); int recNo = 22; int srcNo = 4; //act var rec = new KeyValRecord(items, recNo, srcNo, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); var recR = (IRecord)rec; IUntypedRecord recU = rec; dynamic recD = rec; //n/a as there are no dynamic properties in this case //assert rec.Count.Should().Be(0); rec.RecNo.Should().Be(recNo); rec.SourceNo.Should().Be(srcNo); rec.Keys.Count.Should().Be(0); rec.Items.Count.Should().Be(0); rec[0].Should().BeNull(); rec["any"].Should().BeNull(); recR[0].Should().BeNull(); recR["any"].Should().BeNull(); recU[0].Should().BeNull(); recU["any"].Should().BeNull(); }
public void AddItem_SampleValue_ReturnAddedItem() { //arrange IUntypedRecord rec = new KeyValRecord(_items, _recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var result = rec.AddItem("I_someNum", "360"); //assert result.Should().BeOfType(typeof(KeyValItem <int>)); result.Key.Should().Be("I_someNum"); result.Value.Should().Be(360); result.ItemDef.Type.Should().Be(ItemType.Int); rec.Count.Should().Be(5); rec.RecNo.Should().Be(26); rec[0].Should().BeOfType(typeof(string)); rec[0].Should().Be("71941"); rec[3].Should().BeOfType(typeof(string)); rec[3].Should().Be("184"); rec[4].Should().BeOfType(typeof(string)); rec[4].Should().Be("360"); rec.Keys[4].Should().Be("I_someNum"); }
public void Initialize() { _config = new OrchestratorConfig(); _config.AllowTransformToAlterFields = true; _config.PropertyBinEntities = PropertyBinAttachedTo.Clusters; // simple type definitions, everything string, except for fields starting with I_ (int) Func <string, ItemType> fldTypeFunc = key => key.StartsWith("I_") ? ItemType.Int : ItemType.String; var initFldTypes = new ConcurrentDictionary <string, ItemType>(); Func <string, string> fldFormatFunc = key => string.Empty; var initFldFormats = new ConcurrentDictionary <string, string>(); _typeDefs = new TypeDefinitions(fldTypeFunc, initFldTypes, fldFormatFunc, initFldFormats); var items1 = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; var items2 = new IItem[] { KeyValItem.CreateItem("I_#", 15, _typeDefs), KeyValItem.CreateItem("Fld1", "data1", _typeDefs) }; var recs = new KeyValRecord[] { new KeyValRecord(items1, 16, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem), new KeyValRecord(items2, 17, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem) }; _cluster = new KeyValCluster(recs, 9, 16, 1, null, new Dictionary <string, object>(), _typeDefs, _config, null); //clstr# 9 starting at rec# 16; AllowTransformToAlterFields is true }
/// <summary> /// Extract tokens defined in ArbitraryOutputDefs from output record /// </summary> /// <param name="outputRecord"></param> /// <returns></returns> internal override IEnumerable <IItem> ItemsToOutput(KeyValRecord outputRecord) { foreach (var key in _outputKeys) { yield return(key == null ? _voidItem : (IItem)outputRecord.GetItem(key)); } }
public void GetEmptyClone_DisallowAlterFields_SameRecNoButEmptyData() { //arrange var items = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; _config.AllowTransformToAlterFields = false; //it was set to true in test Initialize method var rec = new KeyValRecord(items, 16, 7, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var clone = rec.GetEmptyClone(); //note that this clone is unmaintainable (i.e. it will stay empty forever) var cloneR = (IRecord)clone; var cloneU = (IUntypedRecord)clone; //assert clone.Should().NotBeSameAs(rec); clone.Count.Should().Be(0); clone.RecNo.Should().Be(16); clone.SourceNo.Should().Be(7); clone.Keys.Count.Should().Be(0); clone.Items.Count.Should().Be(0); clone[0].Should().BeNull(); clone["any"].Should().BeNull(); cloneR[0].Should().BeNull(); cloneR["any"].Should().BeNull(); cloneU[0].Should().BeNull(); cloneU["any"].Should().BeNull(); }
public void AssignValue_TypedValueSetToStringItem_ConvertedToString() { //arrange var items = new IItem[] { KeyValItem.CreateItem("blah", "origData", _typeDefs), KeyValItem.CreateItem("I_int", 33, _typeDefs) }; var rec = new KeyValRecord(items, 16, 2, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); var recR = (IRecord)rec; IUntypedRecord recU = rec; dynamic recD = rec; //act rec["blah"] = true; //assert rec.Count.Should().Be(2); rec.RecNo.Should().Be(16); rec.SourceNo.Should().Be(2); rec.Keys[0].Should().Be("blah"); rec[0].Should().Be("True"); //act2 recR["blah"] = new DateTime(2050, 12, 1); //assert2 rec.Count.Should().Be(2); rec.RecNo.Should().Be(16); rec.SourceNo.Should().Be(2); rec.Keys[0].Should().Be("blah"); rec[0].Should().Be("12/1/2050 12:00:00 AM"); }
/// <summary> /// Provide a list of items to include in output based on FieldsToUse (insignificant, trailing items may be removed based on ExcludeExtranousFields setting) /// </summary> /// <param name="outputRecord"></param> /// <returns></returns> internal override IEnumerable <IItem> ItemsToOutput(KeyValRecord outputRecord) { if (_config.ExcludeExtraneousFields) { //remove trailing, empty fields return(base.ItemsFromFieldsToUse(outputRecord).Reverse().SkipWhile(itm => string.IsNullOrEmpty(itm.StringValue)).Reverse()); } return(base.ItemsFromFieldsToUse(outputRecord)); }
/// <summary> /// If no OutputFields specified, simply include all items in the record. /// If OutputFields are present, they drive items on output, possibly resulting in void items (if not present in the record). /// </summary> /// <param name="outputRecord"></param> /// <returns></returns> internal override IEnumerable <IItem> ItemsToOutput(KeyValRecord outputRecord) { if (_config.OutputFields == null) { return(outputRecord.Items); } //here, output is driven by OutputFields, i.e. FieldsToUse return(base.ItemsFromFieldsToUse(outputRecord)); }
public void RoClstrCtor_SimpleValuesThrowOnMisuse_UnsupportedThrows() { //arrange var items1 = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; var items2 = new IItem[] { KeyValItem.CreateItem("I_#", 15, _typeDefs), KeyValItem.CreateItem("Fld1", "data1", _typeDefs) }; var recs = new KeyValRecord[] { new KeyValRecord(items1, 16, 7, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem), new KeyValRecord(items2, 17, 8, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem) }; //act var clstr = new KeyValCluster(recs, 9, 16, 78, null, null, _typeDefs, _config, null); //clstr# 9 starting at rec# 16; AllowTransformToAlterFields is true // note that startSourceNo 78 does not match the 1st record (7) - not a real scenario, but a good text var roClstr = new ReadOnlyCluster(clstr, true); //this ctor causes objReadOnlyCluster to throw NotSupportedexception on misuse //assert roClstr.Count.Should().Be(2); roClstr.ClstrNo.Should().Be(9); roClstr.StartRecNo.Should().Be(16); roClstr.StartSourceNo.Should().Be(78); roClstr.Records.Count.Should().Be(2); Action a = () => { roClstr[0] = null; }; a.Should().Throw <NotSupportedException>().WithMessage("Unsupported operation invoked on ReadOnlyCluster object."); roClstr[0].Should().NotBeNull(); a = () => { roClstr.RemoveRecord(0); }; a.Should().Throw <NotSupportedException>().WithMessage("Unsupported operation invoked on ReadOnlyCluster object."); roClstr.Count.Should().Be(2); roClstr.Records.Count.Should().Be(2); a = () => { roClstr.AddRecord(null); }; a.Should().Throw <NotSupportedException>().WithMessage("Unsupported operation invoked on ReadOnlyCluster object."); roClstr.Count.Should().Be(2); roClstr.Records.Count.Should().Be(2); a = () => { roClstr.GetClone(); }; a.Should().Throw <NotSupportedException>().WithMessage("Unsupported operation invoked on ReadOnlyCluster object."); a = () => { roClstr.GetEmptyClone(); }; a.Should().Throw <NotSupportedException>().WithMessage("Unsupported operation invoked on ReadOnlyCluster object."); var roRec = roClstr[0]; roRec.Should().BeOfType <ReadOnlyRecord>(); a = () => { roRec.RemoveItem("IDCD_ID"); }; a.Should().Throw <NotSupportedException>().WithMessage("Unsupported operation invoked on ReadOnlyRecord object."); roRec.Count.Should().Be(3); roRec = roClstr[1]; roRec.Should().BeOfType <ReadOnlyRecord>(); a = () => { roRec.AddItem("a", "b"); }; a.Should().Throw <NotSupportedException>().WithMessage("Unsupported operation invoked on ReadOnlyRecord object."); roRec.Count.Should().Be(2); }
public void RoClstrCtor_SimpleValuesIgnoreMisuse_CorrectData() { //arrange var items1 = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; var items2 = new IItem[] { KeyValItem.CreateItem("I_#", 15, _typeDefs), KeyValItem.CreateItem("Fld1", "data1", _typeDefs) }; var recs = new KeyValRecord[] { new KeyValRecord(items1, 16, 7, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem), new KeyValRecord(items2, 17, 8, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem) }; //act var clstr = new KeyValCluster(recs, 9, 16, 78, null, null, _typeDefs, _config, null); //clstr# 9 starting at rec# 16; AllowTransformToAlterFields is true // note that startSourceNo 78 does not match the 1st record (7) - not a real scenario, but a good text var roClstr = new ReadOnlyCluster(clstr); // this ctor causes objReadOnlyCluster to ignore misuse //assert roClstr.Count.Should().Be(2); roClstr.ClstrNo.Should().Be(9); roClstr.StartRecNo.Should().Be(16); roClstr.StartSourceNo.Should().Be(78); roClstr.Records.Count.Should().Be(2); var roRec = roClstr[0]; roRec.Should().BeOfType <ReadOnlyRecord>(); roRec.Count.Should().Be(3); roRec.RecNo.Should().Be(16); roRec.SourceNo.Should().Be(7); roRec.Items[0].Key.Should().Be("IDCD_ID"); roRec.Keys[0].Should().Be("IDCD_ID"); roRec[0].Should().Be("71941"); roRec[1].Should().Be("blahblah"); roRec["blah"].Should().Be("blahblah"); roRec[2].Should().Be(243); roRec["I_num"].Should().Be(243); roClstr.GetRecord(0).Should().Be(roRec); roRec = roClstr[1]; roRec.Should().BeOfType <ReadOnlyRecord>(); roRec.Count.Should().Be(2); roRec.RecNo.Should().Be(17); roRec.SourceNo.Should().Be(8); roRec.Keys[0].Should().Be("I_#"); roRec[0].Should().Be(15); roRec["I_#"].Should().Be(15); roRec.Keys[1].Should().Be("Fld1"); roRec["Fld1"].Should().Be("data1"); roClstr.GetRecord(1).Should().Be(roRec); }
/// <summary> /// Helper method to provide a complete ("fixed") list of items based on FieldsToUse, including missing/insignificant items /// (if outputRecord contains no corresponding field/item, use VoidKeyValItem) /// </summary> /// <param name="outputRecord"></param> /// <returns></returns> protected IEnumerable <IItem> ItemsFromFieldsToUse(KeyValRecord outputRecord) { foreach (var field in FieldsToUse) { if (outputRecord.Keys.Contains(field)) { yield return(outputRecord.GetItem(field)); } else { yield return(new VoidKeyValItem(field)); } } }
public void GetEmptyClone_Bins_SameInstances() { //arrange IUntypedRecord rec = new KeyValRecord(_items, _recNo, 1, 0, null, new Dictionary <string, object>(), new Dictionary <string, object>(), _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var clone = rec.GetEmptyClone(); //assert clone.TraceBin.Should().NotBeNull(); clone.TraceBin.Should().BeSameAs(rec.TraceBin); clone.PropertyBin.Should().NotBeNull(); clone.PropertyBin.Should().BeSameAs(rec.PropertyBin); }
public void Clone_SimpleValues_SameData() { //arrange var items1 = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; var items2 = new IItem[] { KeyValItem.CreateItem("I_#", 15, _typeDefs), KeyValItem.CreateItem("Fld1", "data1", _typeDefs) }; var recs = new KeyValRecord[] { new KeyValRecord(items1, 16, 7, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem), new KeyValRecord(items2, 17, 8, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem) }; //act var clstr = new KeyValCluster(recs, 9, 16, 78, null, null, _typeDefs, _config, null); //clstr# 9 starting at rec# 16; AllowTransformToAlterFields is true // note that startSourceNo 78 does not match the 1st record (7) - not a real scenario, but a good text var clone = clstr.GetClone(); //assert clone.Should().NotBeSameAs(clstr); clone.Count.Should().Be(2); clone.ClstrNo.Should().Be(9); clone.StartRecNo.Should().Be(16); clone.StartSourceNo.Should().Be(78); var rec = clone[0]; rec.Count.Should().Be(3); rec.RecNo.Should().Be(16); rec.SourceNo.Should().Be(7); rec.Keys[0].Should().Be("IDCD_ID"); rec.Items[0].Key.Should().Be("IDCD_ID"); rec.GetItem(0).Key.Should().Be("IDCD_ID"); rec.GetItem("IDCD_ID").Key.Should().Be("IDCD_ID"); rec[1].Should().Be("blahblah"); rec["blah"].Should().Be("blahblah"); rec[2].Should().Be(243); rec["I_num"].Should().Be(243); rec = clone[1]; rec.Count.Should().Be(2); rec.RecNo.Should().Be(17); rec.SourceNo.Should().Be(8); rec.Keys[0].Should().Be("I_#"); rec[0].Should().Be(15); rec.GetItem("I_#").Key.Should().Be("I_#"); rec.Keys[1].Should().Be("Fld1"); rec["Fld1"].Should().Be("data1"); }
/// <summary> /// If no OutputFields specified, simply include all items in the record. /// If OutputFields are present, they drive items on output, possibly resulting in void items (if not present in the record); however, if ExcludeExtraneousFields then such void items are excluded. /// </summary> /// <param name="outputRecord"></param> /// <returns></returns> internal override IEnumerable <IItem> ItemsToOutput(KeyValRecord outputRecord) { if (_config.OutputFields == null) { return(outputRecord.Items); } //here, output is driven by OutputFields, i.e. FieldsToUse var allRequestedItems = base.ItemsFromFieldsToUse(outputRecord); if (_config.ExcludeExtraneousFields) { return(allRequestedItems.Where(itm => itm.ItemDef.Type != ItemType.Void)); } return(allRequestedItems); }
public void GetClone_SimpleValues_SameData() { //arrange var items = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; var rec = new KeyValRecord(items, 15, 4, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var clone = rec.GetClone(); //assert clone.Should().NotBeSameAs(rec); clone.Count.Should().Be(3); clone.RecNo.Should().Be(15); clone.SourceNo.Should().Be(4); clone.Keys[0].Should().Be("IDCD_ID"); clone.GetItem("IDCD_ID").Key.Should().Be("IDCD_ID"); clone[1].Should().Be("blahblah"); clone["blah"].Should().Be("blahblah"); clone[2].Should().Be(243); clone["I_num"].Should().Be(243); var keys = clone.Keys.ToList(); keys.Count.Should().Be(3); keys[0].Should().Be("IDCD_ID"); keys[1].Should().Be("blah"); keys[2].Should().Be("I_num"); var itms = clone.Items.ToList(); itms.Count.Should().Be(3); itms[0].Key.Should().Be("IDCD_ID"); itms[0].Value.Should().BeOfType(typeof(string)); itms[0].Value.Should().Be("71941"); itms[0].ItemDef.Type.Should().Be(ItemType.String); itms[1].Key.Should().Be("blah"); itms[1].Value.Should().BeOfType(typeof(string)); itms[1].Value.Should().Be("blahblah"); itms[1].ItemDef.Type.Should().Be(ItemType.String); itms[2].Key.Should().Be("I_num"); itms[2].Value.Should().BeOfType(typeof(int)); itms[2].Value.Should().Be(243); itms[2].ItemDef.Type.Should().Be(ItemType.Int); }
public void ConstructRecordWithDupKey_OutsideOfThreshold_NothingLogged() { //arrange var config = new OrchestratorConfig(new MockLogger(LogEntrySeverity.Error)); //Warning (sent as a result of dup) is outside of this threshold var items = new IItem[] { KeyValItem.CreateItem("Fld1", "71941", _typeDefs), KeyValItem.CreateItem("Fld2", "blahblah", _typeDefs), KeyValItem.CreateItem("Fld1", 243, _typeDefs) }; //this field has the same key as the first field int recNo = 25; //act var logger = (MockLogger)config.Logger; var rec = new KeyValRecord(items, recNo, 1, 0, null, null, null, _typeDefs, config, null, ActionOnDuplicateKey.IgnoreItem); //assert logger.Results.Count.Should().Be(1); //Only Log Title logger.Results[0].Item1.Should().Be(LogEntrySeverity.None); }
public void GetItemClone_NewStringValue_CorrectData() { //arrange IItem item = KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs); var items = new IItem[] { item }; int recNo = 14; var rec = new KeyValRecord(items, recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var clone = rec.GetItemClone(item, "newValue"); //assert clone.Should().NotBeSameAs(item); clone.Should().BeOfType(typeof(KeyValItem <string>)); clone.ItemDef.Type.Should().Be(ItemType.String); clone.Key.Should().Be("IDCD_ID"); clone.Value.Should().Be("newValue"); }
public void RemoveItem_NonExistingKey_ReturnFalse() { //arrange IUntypedRecord rec = new KeyValRecord(_items, _recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var result = rec.RemoveItem("badKey"); //assert result.Should().BeFalse(); rec.Count.Should().Be(4); rec.RecNo.Should().Be(26); rec[0].Should().BeOfType(typeof(string)); rec[0].Should().Be("71941"); rec[3].Should().BeOfType(typeof(string)); rec[3].Should().Be("184"); }
public void GetItemClone_NoChange_SameData() { //arrange var items = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; //act var rec = new KeyValRecord(items, 16, 3, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); var clone = rec.GetItemClone(items[0], items[0].Value); //not a practical example to create exact clone of an item(!) //assert clone.Should().NotBeSameAs(items[0]); //note that this assertion may become invalid (KeyValItem is immutable) clone.Should().BeOfType(typeof(KeyValItem <string>)); clone.ItemDef.Type.Should().Be(ItemType.String); clone.Key.Should().Be("IDCD_ID"); clone.Value.Should().Be("71941"); }
public void AddItem_CannotAlterFields_ReturnNull() { //arrange _config.AllowTransformToAlterFields = false; //it was set to true in test Initialize method IRecord rec = new KeyValRecord(_items, _recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var result = rec.AddItem("I_someNum", 360); //assert result.Should().BeNull(); rec.Count.Should().Be(4); rec.RecNo.Should().Be(26); rec[0].Should().BeOfType(typeof(string)); rec[0].Should().Be("71941"); rec[3].Should().BeOfType(typeof(int)); rec[3].Should().Be(184); }
public void AddItem_ExistingKey_ReturnVoidItem() { //arrange IUntypedRecord rec = new KeyValRecord(_items, _recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var result = rec.AddItem("blah", "someOtherBlah"); //assert result.Should().BeOfType(typeof(VoidKeyValItem)); result.Value.Should().BeNull(); rec.Count.Should().Be(4); rec.RecNo.Should().Be(26); rec[0].Should().BeOfType(typeof(string)); rec[0].Should().Be("71941"); rec[3].Should().BeOfType(typeof(string)); rec[3].Should().Be("184"); }
public void CreateX12Segment_4Elements_CorrectSegmentCreated() { //arrange var items = new IItem[] { KeyValItem.CreateItem("IDCD_ID", "71941", _typeDefs), KeyValItem.CreateItem("blah", "blahblah", _typeDefs), KeyValItem.CreateItem("I_num", 243, _typeDefs) }; var rec = new KeyValRecord(items, 12, 3, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var x12Seg = rec.CreateEmptyX12Segment("NM1", 4); x12Seg[2] = null; x12Seg[4] = "blah"; //assert x12Seg.Should().NotBeSameAs(rec); x12Seg.Count.Should().Be(5); // 1 + 4 x12Seg.RecNo.Should().Be(12); x12Seg.SourceNo.Should().Be(3); x12Seg.Keys.Count.Should().Be(5); x12Seg.Items.Count.Should().Be(5); x12Seg[0].Should().Be("NM1"); x12Seg["Segment"].Should().Be("NM1"); x12Seg.Keys[0].Should().Be("Segment"); x12Seg[1].Should().Be(string.Empty); x12Seg["Elem001"].Should().Be(string.Empty); x12Seg.Keys[1].Should().Be("Elem001"); x12Seg[2].Should().BeNull(); x12Seg["Elem002"].Should().BeNull(); x12Seg.Keys[2].Should().Be("Elem002"); x12Seg[3].Should().Be(string.Empty); x12Seg["Elem003"].Should().Be(string.Empty); x12Seg.Keys[3].Should().Be("Elem003"); x12Seg[4].Should().Be("blah"); x12Seg["Elem004"].Should().Be("blah"); x12Seg.Keys[4].Should().Be("Elem004"); x12Seg[5].Should().BeNull(); x12Seg["Elem005"].Should().BeNull(); //x12Seg.Keys[5].Should().BeNull(); - this throws ArgumentOutOfRangeException }
public void RemoveItem_ExistingKey_RemoveItemAndReturnTrue() { //arrange IUntypedRecord rec = new KeyValRecord(_items, _recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); //act var result = rec.RemoveItem("D_date"); //assert result.Should().BeTrue(); rec.Count.Should().Be(3); rec.RecNo.Should().Be(26); rec[0].Should().BeOfType(typeof(string)); rec[0].Should().Be("71941"); rec[1].Should().BeOfType(typeof(string)); rec[1].Should().Be("blahblah"); rec[2].Should().BeOfType(typeof(string)); rec[2].Should().Be("184"); }
public void AddOrReplaceItem_ExistingKey_ReplaceAndReturnsTrue() { //arrange IUntypedRecord rec = new KeyValRecord(_items, _recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); var itemToReplace = KeyValItem.CreateItem("I_num", 518, _typeDefs); //act var result = rec.AddOrReplaceItem(itemToReplace); //assert result.Should().BeTrue(); rec.Count.Should().Be(4); rec.RecNo.Should().Be(26); rec[0].Should().BeOfType(typeof(string)); rec[0].Should().Be("71941"); rec[3].Should().BeOfType(typeof(string)); rec[3].Should().Be("518"); rec.Keys[3].Should().Be("I_num"); }
public void AddOrReplaceItem_NewKeyButCannotAlterFields_ReturnNull() { //arrange _config.AllowTransformToAlterFields = false; //it was set to true in test Initialize method IRecord rec = new KeyValRecord(_items, _recNo, 1, 0, null, null, null, _typeDefs, _config, null, ActionOnDuplicateKey.IgnoreItem); var itemToAdd = KeyValItem.CreateItem("I_newNum", 518, _typeDefs); //act var result = rec.AddOrReplaceItem(itemToAdd); //assert result.Should().NotHaveValue(); rec.Count.Should().Be(4); rec.RecNo.Should().Be(26); rec[0].Should().BeOfType(typeof(string)); rec[0].Should().Be("71941"); rec[3].Should().BeOfType(typeof(int)); rec[3].Should().Be(184); }