public void CsvReader_AddWorksAfterRead() { using (MemoryStream ms = new MemoryStream()) { ContactStore store = new ContactStore(); store.Add(Contact.Create("first", "ln", "street", "city", "st", "zip")); store.Add(Contact.Create("second", "ln", "street", "city", "st", "zip")); store.Add(Contact.Create("third", "ln", "street", "city", "st", "zip")); CsvContactWriter writer = new CsvContactWriter(); writer.Write(ms, store.Contacts); ms.Seek(0, SeekOrigin.Begin); CsvContactReader reader = new CsvContactReader(); List <Contact> contacts = new List <Contact>(reader.Read(ms)); Assert.AreEqual(3, contacts.Count, "There should be 3 contacts"); Assert.AreEqual("first", contacts[0].FirstName); Assert.AreEqual("second", contacts[1].FirstName); Assert.AreEqual("third", contacts[2].FirstName); store.Add(Contact.Create("fourth", "ln", "street", "city", "st", "zip")); Assert.AreEqual(4, store.Contacts.Count(), "There should be four contacts"); ContactFieldFilter filter = new ContactFieldFilter(); filter.SetFirstName("fourth"); var found = store.Search(filter); Assert.AreEqual(1, found.Count(), "There should have been one item found"); Assert.AreEqual("fourth", found.First().FirstName, "The contact name was wrong"); } }
public void RemoveWithFilter() { ContactStore store = new ContactStore(); Contact c1_with_id = store.Add(Contact.Create("fn1", "ln1", "street1", "city1", "st1", "zip1")); Contact c2_with_id = store.Add(Contact.Create("fn2", "ln2", "street2", "city2", "st2", "zip2")); Contact c3_with_id = store.Add(Contact.Create("fn3", "ln3", "street3", "city3", "st3", "zip3")); Contact c4_with_id = store.Add(Contact.Create("fn4", "ln4", "street4", "city4", "st4", "zip4")); Contact c5_with_id = store.Add(Contact.Create("fn5", "ln5", "street5", "city5", "st5", "zip5")); Contact c6_with_id = store.Add(Contact.Create("fn6", "ln6", "street6", "city6", "st6", "zip6")); Contact c7_with_id = store.Add(Contact.Create("fn7", "ln7", "street7", "city7", "st7", "zip7")); Assert.AreEqual(7, store.Contacts.Count()); Contact removed; ContactFieldFilter filterFN = new ContactFieldFilter(); filterFN.SetFirstName("fn1"); Assert.IsTrue(store.Remove(filterFN, out removed)); Assert.AreEqual(1, removed.ID.Value); ContactFieldFilter filterLN = new ContactFieldFilter(); filterLN.SetLastName("ln2"); Assert.IsTrue(store.Remove(filterLN, out removed)); Assert.AreEqual(2, removed.ID.Value); ContactFieldFilter filterStreet = new ContactFieldFilter(); filterStreet.SetStreetAddress("street3"); Assert.IsTrue(store.Remove(filterStreet, out removed)); Assert.AreEqual(3, removed.ID.Value); ContactFieldFilter filterCity = new ContactFieldFilter(); filterCity.SetCity("city4"); Assert.IsTrue(store.Remove(filterCity, out removed)); Assert.AreEqual(4, removed.ID.Value); ContactFieldFilter filterState = new ContactFieldFilter(); filterState.SetState("st5"); Assert.IsTrue(store.Remove(filterState, out removed)); Assert.AreEqual(5, removed.ID.Value); ContactFieldFilter filterZip = new ContactFieldFilter(); filterZip.SetPostalCode("zip6"); Assert.IsTrue(store.Remove(filterZip, out removed)); Assert.AreEqual(6, removed.ID.Value); ContactFieldFilter filterId = new ContactFieldFilter(); filterId.SetID(7); Assert.IsTrue(store.Remove(filterId, out removed)); Assert.AreEqual(7, removed.ID.Value); Assert.AreEqual(0, store.Contacts.Count()); }
public static ContactFieldFilter FilterFromArgs(IReadOnlyDictionary <string, string> args) { ContactFieldFilter filter = new ContactFieldFilter(); foreach (KeyValuePair <string, string> pair in args) { switch (pair.Key.ToLower()) { case "id": int id; if (int.TryParse(pair.Value, out id)) { filter.SetID(id); } else { Log.Error("Unable to parse ID - must be an integer"); } break; case "f": case "fn": case "first": case "firstname": filter.SetFirstName(pair.Value); break; case "l": case "ln": case "last": case "lastname": filter.SetLastName(pair.Value); break; case "str": case "street": filter.SetStreetAddress(pair.Value); break; case "c": case "cty": case "city": filter.SetCity(pair.Value); break; case "stt": case "state": filter.SetState(pair.Value); break; case "pc": case "postal": case "postalcode": case "zip": filter.SetPostalCode(pair.Value); break; default: break; } } return(filter); }
public void RemoveWithFilterNoMatch() { ContactStore store = new ContactStore(); Contact c1_with_id = store.Add(Contact.Create("fn1", "ln1", "street1", "city1", "st1", "zip1")); Contact c2_with_id = store.Add(Contact.Create("fn2", "ln2", "street2", "city2", "st2", "zip2")); ContactFieldFilter filter = new ContactFieldFilter(); filter.SetID(5); Contact removed; Assert.IsFalse(store.Remove(filter, out removed)); }
public void Search_Missing() { ContactStore store = new ContactStore(); store.Add(Contact.Create("x", "x", "x", "x", "x", "x")); store.Add(Contact.Create("x", "x", "x", "x", "x", "x")); store.Add(Contact.Create("x", "x", "x", "x", "x", "x")); store.Add(Contact.Create("x", "x", "x", "x", "x", "x")); store.Add(Contact.Create("x", "x", "x", "x", "x", "x")); store.Add(Contact.Create("x", "x", "x", "x", "x", "x")); ContactFieldFilter filter = new ContactFieldFilter(); filter.SetID(7); Assert.AreEqual(0, store.Search(filter).Count()); }
public void Search_City() { ContactStore store = new ContactStore(); store.Add(Contact.Create("x", "x", "x", "a", "x", "x")); store.Add(Contact.Create("x", "x", "x", "b", "x", "x")); store.Add(Contact.Create("x", "x", "x", "c", "x", "x")); store.Add(Contact.Create("x", "x", "x", "a", "x", "x")); store.Add(Contact.Create("x", "x", "x", "b", "x", "x")); store.Add(Contact.Create("x", "x", "x", "c", "x", "x")); ContactFieldFilter filter = new ContactFieldFilter(); filter.SetCity("b"); CollectionAssert.AreEqual( new List <int> { 2, 5 }, store.Search(filter).Select(c => c.ID).ToList()); }
public void Search_MultipleFields() { ContactStore store = new ContactStore(); store.Add(Contact.Create("x", "g", "x", "x", "x", "a")); store.Add(Contact.Create("x", "g", "x", "x", "x", "b")); store.Add(Contact.Create("x", "g", "x", "x", "x", "c")); store.Add(Contact.Create("x", "h", "x", "x", "x", "a")); store.Add(Contact.Create("x", "h", "x", "x", "x", "b")); store.Add(Contact.Create("x", "h", "x", "x", "x", "c")); ContactFieldFilter filter = new ContactFieldFilter(); filter.SetLastName("h"); filter.SetPostalCode("b"); CollectionAssert.AreEqual( new List <int> { 5 }, store.Search(filter).Select(c => c.ID).ToList()); }
public IEnumerable <Contact> Search(ContactFieldFilter filter) { Log.Verbose("Searching for contacts with filter: {0}", filter); // If the file has a state component // get the items from the cache instead of checking everything if (filter.State.HasValue) { if (stateCache.ContainsKey(filter.State.Value)) { return(filter.Apply(stateCache[filter.State.Value])); } else { return(new SortedList <Contact>()); } } else { return(filter.Apply(this.Contacts)); } }
public override CommandResult Execute() { ContactFieldFilter filter = CommandArgParser.FilterFromArgs(Args); if (filter.HasFilter) { Contact removed; if (Store.Remove(filter, out removed)) { return(new RemoveCommandResult(Store, this, new List <Contact>(1) { removed })); } } else { Log.Warning("Remove requires at least one filter - skipping"); } return(new NonUndoCommandResult(this, Store.Search(CommandArgParser.FilterFromArgs(Args)))); }
public bool Remove(ContactFieldFilter filter, out Contact removed) { Contact toRemove = Search(filter).FirstOrDefault(); return(Remove(toRemove, out removed)); }