public void ExistingEventCampaign()
        {
            //
            //Test Parameters
            //
            string altCustId  = ConfigurationManager.AppSettings["AltCustId"];
            string eventName  = ConfigurationManager.AppSettings["EventName"];
            string tokenName  = ConfigurationManager.AppSettings["TokenName"];
            string tokenValue = ConfigurationManager.AppSettings["TokenValue"];
            //

            BrickStreetConnect brickst = makeClient();
            HttpStatusCode     status;
            string             statusMessage;
            string             timecode = DateTime.Now.ToLongTimeString();

            Customer customer = brickst.GetCustomerByAltId(altCustId, out status, out statusMessage);

            if (customer == null)
            {
                string randomEmail = "user" + timecode + "@example.com";
                customer = new Customer();
                customer.EmailAddress  = randomEmail;
                customer.AltCustomerId = altCustId;

                Customer cust2 = brickst.AddCustomer(customer, out status, out statusMessage);
                if (status != HttpStatusCode.OK)
                {
                    Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
                    throw new Exception("null customer received from add customer");
                }
            }

            long custId = Convert.ToInt32(customer.Id);

            if (!string.IsNullOrEmpty(tokenName) && !string.IsNullOrEmpty(tokenValue))
            {
                //fetch attribute metadata
                BrickStAPI.Connect.Attribute attrDef = brickst.GetCustomerAttribute(tokenName, out status, out statusMessage);
                if (status != HttpStatusCode.OK)
                {
                    Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
                }

                string attrType = attrDef.Type;
                bool   doupdate = false;

                CustomerAttribute attr = customer.GetChannelAddress(tokenName);

                if (string.Compare("attribute", attrType, StringComparison.OrdinalIgnoreCase) == 0)
                {
                    if (attr == null)
                    {
                        attr          = new CustomerAttribute();
                        attr.Name     = attrDef.Name;
                        attr.Type     = attrDef.Type;
                        attr.DataType = attrDef.DataType;
                        attr.Value    = tokenValue;
                        customer.Attributes.Add(attr);
                        doupdate = true;
                    }
                    else
                    {
                        // update if new
                        if (!tokenValue.Equals(attr.Value))
                        {
                            attr.Value = tokenValue;
                            doupdate   = true;
                        }
                    }
                }
                else if (string.Compare("preference", attrType, StringComparison.OrdinalIgnoreCase) == 0)
                {
                    if (attr == null)
                    {
                        attr          = new CustomerAttribute();
                        attr.Name     = attrDef.Name;
                        attr.Type     = attrDef.Type;
                        attr.DataType = attrDef.DataType;
                        // start with 1 value
                        attr.PreferenceValues    = new String[1];
                        attr.PreferenceValues[0] = tokenValue;
                        customer.ChannelAddresses.Add(attr);
                        doupdate = true;
                    }
                    else
                    {
                        // existing preference record
                        // add the token value if it is not already there
                        // the push channel code will automatically remove invalid device tokens
                        String[] vals       = attr.PreferenceValues;
                        bool     valuefound = false;
                        for (int i = 0; i < vals.Length; i++)
                        {
                            String val = vals[i];
                            if (tokenValue.Equals(val))
                            {
                                valuefound = true;
                                break;
                            }
                        }

                        if (!valuefound)
                        {
                            String[] newVals = new String[vals.Length + 1];
                            Array.Copy(vals, 0, newVals, 0, vals.Length);
                            newVals[newVals.Length - 1] = tokenValue;
                            attr.PreferenceValues       = newVals;
                            doupdate = true;
                        }
                    }
                }


                // save updated customer record if necessary
                if (doupdate)
                {
                    Customer custSave2 = brickst.UpdateCustomer(customer, out status, out statusMessage);
                    if (custSave2 == null)
                    {
                        throw new Exception("null customer received from updateCustomer");
                    }
                    customer = custSave2;
                }
            }

            //
            //create an event record
            //
            BrickStreetAPI.Connect.Event eventObj = new BrickStreetAPI.Connect.Event();
            eventObj.EventName  = eventName;
            eventObj.CustomerId = custId;
            eventObj.Subscribe  = true;
            eventObj.Parameters = new List <EventParameter>();

            DateTime now = new DateTime();

            //event parameter: Message
            EventParameter ep1 = new EventParameter();

            ep1.ParameterName  = "Message";
            ep1.ParameterValue = "Test at " + now.ToString();
            ep1.Encrypted      = false;
            eventObj.Parameters.Add(ep1);

            //event parameter:Badge
            EventParameter ep2 = new EventParameter();

            ep2.ParameterName  = "Badge";
            ep2.ParameterValue = "42";
            ep2.Encrypted      = false;
            eventObj.Parameters.Add(ep2);

            //event parameter: AlertID
            EventParameter ep3 = new EventParameter();

            ep3.ParameterName  = "AlertID";
            ep3.ParameterValue = timecode;
            ep3.Encrypted      = false;
            eventObj.Parameters.Add(ep3);

            //
            //submit event to connect
            //
            BrickStreetAPI.Connect.Event posted = brickst.AddEvent(eventObj, out status, out statusMessage);

            if (status != HttpStatusCode.OK)
            {
                Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
                throw new Exception("addEvent returned null");
            }

            long eventQueueId = Convert.ToInt32(posted.Id);
            long eventId      = Convert.ToInt32(posted.EventId);

            Console.WriteLine("Posted Event;ID=" + eventQueueId + " for CustomerID=" + custId + " and Event ID=" + eventId);
        }
Exemple #2
0
        public void CustomerApiTest()
        {
            string   altCustId = "TEST" + DateTime.Now.Ticks.ToString();
            string   email     = altCustId + "@example.com";
            Customer cust      = new Customer
            {
                AltCustomerId = altCustId,
                StatusCode    = 1,
                EmailAddress  = email,
                FirstName     = "Test",
                LastName      = "Testman"
            };

            HttpStatusCode     status;
            string             statusMessage;
            BrickStreetConnect brickStreetConnect = makeClient();

            //
            // create new customer record
            //

            Customer dbCust = brickStreetConnect.AddCustomer(cust, out status, out statusMessage);

            if (status != HttpStatusCode.OK)
            {
                Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNull(statusMessage);
            Assert.IsNotNull(dbCust);
            Assert.IsNotNull(dbCust.Id);
            Assert.AreEqual(cust.AltCustomerId, dbCust.AltCustomerId);
            Assert.AreEqual(cust.EmailAddress, dbCust.EmailAddress);
            Assert.AreEqual(cust.LastName, dbCust.LastName);
            Assert.AreEqual(cust.FirstName, dbCust.FirstName);

            //
            // now try the get methods on the new customer
            //

            Customer getCust = brickStreetConnect.GetCustomer((long)dbCust.Id, out status, out statusMessage);

            if (status != HttpStatusCode.OK)
            {
                Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNull(statusMessage);
            Assert.IsNotNull(getCust);
            Assert.IsNotNull(getCust.Id);
            Assert.AreEqual(dbCust.AltCustomerId, getCust.AltCustomerId);
            Assert.AreEqual(dbCust.EmailAddress, getCust.EmailAddress);
            Assert.AreEqual(dbCust.LastName, getCust.LastName);
            Assert.AreEqual(dbCust.FirstName, getCust.FirstName);

            getCust = brickStreetConnect.GetCustomerByAltId(altCustId, out status, out statusMessage);
            if (status != HttpStatusCode.OK)
            {
                Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNull(statusMessage);
            Assert.IsNotNull(getCust);
            Assert.IsNotNull(getCust.Id);
            Assert.AreEqual(dbCust.AltCustomerId, getCust.AltCustomerId);
            Assert.AreEqual(dbCust.EmailAddress, getCust.EmailAddress);
            Assert.AreEqual(dbCust.LastName, getCust.LastName);
            Assert.AreEqual(dbCust.FirstName, getCust.FirstName);

            getCust = brickStreetConnect.GetCustomerByEmail(email, out status, out statusMessage);
            if (status != HttpStatusCode.OK)
            {
                Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNull(statusMessage);
            Assert.IsNotNull(getCust);
            Assert.IsNotNull(getCust.Id);
            Assert.AreEqual(dbCust.AltCustomerId, getCust.AltCustomerId);
            Assert.AreEqual(dbCust.EmailAddress, getCust.EmailAddress);
            Assert.AreEqual(dbCust.LastName, getCust.LastName);
            Assert.AreEqual(dbCust.FirstName, getCust.FirstName);

            //
            // update the customer
            //
            getCust.FirstName    = "Testy";
            getCust.LastName     = "Testyman";
            getCust.AddressLine1 = "123 Oak St";
            getCust.City         = "Oakland";
            getCust.State        = "CA";
            dbCust = brickStreetConnect.UpdateCustomer(getCust, out status, out statusMessage);
            if (status != HttpStatusCode.OK)
            {
                Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNull(statusMessage);
            Assert.IsNotNull(dbCust);
            Assert.IsNotNull(dbCust.Id);
            Assert.AreEqual((long)getCust.Id, (long)dbCust.Id);
            Assert.AreEqual(getCust.AltCustomerId, dbCust.AltCustomerId);
            Assert.AreEqual(getCust.EmailAddress, dbCust.EmailAddress);
            Assert.AreEqual(getCust.LastName, dbCust.LastName);
            Assert.AreEqual(getCust.FirstName, dbCust.FirstName);
            Assert.AreEqual(getCust.AddressLine1, dbCust.AddressLine1);
            Assert.AreEqual(getCust.City, dbCust.City);
            Assert.AreEqual(getCust.State, dbCust.State);

            //
            // dbCust is valid; recheck GET methods
            //

            getCust = brickStreetConnect.GetCustomer((long)dbCust.Id, out status, out statusMessage);
            if (status != HttpStatusCode.OK)
            {
                Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNull(statusMessage);
            Assert.IsNotNull(getCust);
            Assert.IsNotNull(getCust.Id);
            Assert.AreEqual(dbCust.AltCustomerId, getCust.AltCustomerId);
            Assert.AreEqual(dbCust.EmailAddress, getCust.EmailAddress);
            Assert.AreEqual(dbCust.LastName, getCust.LastName);
            Assert.AreEqual(dbCust.FirstName, getCust.FirstName);

            getCust = brickStreetConnect.GetCustomerByAltId(altCustId, out status, out statusMessage);
            if (status != HttpStatusCode.OK)
            {
                Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNull(statusMessage);
            Assert.IsNotNull(getCust);
            Assert.IsNotNull(getCust.Id);
            Assert.AreEqual(dbCust.AltCustomerId, getCust.AltCustomerId);
            Assert.AreEqual(dbCust.EmailAddress, getCust.EmailAddress);
            Assert.AreEqual(dbCust.LastName, getCust.LastName);
            Assert.AreEqual(dbCust.FirstName, getCust.FirstName);

            getCust = brickStreetConnect.GetCustomerByEmail(email, out status, out statusMessage);
            if (status != HttpStatusCode.OK)
            {
                Console.WriteLine("ERROR: STATUS:" + status.ToString() + " " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNull(statusMessage);
            Assert.IsNotNull(getCust);
            Assert.IsNotNull(getCust.Id);
            Assert.AreEqual(dbCust.AltCustomerId, getCust.AltCustomerId);
            Assert.AreEqual(dbCust.EmailAddress, getCust.EmailAddress);
            Assert.AreEqual(dbCust.LastName, getCust.LastName);
            Assert.AreEqual(dbCust.FirstName, getCust.FirstName);
        }