示例#1
0
        static void Main(string[] args)
        {
            var CampaignContent = new CampaignContent();

            CampaignContent.CustomerMailList = new List <string>()
            {
                "*****@*****.**", "*****@*****.**"
            };
            CampaignContent.ProductList = new Dictionary <int, string>()
            {
                { 20, "Product A" }, { 30, "Product B" }
            };
            var campaignMailSender = new CampaignMailSender(CampaignContent);

            campaignMailSender.SendMail();

            var OrderContent = new OrderContent();

            OrderContent.CustomerMail = "*****@*****.**";
            OrderContent.ProductList  = new Dictionary <int, string>()
            {
                { 20, "Product A" }, { 30, "Product B" }
            };
            var orderMailSender = new OrderMailSender(OrderContent);

            orderMailSender.SendMail();
        }
示例#2
0
        public ActionResult DeleteConfirmed(int?campaignId, int?contentId)
        {
            CampaignContent campaignContent =
                db.CampaignContents.FirstOrDefault(c => c.CampaignID == campaignId && c.ContentID == contentId);

            db.CampaignContents.Remove(campaignContent);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
示例#3
0
        public void GetCampaignContent_Successful()
        {
            //  Arrange
            MailChimpManager mc         = new MailChimpManager(TestGlobal.Test_APIKey);
            string           campaignId = "yourcampaignidhere";

            //  Act
            CampaignContent details = mc.GetCampaignContent(campaignId);

            //  Assert
            Assert.IsFalse(string.IsNullOrWhiteSpace(details.Html));
        }
示例#4
0
 public ActionResult Edit([Bind(Include = "CampaignID,ContentID,CreateDate,ActivationDate,ExpirationDate,UserContentInd")] CampaignContent campaignContent)
 {
     if (ModelState.IsValid)
     {
         db.Entry(campaignContent).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.CampaignID = new SelectList(db.Campaigns, "CampaignID", "CampaignDesc", campaignContent.CampaignID);
     ViewBag.ContentID  = new SelectList(db.ContentTranslations, "ContentID", "ContentTitle", campaignContent.ContentID);
     return(View(campaignContent));
 }
        public CampaignContent AddCampaignContent(CampaignContent cont, out HttpStatusCode status, out string statusMessage)
        {
            long campaignID = cont.CampaignID;

            if (campaignID <= 0)
            {
                throw new Exception("Invalid Campaign ID in Content Object");
            }

            RestClient restClient = createClient();

            RestRequest restRequest = new RestRequest
            {
                Resource      = "data/campaign/campaign_id/{campaign_id}/content",
                RequestFormat = DataFormat.Json,
                Method        = Method.POST
            };

            restRequest.AddUrlSegment("campaign_id", campaignID.ToString());

            // we handle our own serialization instead of calling AddBody
            JsonSerializerSettings serSettings = new JsonSerializerSettings();

            serSettings.DefaultValueHandling = DefaultValueHandling.Ignore;
            serSettings.NullValueHandling    = NullValueHandling.Ignore;

            string serialized = JsonConvert.SerializeObject(cont, serSettings);

            restRequest.AddParameter("application/json", serialized, ParameterType.RequestBody);

            //
            // NOTE: The JSON deserializer built into the RestSharp
            // package does not work well, so we use Newtonsoft instead.
            //
            IRestResponse restResponse = restClient.Execute(restRequest);

            status = restResponse.StatusCode;
            if (status != HttpStatusCode.OK)
            {
                statusMessage = restResponse.Content;
                return(null);
            }
            else
            {
                statusMessage = null;
            }

            string          content = restResponse.Content;
            CampaignContent cont2   = JsonConvert.DeserializeObject <CampaignContent>(content);

            return(cont2);
        }
示例#6
0
        public void GetCampaignContent_Successful()
        {
            //  Arrange
            MailChimpManager mc         = new MailChimpManager(TestGlobal.Test_APIKey);
            string           campaignId = "yourcampaignidhere";

            //  Act
            CampaignContent details = mc.GetCampaignContent(campaignId);

            //  Assert
            // Changed from IsNullOrWhiteSpace to IsNullOrEmpty for .NET 3.5 compatibility. Consider using extension method
            // for IsNullOrWhiteSpace support
            Assert.IsFalse(string.IsNullOrEmpty(details.Html));
        }
示例#7
0
        public ActionResult Create([Bind(Include = "CampaignID,ContentID,CreateDate,ActivationDate,ExpirationDate,UserContentInd")] CampaignContent campaignContent)
        {
            campaignContent.CreateDate = DateTime.Now;

            if (ModelState.IsValid)
            {
                db.CampaignContents.Add(campaignContent);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.CampaignID = new SelectList(db.Campaigns, "CampaignID", "CampaignDesc", campaignContent.CampaignID);
            ViewBag.ContentID  = new SelectList(db.ContentTranslations, "ContentID", "ContentTitle", campaignContent.ContentID);
            return(View(campaignContent));
        }
示例#8
0
        // GET: CampaignContents/Details/5
        public ActionResult Details(int?campaignId, int?contentId)
        {
            if (campaignId == null || contentId == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CampaignContent campaignContent =
                db.CampaignContents.FirstOrDefault(c => c.CampaignID == campaignId && c.ContentID == contentId);

            if (campaignContent == null)
            {
                return(HttpNotFound());
            }
            return(View(campaignContent));
        }
示例#9
0
        // GET: CampaignContents/Edit/5
        public ActionResult Edit(int?campaignId, int?contentId)
        {
            if (campaignId == null || contentId == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CampaignContent campaignContent =
                db.CampaignContents.FirstOrDefault(c => c.CampaignID == campaignId && c.ContentID == contentId);

            if (campaignContent == null)
            {
                return(HttpNotFound());
            }
            ViewBag.CampaignID = new SelectList(db.Campaigns, "CampaignID", "CampaignDesc", campaignContent.CampaignID);
            ViewBag.ContentID  = new SelectList(db.ContentTranslations, "ContentID", "ContentTitle", campaignContent.ContentID);
            return(View(campaignContent));
        }
        public CampaignContent GetCampaignContent(long campaignID, long contentID, out HttpStatusCode status, out string statusMessage)
        {
            if (campaignID <= 0)
            {
                throw new Exception("Invalid Campaign ID");
            }
            if (contentID <= 0)
            {
                throw new Exception("Invalid Content ID");
            }

            RestClient restClient = createClient();

            RestRequest restRequest = new RestRequest
            {
                Resource      = "data/campaign/campaign_id/{campaign_id}/content/id/{content_id}",
                RequestFormat = DataFormat.Json,
                Method        = Method.GET
            };

            restRequest.AddUrlSegment("campaign_id", campaignID.ToString());
            restRequest.AddUrlSegment("content_id", contentID.ToString());

            //
            // NOTE: The JSON deserializer built into the RestSharp
            // package does not work well with our classes, so we use Newtonsoft instead.
            //
            IRestResponse restResponse = restClient.Execute(restRequest);

            status = restResponse.StatusCode;
            if (status != HttpStatusCode.OK)
            {
                statusMessage = restResponse.Content;
                return(null);
            }
            else
            {
                statusMessage = null;
            }

            string          content = restResponse.Content;
            CampaignContent cont    = JsonConvert.DeserializeObject <CampaignContent>(content);

            return(cont);
        }
示例#11
0
        public void EventReceiptTest()
        {
            BrickStreetConnect brickst = makeClient();
            HttpStatusCode     status;
            string             statusMessage = null;

            //
            // verify that conversation exists
            //
            // CONV NAME: "TEST ERECEIPT CONVERSATION"
            //
            // SPENTLY: SHOULD CREATE A CONVERSATION OBJECT FOR EACH SPENTLY ACCOUNT
            Conversation conv = brickst.GetConversationByName("TEST ERECEIPT CONVERSATION", out status, out statusMessage);

            if (status == HttpStatusCode.NotFound)
            {
                // conversation not found; create it
                Assert.IsNull(conv, "Expected null conversation");

                conv              = new Conversation();
                conv.Name         = "TEST ERECEIPT CONVERSATION";
                conv.DepartmentID = ConnectDepartmentID;

                Conversation conv2 = brickst.AddConversation(conv, out status, out statusMessage);
                Assert.AreEqual(HttpStatusCode.OK, status);
                Assert.IsNotNull(conv2);
                Assert.IsNotNull(conv2.Id);
                Assert.AreEqual(conv.Name, conv2.Name);
                conv = conv2;
            }
            Assert.IsNotNull(conv);

            //
            // create new campaign
            //
            string campaignName = "TEST ERECEIPT " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();

            EventMaster eventMaster = new EventMaster()
            {
                Name       = campaignName,
                IncludeXML = true
            };
            // NO EVENT PARAMS

            EventCampaign camp = new EventCampaign()
            {
                Name           = campaignName,
                Type           = Campaign.EVENT_CAMPAIGN,
                ConversationID = conv.Id,
                DepartmentID   = ConnectDepartmentID,
                Event          = eventMaster
            };

            EventCampaign savedCamp = brickst.AddEventCampaign(camp, out status, out statusMessage);

            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(savedCamp);
            Assert.IsNotNull(savedCamp.Id);
            Assert.AreEqual(ConnectDepartmentID, savedCamp.DepartmentID);
            camp = savedCamp;

            //
            // create content
            //
            CampaignContent cont = new CampaignContent()
            {
                Name    = campaignName + " CONTENT",
                Type    = CampaignContent.TYPE_XSL,
                Subject = "TEST SUBJ LINE FOR " + campaignName,
                //
                // NOTE: THIS URL SHOULD BE THE URL OF THE RECEIPT TEMPLATE XSL !!!
                ///
                HtmlContentURL = "http://content.brickst.net/eNotify/spently/eReceipt/spently-receipt2.xsl",
                CampaignID     = (long)camp.Id
            };
            CampaignContent cont2 = brickst.AddCampaignContent(cont, out status, out statusMessage);

            if (statusMessage != null)
            {
                Console.WriteLine("ERROR SAVING CONTENT: " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(cont2);
            Assert.IsNotNull(cont2.Id);
            cont = cont2;

            //
            // create message interaction to use the content
            //
            CampaignInteraction inter = new CampaignInteraction()
            {
                Name       = "Test Interaction 1",
                Type       = CampaignInteraction.TYPE_MAIN_MESSAGE,
                CampaignID = (long)camp.Id,
                ContentID  = (long)cont.Id,
                SegmentID  = 1
            };
            CampaignInteraction inter2 = brickst.AddMessage(inter, out status, out statusMessage);

            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(inter2);
            Assert.IsNotNull(inter2.Id);
            inter = inter2;

            //
            // Prepare to Launch the Interaction
            //
            RolloutAction raction = new RolloutAction()
            {
                Action        = RolloutAction.ACTION_PREPARE_LAUNCH,
                EffectiveDate = DateTime.Now.ToUniversalTime()
            };
            RolloutActionResponse raresp = brickst.DoRolloutAction((long)camp.Id, (long)inter.Id, raction, out status, out statusMessage);

            if (statusMessage != null)
            {
                Console.WriteLine("ERROR ROLLOUT ACTION 1: " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(raresp);
            Assert.AreEqual(RolloutActionResponse.STATUS_OK, raresp.Status);

            raction = new RolloutAction()
            {
                Action = RolloutAction.ACTION_LAUNCH
            };
            raresp = brickst.DoRolloutAction((long)camp.Id, (long)inter.Id, raction, out status, out statusMessage);
            if (statusMessage != null)
            {
                Console.WriteLine("ERROR ROLLOUT ACTION 2: " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(raresp);
            Assert.AreEqual(RolloutActionResponse.STATUS_OK, raresp.Status);

            //
            // event campaign is active; create a customer and submit events
            //
            string   altCustId = "TEST" + DateTime.Now.Ticks.ToString();
            string   email     = altCustId + "@cmaeda.com";
            Customer cust      = new Customer
            {
                AltCustomerId = altCustId,
                StatusCode    = 1,
                EmailAddress  = email,
                FirstName     = "Test",
                LastName      = "Testman"
            };
            Customer dbCust = brickst.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);
            cust = dbCust;

            //
            // have customer, submit event
            //
            StringBuilder bld = new StringBuilder();

            bld.Append("<purchase>");
            bld.Append("<customer_name>");
            bld.Append(cust.FirstName).Append(" ").Append(cust.LastName);
            bld.Append("</customer_name>");
            bld.Append("<line_items>");
            // LINE ITEM...
            bld.Append("<item>");
            bld.Append("<item_name>Hat</item_name>");
            bld.Append("<item_quantity>1</item_quantity>");
            bld.Append("<item_price>9.95</item_price>");
            bld.Append("</item>");
            // LINE ITEM...
            bld.Append("<item>");
            bld.Append("<item_name>Shoes</item_name>");
            bld.Append("<item_quantity>1</item_quantity>");
            bld.Append("<item_price>19.95</item_price>");
            bld.Append("</item>");
            bld.Append("</line_items>");
            bld.Append("</purchase>");
            string xml = bld.ToString();

            Event tstEvent = new Event
            {
                EventName  = campaignName,
                CustomerId = (long)cust.Id,
                Xml        = xml,
                Subscribe  = true
            };
            Event dbEvent = brickst.AddEvent(tstEvent, 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(dbEvent);
            Assert.IsNotNull(dbEvent.Id);
            Assert.AreEqual(tstEvent.EventName, dbEvent.EventName);
            Assert.AreEqual(tstEvent.CustomerId, dbEvent.CustomerId);
            Assert.AreEqual("1", dbEvent.Status);
            Console.WriteLine("SUBMITTED EVENT " + dbEvent.Id);
        }
示例#12
0
        public void CampaignEventTriggeredForReceipt()
        {
            BrickStreetConnect brickst = makeClient();
            //
            // verify that conversation exists
            //
            // CONV NAME: "TEST ERECEIPT CONVERSATION"
            //
            // SPENTLY: SHOULD CREATE A CONVERSATION OBJECT FOR EACH SPENTLY ACCOUNT
            HttpStatusCode status;
            string         statusMessage = null;
            Conversation   conv          = brickst.GetConversationByName("TEST ERECEIPT CONVERSATION", out status, out statusMessage);

            if (status == HttpStatusCode.NotFound)
            {
                // conversation not found; create it
                Assert.IsNull(conv, "Expected null conversation");

                conv              = new Conversation();
                conv.Name         = "TEST ERECEIPT CONVERSATION";
                conv.DepartmentID = ConnectDepartmentID;

                Conversation conv2 = brickst.AddConversation(conv, out status, out statusMessage);
                Assert.AreEqual(HttpStatusCode.OK, status);
                Assert.IsNotNull(conv2);
                conv = conv2;
            }
            Assert.IsNotNull(conv);

            //
            // create new campaign
            //
            string campaignName = "TEST ERECEIPT " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();

            EventMaster eventMaster = new EventMaster()
            {
                Name       = campaignName,
                IncludeXML = true
            };

            //
            // create event params
            //
            EventParameterMaster evParam;

            evParam = new EventParameterMaster()
            {
                Name     = "shopName",
                DataType = EventParameterMaster.TYPE_STRING
            };
            eventMaster.Parameters.Add(evParam);

            evParam = new EventParameterMaster()
            {
                Name     = "shopAddress",
                DataType = EventParameterMaster.TYPE_STRING
            };
            eventMaster.Parameters.Add(evParam);

            evParam = new EventParameterMaster()
            {
                Name     = "shopPhone",
                DataType = EventParameterMaster.TYPE_STRING
            };
            eventMaster.Parameters.Add(evParam);

            EventCampaign camp = new EventCampaign()
            {
                Name           = campaignName,
                Type           = Campaign.EVENT_CAMPAIGN,
                ConversationID = conv.Id,
                DepartmentID   = ConnectDepartmentID,
                Event          = eventMaster
            };

            EventCampaign savedCamp = brickst.AddEventCampaign(camp, out status, out statusMessage);

            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(savedCamp);
            Assert.IsNotNull(savedCamp.Id);
            Assert.AreEqual(ConnectDepartmentID, savedCamp.DepartmentID);
            camp = savedCamp;

            //
            // create content
            //
            CampaignContent cont = new CampaignContent()
            {
                Name    = campaignName + " CONTENT",
                Type    = CampaignContent.TYPE_XSL,
                Subject = "TEST SUBJ LINE FOR " + campaignName,
                //
                // NOTE: THIS URL SHOULD BE THE URL OF THE RECEIPT TEMPLATE XSL !!!
                ///
                //HtmlContentURL = "http://content.brickst.net/eNotify/spently/eReceipt/spently-receipt2.xsl",
                HtmlContentURL = "http://www.geocities.jp/bssjapantest01/ereceipt/proj1.xsl",
                CampaignID     = (long)camp.Id
            };
            CampaignContent cont2 = brickst.AddCampaignContent(cont, out status, out statusMessage);

            if (statusMessage != null)
            {
                Console.WriteLine("ERROR SAVING CONTENT: " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(cont2);
            Assert.IsNotNull(cont2.Id);
            cont = cont2;

            //
            // create message interaction to use the content
            //
            CampaignInteraction inter = new CampaignInteraction()
            {
                Name       = "Test Interaction 1",
                Type       = CampaignInteraction.TYPE_MAIN_MESSAGE,
                CampaignID = (long)camp.Id,
                ContentID  = (long)cont.Id,
                SegmentID  = 1
            };
            CampaignInteraction inter2 = brickst.AddMessage(inter, out status, out statusMessage);

            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(inter2);
            Assert.IsNotNull(inter2.Id);
            inter = inter2;

            //
            // Prepare to Launch the Interaction
            //
            RolloutAction raction = new RolloutAction()
            {
                Action        = RolloutAction.ACTION_PREPARE_LAUNCH,
                EffectiveDate = DateTime.Now.ToUniversalTime()
            };
            RolloutActionResponse raresp = brickst.DoRolloutAction((long)camp.Id, (long)inter.Id, raction, out status, out statusMessage);

            if (statusMessage != null)
            {
                Console.WriteLine("ERROR ROLLOUT ACTION 1: " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(raresp);
            Assert.AreEqual(RolloutActionResponse.STATUS_OK, raresp.Status);

            raction = new RolloutAction()
            {
                Action = RolloutAction.ACTION_LAUNCH
            };
            raresp = brickst.DoRolloutAction((long)camp.Id, (long)inter.Id, raction, out status, out statusMessage);
            if (statusMessage != null)
            {
                Console.WriteLine("ERROR ROLLOUT ACTION 2: " + statusMessage);
            }
            Assert.AreEqual(HttpStatusCode.OK, status);
            Assert.IsNotNull(raresp);
            Assert.AreEqual(RolloutActionResponse.STATUS_OK, raresp.Status);
        }