Example #1
0
        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));
        }