/test/test_segment.py

http://github.com/campaignmonitor/createsend-python · Python · 114 lines · 95 code · 17 blank · 2 comment · 0 complexity · 7b941f62ce006b503a22195adbedfa5b MD5 · raw file

  1. from six.moves.urllib.parse import quote
  2. import unittest
  3. from createsend.segment import Segment
  4. class SegmentTestCase(object):
  5. def test_create(self):
  6. list_id = "2983492834987394879837498"
  7. rulegroups = [{"Rules": [{"RuleType": "EmailAddress", "Clause": "CONTAINS example.com"}, {
  8. "RuleType": "Name", "Clause": "EQUALS subscriber"}]}]
  9. s = Segment()
  10. s.stub_request("segments/%s.json" % list_id, "create_segment.json", None,
  11. "{\"RuleGroups\": [{\"Rules\": [{\"Clause\": \"CONTAINS example.com\", \"RuleType\": \"EmailAddress\"}, {\"Clause\": \"EQUALS subscriber\", \"RuleType\": \"Name\"}]}], \"Title\": \"new segment title\"}")
  12. segment_id = s.create(list_id, "new segment title", rulegroups)
  13. self.assertEquals(segment_id, "0246c2aea610a3545d9780bf6ab890061234")
  14. self.assertEquals(s.segment_id, "0246c2aea610a3545d9780bf6ab890061234")
  15. def test_update(self):
  16. rulegroups = [
  17. {"Rules": [{"RuleType": "Name", "Clause": "EQUALS subscriber"}]}]
  18. self.segment.stub_request("segments/%s.json" % self.segment.segment_id, None,
  19. "{\"Rules\": [{\"Clause\": \"EQUALS subscriber\", \"RuleType\": \"Name\"}], \"Title\": \"new title for segment\"}")
  20. self.segment.update("new title for segment", rulegroups)
  21. def test_add_rulegroup(self):
  22. rulegroup = {
  23. "Rules": [{"RuleType": "EmailAddress", "Clause": "CONTAINS example.com"}]}
  24. self.segment.stub_request("segments/%s/rules.json" % self.segment.segment_id, None, None,
  25. "{\"Rules\": [{\"Clause\": \"CONTAINS example.com\", \"RuleType\": \"EmailAddress\"}]}")
  26. self.segment.add_rulegroup(rulegroup)
  27. def test_subscribers(self):
  28. min_date = "2010-01-01"
  29. self.segment.stub_request("segments/%s/active.json?date=%s&orderfield=email&page=1&pagesize=1000&orderdirection=asc&includetrackinginformation=False" %
  30. (self.segment.segment_id, quote(min_date)), "segment_subscribers.json")
  31. res = self.segment.subscribers(min_date)
  32. self.assertEquals(res.ResultsOrderedBy, "email")
  33. self.assertEquals(res.OrderDirection, "asc")
  34. self.assertEquals(res.PageNumber, 1)
  35. self.assertEquals(res.PageSize, 1000)
  36. self.assertEquals(res.RecordsOnThisPage, 2)
  37. self.assertEquals(res.TotalNumberOfRecords, 2)
  38. self.assertEquals(res.NumberOfPages, 1)
  39. self.assertEquals(len(res.Results), 2)
  40. self.assertEquals(res.Results[0].EmailAddress, "personone@example.com")
  41. self.assertEquals(res.Results[0].Name, "Person One")
  42. self.assertEquals(res.Results[0].Date, "2010-10-27 13:13:00")
  43. self.assertEquals(res.Results[0].State, "Active")
  44. self.assertEquals(res.Results[0].CustomFields, [])
  45. def test_subscribers_with_tracking_information_included(self):
  46. min_date = "2010-01-01"
  47. self.segment.stub_request("segments/%s/active.json?date=%s&orderfield=email&page=1&pagesize=1000&orderdirection=asc&includetrackinginformation=True" %
  48. (self.segment.segment_id, quote(min_date)), "segment_subscribers_with_tracking_preference.json")
  49. res = self.segment.subscribers(min_date, include_tracking_information=True)
  50. self.assertEquals(res.ResultsOrderedBy, "email")
  51. self.assertEquals(res.OrderDirection, "asc")
  52. self.assertEquals(res.PageNumber, 1)
  53. self.assertEquals(res.PageSize, 1000)
  54. self.assertEquals(res.RecordsOnThisPage, 2)
  55. self.assertEquals(res.TotalNumberOfRecords, 2)
  56. self.assertEquals(res.NumberOfPages, 1)
  57. self.assertEquals(len(res.Results), 2)
  58. self.assertEquals(res.Results[0].EmailAddress, "personone@example.com")
  59. self.assertEquals(res.Results[0].Name, "Person One")
  60. self.assertEquals(res.Results[0].Date, "2010-10-27 13:13:00")
  61. self.assertEquals(res.Results[0].State, "Active")
  62. self.assertEquals(res.Results[0].CustomFields, [])
  63. self.assertEquals(res.Results[0].ConsentToTrack, "Yes")
  64. def test_delete(self):
  65. self.segment.stub_request("segments/%s.json" %
  66. self.segment.segment_id, None)
  67. self.segment.delete()
  68. def test_clear_rules(self):
  69. self.segment.stub_request("segments/%s/rules.json" %
  70. self.segment.segment_id, None)
  71. self.segment.clear_rules()
  72. def test_details(self):
  73. self.segment.stub_request("segments/%s.json" %
  74. self.segment.segment_id, "segment_details.json")
  75. res = self.segment.details()
  76. self.assertEquals(res.ActiveSubscribers, 0)
  77. self.assertEquals(len(res.RuleGroups), 2)
  78. self.assertEquals(res.RuleGroups[0].Rules[0].RuleType, "EmailAddress")
  79. self.assertEquals(res.RuleGroups[0].Rules[
  80. 0].Clause, "CONTAINS @hello.com")
  81. self.assertEquals(res.RuleGroups[1].Rules[0].RuleType, "Name")
  82. self.assertEquals(res.RuleGroups[1].Rules[0].Clause, "PROVIDED")
  83. self.assertEquals(res.ListID, "2bea949d0bf96148c3e6a209d2e82060")
  84. self.assertEquals(res.SegmentID, "dba84a225d5ce3d19105d7257baac46f")
  85. self.assertEquals(res.Title, "My Segment")
  86. class OAuthSegmentTestCase(unittest.TestCase, SegmentTestCase):
  87. """Test when using OAuth to authenticate"""
  88. def setUp(self):
  89. self.segment_id = "98y2e98y289dh89h938389"
  90. self.segment = Segment(
  91. {"access_token": "ASP95S4aR+9KsgfHB0dapTYxNA==", "refresh_token": "5S4aASP9R+9KsgfHB0dapTYxNA=="}, self.segment_id)
  92. class ApiKeySegmentTestCase(unittest.TestCase, SegmentTestCase):
  93. """Test when using an API key to authenticate"""
  94. def setUp(self):
  95. self.segment_id = "98y2e98y289dh89h938389"
  96. self.segment = Segment(
  97. {'api_key': '123123123123123123123'}, self.segment_id)