streamsend 1.0.0.rc16 → 1.0.0.rc19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/.gitignore +2 -0
- data/Gemfile.lock +9 -7
- data/lib/streamsend/api/base/count.rb +27 -0
- data/lib/streamsend/api/base/index.rb +13 -15
- data/lib/streamsend/api/blast.rb +6 -6
- data/lib/streamsend/api/bounce.rb +2 -2
- data/lib/streamsend/api/click.rb +2 -2
- data/lib/streamsend/api/configuration.rb +4 -0
- data/lib/streamsend/api/hash_xml_serializer.rb +58 -0
- data/lib/streamsend/api/list.rb +1 -1
- data/lib/streamsend/api/membership.rb +16 -3
- data/lib/streamsend/api/person.rb +4 -8
- data/lib/streamsend/api/result.rb +32 -1
- data/lib/streamsend/api/session.rb +22 -1
- data/lib/streamsend/api/unsubscribe.rb +2 -2
- data/lib/streamsend/version.rb +1 -1
- data/lib/streamsend.rb +3 -4
- data/spec/lib/streamsend/api/integration/blast_spec.rb +4 -4
- data/spec/lib/streamsend/api/integration/bounce_spec.rb +3 -0
- data/spec/lib/streamsend/api/integration/click_spec.rb +2 -0
- data/spec/lib/streamsend/api/integration/link_spec.rb +2 -0
- data/spec/lib/streamsend/api/integration/membership_spec.rb +27 -1
- data/spec/lib/streamsend/api/integration/owner_spec.rb +25 -18
- data/spec/lib/streamsend/api/integration/person_spec.rb +12 -2
- data/spec/lib/streamsend/api/integration/unsubscribe_spec.rb +2 -0
- data/spec/lib/streamsend/api/integration/view_spec.rb +1 -0
- data/spec/lib/streamsend/api/unit/base/count_spec.rb +57 -0
- data/spec/lib/streamsend/api/unit/base/index_spec.rb +42 -18
- data/spec/lib/streamsend/api/unit/blast_spec.rb +6 -9
- data/spec/lib/streamsend/api/unit/bounce_spec.rb +5 -7
- data/spec/lib/streamsend/api/unit/click_spec.rb +4 -4
- data/spec/lib/streamsend/api/unit/hash_xml_serializer_spec.rb +63 -0
- data/spec/lib/streamsend/api/unit/link_spec.rb +2 -2
- data/spec/lib/streamsend/api/unit/membership_spec.rb +23 -9
- data/spec/lib/streamsend/api/unit/person_spec.rb +10 -11
- data/spec/lib/streamsend/api/unit/result_spec.rb +32 -3
- data/spec/lib/streamsend/api/unit/unsubscribe_spec.rb +4 -6
- metadata +9 -3
@@ -27,36 +27,43 @@ module StreamSend
|
|
27
27
|
after do
|
28
28
|
WebMock.enable!
|
29
29
|
end
|
30
|
+
let(:owner_id_1) do
|
31
|
+
creator = StreamSend::Api::Owner::Create.new(session)
|
32
|
+
id = creator.execute({:owner => owner_hash})
|
33
|
+
end
|
30
34
|
|
31
|
-
|
35
|
+
let(:owner_id_2) do
|
32
36
|
creator = StreamSend::Api::Owner::Create.new(session)
|
33
37
|
owner_hash2 = owner_hash.clone
|
34
38
|
owner_hash2[:owner_name] = franchise_code2
|
35
39
|
owner_hash2[:owner_id] = franchise_code2
|
40
|
+
creator.execute({:owner => owner_hash2})
|
41
|
+
end
|
36
42
|
|
43
|
+
let(:owner_id_3) do
|
44
|
+
creator = StreamSend::Api::Owner::Create.new(session)
|
37
45
|
owner_hash3 = owner_hash.clone
|
38
46
|
owner_hash3[:owner_name] = franchise_code3
|
39
47
|
owner_hash3[:owner_id] = franchise_code3
|
40
|
-
|
41
|
-
creator.execute({:owner => owner_hash})
|
42
|
-
creator.execute({:owner => owner_hash2})
|
43
48
|
creator.execute({:owner => owner_hash3})
|
44
49
|
end
|
45
50
|
|
46
|
-
def
|
51
|
+
def create_owners
|
52
|
+
[owner_id_1, owner_id_2, owner_id_3]
|
53
|
+
end
|
54
|
+
|
55
|
+
def delete_owners(owner_ids)
|
47
56
|
destroyer = StreamSend::Api::Owner::Destroy.new(session)
|
48
|
-
destroyer.execute(
|
49
|
-
destroyer.execute(franchise_code2)
|
50
|
-
destroyer.execute(franchise_code3)
|
57
|
+
owner_ids.each{ |id| destroyer.execute(id) }
|
51
58
|
end
|
52
59
|
|
53
60
|
describe Index do
|
54
61
|
context "without pagination" do
|
55
62
|
it "creates, display, then destroy the owner(s)" do
|
56
|
-
create_owners
|
63
|
+
ids = create_owners
|
57
64
|
owners = StreamSend::Api::Owner::Index.new(session).execute
|
58
65
|
expect(owners.count).to be > 0
|
59
|
-
delete_owners
|
66
|
+
delete_owners(ids)
|
60
67
|
end
|
61
68
|
end
|
62
69
|
|
@@ -64,29 +71,29 @@ module StreamSend
|
|
64
71
|
let(:per_page) { 2 }
|
65
72
|
|
66
73
|
it "creates, display, then destroy the owner(s)" do
|
67
|
-
create_owners
|
74
|
+
ids = create_owners
|
68
75
|
owners = StreamSend::Api::Owner::Index.new(session).execute(:page =>1, :per_page => per_page)
|
69
76
|
expect(owners.count).to be per_page
|
70
|
-
delete_owners
|
77
|
+
delete_owners(ids)
|
71
78
|
end
|
72
79
|
end
|
73
80
|
end
|
74
81
|
|
75
82
|
describe Show do
|
76
83
|
it "shows a owner by id" do
|
77
|
-
create_owners
|
78
|
-
owner = StreamSend::Api::Owner::Show.new(session).execute(
|
84
|
+
ids = create_owners
|
85
|
+
owner = StreamSend::Api::Owner::Show.new(session).execute(ids.first)
|
79
86
|
expect(owner.owner_id).to eq(franchise_code)
|
80
|
-
delete_owners
|
87
|
+
delete_owners(ids)
|
81
88
|
end
|
82
89
|
end
|
83
90
|
|
84
91
|
describe Destroy do
|
85
92
|
it "deletes an owner by owner id" do
|
86
|
-
StreamSend::Api::Owner::Create.new(session).execute({:owner => owner_hash})
|
87
|
-
StreamSend::Api::Owner::Destroy.new(session).execute(
|
93
|
+
id = StreamSend::Api::Owner::Create.new(session).execute({:owner => owner_hash})
|
94
|
+
StreamSend::Api::Owner::Destroy.new(session).execute(id)
|
88
95
|
expect do
|
89
|
-
StreamSend::Api::Owner::Show.new(session).execute(
|
96
|
+
StreamSend::Api::Owner::Show.new(session).execute(id)
|
90
97
|
end.to raise_error(StreamSend::Api::Exception, "Could not find any owners with the specified id. (404)")
|
91
98
|
end
|
92
99
|
end
|
@@ -54,10 +54,13 @@ module StreamSend
|
|
54
54
|
emailer = EmailAddress.new(session)
|
55
55
|
results = emailer.execute(person_hash[:person][:email_address])
|
56
56
|
expect(results.count).to be > 0
|
57
|
+
|
58
|
+
destroyer = Destroy.new(session)
|
59
|
+
destroyer.execute(id)
|
57
60
|
end
|
58
61
|
|
59
62
|
it "returns an index by email address and owner id" do
|
60
|
-
|
63
|
+
pending "Owner is not accessible via API -- relies on owner fixture in account"
|
61
64
|
owner_id = "ID 1373999841"
|
62
65
|
person_hash[:person][:owner_id] = owner_id
|
63
66
|
id = creator.execute(person_hash)
|
@@ -73,10 +76,13 @@ module StreamSend
|
|
73
76
|
tracker = TrackingHash.new(session)
|
74
77
|
results = tracker.execute(person.tracking_hash)
|
75
78
|
expect(results.count).to be > 0
|
79
|
+
|
80
|
+
destroyer = Destroy.new(session)
|
81
|
+
destroyer.execute(id)
|
76
82
|
end
|
77
83
|
|
78
84
|
it "returns an index by owner id" do
|
79
|
-
|
85
|
+
pending "Owner is not accessible via API -- relies on owner fixture in account"
|
80
86
|
owner_id = "ID 1373999841"
|
81
87
|
person_hash[:person][:owner_id] = owner_id
|
82
88
|
id = creator.execute(person_hash)
|
@@ -92,20 +98,24 @@ module StreamSend
|
|
92
98
|
let(:blast_id) { 70361 }
|
93
99
|
let(:link_id) { 27581 }
|
94
100
|
it "returns an array of people" do
|
101
|
+
pending "Can't create a click through API"
|
95
102
|
people = peopler.execute(blast_id)
|
96
103
|
expect(people.count).to be > 0
|
97
104
|
end
|
98
105
|
|
99
106
|
it "returns an array of people for a link click by link id" do
|
107
|
+
pending "Can't create view through API"
|
100
108
|
people = peopler.execute(blast_id, link_id)
|
101
109
|
expect(people.count).to be > 0
|
102
110
|
end
|
103
111
|
end
|
104
112
|
|
105
113
|
describe View do
|
114
|
+
pending "Can't create a view through API"
|
106
115
|
let(:viewer){ View.new(session) }
|
107
116
|
let(:blast_id) { 72761 }
|
108
117
|
it "returns an array of people" do
|
118
|
+
pending "Can't create view through API"
|
109
119
|
people = viewer.execute(blast_id)
|
110
120
|
expect(people.count).to be > 0
|
111
121
|
end
|
@@ -17,6 +17,7 @@ module StreamSend
|
|
17
17
|
|
18
18
|
describe Index do
|
19
19
|
it "returns an array of unsubscribes" do
|
20
|
+
pending "Can't create unsubsscribes through api"
|
20
21
|
indexer = Index.new(session)
|
21
22
|
unsubs = indexer.execute(blast_id)
|
22
23
|
expect(unsubs.count).to be > 0
|
@@ -25,6 +26,7 @@ module StreamSend
|
|
25
26
|
|
26
27
|
describe Manual do
|
27
28
|
it "returns an array of manual unsubscribes" do
|
29
|
+
pending "Can't create unsubsscribes through api"
|
28
30
|
manualer = Manual.new(session)
|
29
31
|
unsubs = manualer.execute(blast_id)
|
30
32
|
expect(unsubs.count).to be > 0
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module StreamSend
|
4
|
+
module Api
|
5
|
+
module Call
|
6
|
+
describe Count do
|
7
|
+
let(:session){ StreamSend::Api::Session.new("test", "password", "http://default.base") }
|
8
|
+
let(:count_request){ Count.new(session) }
|
9
|
+
let(:xml){ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><count type=\"integer\">10</count>" }
|
10
|
+
|
11
|
+
describe "#uris" do
|
12
|
+
before do
|
13
|
+
stub_request(:get, "http://test:password@default.base/calls/count.xml").
|
14
|
+
to_return(:status => 200, :body => xml, headers: { 'Accept' => 'text/xml', 'Content-type' => 'text/xml' })
|
15
|
+
end
|
16
|
+
|
17
|
+
it "builds a count uri" do
|
18
|
+
count_request.execute
|
19
|
+
expect(count_request.uri).to eq("http://default.base/calls/count.xml")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#execute" do
|
24
|
+
it "returns a count integer" do
|
25
|
+
stub_request(:get, "http://test:password@default.base/calls/count.xml").
|
26
|
+
to_return(:status => 200, :body => xml, :headers => {'Content-type' => 'application/xml'})
|
27
|
+
expect(count_request.execute).to eq(10)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "throws a ApiException for 400 errors" do
|
31
|
+
stub_request(:get, "http://test:password@default.base/calls/count.xml").
|
32
|
+
to_return(:status => 400, :body => xml, :headers => {'Content-type' => 'application/xml'})
|
33
|
+
expect do
|
34
|
+
count_request.execute
|
35
|
+
end.to raise_error ::StreamSend::Api::ApiException
|
36
|
+
end
|
37
|
+
|
38
|
+
it "throws a UnauthorizedException for 401 errors" do
|
39
|
+
stub_request(:get, "http://test:password@default.base/calls/count.xml").
|
40
|
+
to_return(:status => 401, :body => xml, :headers => {'Content-type' => 'application/xml'})
|
41
|
+
expect do
|
42
|
+
count_request.execute
|
43
|
+
end.to raise_error ::StreamSend::Api::UnauthorizedException
|
44
|
+
end
|
45
|
+
|
46
|
+
it "throws a Exception for all other errors" do
|
47
|
+
stub_request(:get, "http://test:password@default.base/calls/count.xml").
|
48
|
+
to_return(:status => 500, :body => xml, :headers => {'Content-type' => 'application/xml'})
|
49
|
+
expect do
|
50
|
+
count_request.execute
|
51
|
+
end.to raise_error ::StreamSend::Api::Exception
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -9,7 +9,7 @@ module StreamSend
|
|
9
9
|
let(:options){ {:page => 2, :per_page => 10} }
|
10
10
|
let(:xml){ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><calls type=\"array\"><call><test type=\"integer\">1</test></call></calls>" }
|
11
11
|
|
12
|
-
describe "
|
12
|
+
describe "#uris" do
|
13
13
|
before do
|
14
14
|
stub_request(:get, "http://test:password@default.base/calls.xml").
|
15
15
|
to_return(:status => 200, :body => xml, headers: { 'Accept' => 'text/xml', 'Content-type' => 'text/xml' })
|
@@ -19,20 +19,6 @@ module StreamSend
|
|
19
19
|
indexer.execute
|
20
20
|
expect(indexer.uri).to eq("http://default.base/calls.xml")
|
21
21
|
end
|
22
|
-
|
23
|
-
describe "#paging_query_string" do
|
24
|
-
it "returns paging parameters with the options provided" do
|
25
|
-
stub_request(:get, "http://test:password@default.base/calls.xml?page=2&per_page=10").
|
26
|
-
to_return(:status => 200, :body => xml, headers: { 'Accept' => 'text/xml', 'Content-type' => 'text/xml' })
|
27
|
-
indexer.execute(options)
|
28
|
-
expect(indexer.paging_query_string).to eq("?page=2&per_page=10")
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns default paging parameters if no options are provided." do
|
32
|
-
indexer.execute
|
33
|
-
expect(indexer.paging_query_string).to eq("?page=1&per_page=100")
|
34
|
-
end
|
35
|
-
end
|
36
22
|
end
|
37
23
|
|
38
24
|
describe "#execute" do
|
@@ -48,6 +34,45 @@ module StreamSend
|
|
48
34
|
indexer.execute
|
49
35
|
end.to raise_error(StreamSend::Api::Exception, "Could not find any calls. (404)")
|
50
36
|
end
|
37
|
+
|
38
|
+
context "with options" do
|
39
|
+
let(:session) { double(:get => double(:code => 200, :parsed_response => { "calls" => [] } ), :base_uri => "http://boohoo.com") }
|
40
|
+
context "with headers attribute" do
|
41
|
+
let(:options) { {:headers =>{:location => "http://me.com"}, :owner_id => 99 } }
|
42
|
+
|
43
|
+
it "makes get request with options" do
|
44
|
+
session.should_receive(:get).with("http://boohoo.com/calls.xml", options)
|
45
|
+
indexer.execute(options)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "with query attributes" do
|
50
|
+
let(:options) { {:query => {:page => 5, :per_page => 66}, :owner_id => 99 } }
|
51
|
+
|
52
|
+
it "makes get request with options" do
|
53
|
+
session.should_receive(:get).with("http://boohoo.com/calls.xml", options)
|
54
|
+
indexer.execute(options)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "with attributes only" do
|
59
|
+
let(:options) { {:page => 3, :per_page => 33, :owner_id => 99} }
|
60
|
+
|
61
|
+
it "makes get request with options in a query hash" do
|
62
|
+
session.should_receive(:get).with("http://boohoo.com/calls.xml", {:query => options})
|
63
|
+
indexer.execute(options)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "with no options" do
|
69
|
+
let(:session) { double(:get => double(:code => 200, :parsed_response => { "calls" => [] } ), :base_uri => "http://boohoo.com") }
|
70
|
+
let(:options) { {} }
|
71
|
+
it "makes get request with options that is an empty hash" do
|
72
|
+
session.should_receive(:get).with("http://boohoo.com/calls.xml", {})
|
73
|
+
indexer.execute(options)
|
74
|
+
end
|
75
|
+
end
|
51
76
|
end
|
52
77
|
end
|
53
78
|
|
@@ -81,10 +106,9 @@ module StreamSend
|
|
81
106
|
let(:blast_id){ 1432 }
|
82
107
|
|
83
108
|
it "overrides uri and returns a uri based on the provided blast_id and appends paging" do
|
84
|
-
stub_request(:get, "http://test:password@default.base/blasts/1432/calls.xml
|
85
|
-
to_return(:status => 200, :body => xml, headers: { 'Accept' => 'text/xml', 'Content-type' => 'text/xml' })
|
109
|
+
stub_request(:get, "http://test:password@default.base/blasts/1432/calls.xml").to_return(:status => 200, :body => xml, headers: { 'Accept' => 'text/xml', 'Content-type' => 'text/xml' })
|
86
110
|
indexer.execute(blast_id)
|
87
|
-
expect(indexer.uri).to eq("http://default.base/blasts/1432/calls.xml
|
111
|
+
expect(indexer.uri).to eq("http://default.base/blasts/1432/calls.xml")
|
88
112
|
end
|
89
113
|
end
|
90
114
|
end
|
@@ -12,10 +12,9 @@ module StreamSend
|
|
12
12
|
|
13
13
|
it "returns the scheduled blast uri" do
|
14
14
|
session.stub(:audience_id).and_return(1)
|
15
|
-
stub_request(:get, "http://test:password@default.base/audiences/1/blasts.xml
|
16
|
-
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
15
|
+
stub_request(:get, "http://test:password@default.base/audiences/1/blasts.xml").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
17
16
|
indexer.execute
|
18
|
-
expect(indexer.uri).to eq("http://default.base/audiences/1/blasts.xml
|
17
|
+
expect(indexer.uri).to eq("http://default.base/audiences/1/blasts.xml")
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
@@ -24,13 +23,12 @@ module StreamSend
|
|
24
23
|
|
25
24
|
before do
|
26
25
|
session.stub(:audience_id).and_return(1)
|
27
|
-
stub_request(:get, "http://test:password@default.base/audiences/1/blasts/scheduled.xml
|
28
|
-
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
26
|
+
stub_request(:get, "http://test:password@default.base/audiences/1/blasts/scheduled.xml").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
29
27
|
scheduler.execute
|
30
28
|
end
|
31
29
|
|
32
30
|
it "returns the scheduled blast uri" do
|
33
|
-
expect(scheduler.uri).to eq("http://default.base/audiences/1/blasts/scheduled.xml
|
31
|
+
expect(scheduler.uri).to eq("http://default.base/audiences/1/blasts/scheduled.xml")
|
34
32
|
end
|
35
33
|
end
|
36
34
|
|
@@ -39,13 +37,12 @@ module StreamSend
|
|
39
37
|
|
40
38
|
before do
|
41
39
|
session.stub(:audience_id).and_return(1)
|
42
|
-
stub_request(:get, "http://test:password@default.base/audiences/1/blasts/sent.xml
|
43
|
-
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
40
|
+
stub_request(:get, "http://test:password@default.base/audiences/1/blasts/sent.xml").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
44
41
|
scheduler.execute
|
45
42
|
end
|
46
43
|
|
47
44
|
it "returns the sent blast uri" do
|
48
|
-
expect(scheduler.uri).to eq("http://default.base/audiences/1/blasts/sent.xml
|
45
|
+
expect(scheduler.uri).to eq("http://default.base/audiences/1/blasts/sent.xml")
|
49
46
|
end
|
50
47
|
end
|
51
48
|
|
@@ -11,23 +11,21 @@ module StreamSend
|
|
11
11
|
let(:xml){ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bounces type=\"array\"><bounce><test type=\"integer\">1</test></bounce></bounces>" }
|
12
12
|
|
13
13
|
before do
|
14
|
-
stub_request(:get, "http://test:password@default.base/blasts/15/bounces/soft.xml
|
15
|
-
|
16
|
-
stub_request(:get, "http://test:password@default.base/blasts/15/bounces/hard.xml?page=1&per_page=100").
|
17
|
-
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
18
|
-
soft_bounce.execute(blast_id)
|
14
|
+
stub_request(:get, "http://test:password@default.base/blasts/15/bounces/soft.xml").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
15
|
+
stub_request(:get, "http://test:password@default.base/blasts/15/bounces/hard.xml").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
19
16
|
hard_bounce.execute(blast_id)
|
17
|
+
soft_bounce.execute(blast_id)
|
20
18
|
end
|
21
19
|
|
22
20
|
describe Soft do
|
23
21
|
it "returns a uri for soft bounces" do
|
24
|
-
expect(soft_bounce.uri).to eq("http://default.base/blasts/15/bounces/soft.xml
|
22
|
+
expect(soft_bounce.uri).to eq("http://default.base/blasts/15/bounces/soft.xml")
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
28
26
|
describe Hard do
|
29
27
|
it "returns a url for hard bounces" do
|
30
|
-
expect(hard_bounce.uri).to eq("http://default.base/blasts/15/bounces/hard.xml
|
28
|
+
expect(hard_bounce.uri).to eq("http://default.base/blasts/15/bounces/hard.xml")
|
31
29
|
end
|
32
30
|
end
|
33
31
|
end
|
@@ -11,21 +11,21 @@ module StreamSend
|
|
11
11
|
let(:xml){ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><clicks type=\"array\"><click><test type=\"integer\">1</test></click></clicks>" }
|
12
12
|
|
13
13
|
before do
|
14
|
-
stub_request(:get, "https://test:pass@default.base/blasts/1/links/1/clicks.xml
|
14
|
+
stub_request(:get, "https://test:pass@default.base/blasts/1/links/1/clicks.xml").
|
15
15
|
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
16
|
-
stub_request(:get, "https://test:pass@default.base/blasts/1/clicks.xml
|
16
|
+
stub_request(:get, "https://test:pass@default.base/blasts/1/clicks.xml").
|
17
17
|
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
18
18
|
end
|
19
19
|
|
20
20
|
describe Index do
|
21
21
|
it "creates a uri for blast clicks" do
|
22
22
|
indexer.execute(blast_id)
|
23
|
-
expect(indexer.uri).to eq("https://default.base/blasts/#{blast_id}/clicks.xml
|
23
|
+
expect(indexer.uri).to eq("https://default.base/blasts/#{blast_id}/clicks.xml")
|
24
24
|
end
|
25
25
|
|
26
26
|
it "creates a uri for a link click if link id is provided" do
|
27
27
|
indexer.execute(blast_id, link_id)
|
28
|
-
expect(indexer.uri).to eq("https://default.base/blasts/#{blast_id}/links/#{link_id}/clicks.xml
|
28
|
+
expect(indexer.uri).to eq("https://default.base/blasts/#{blast_id}/links/#{link_id}/clicks.xml")
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module StreamSend
|
4
|
+
module Api
|
5
|
+
describe HashXmlSerializer do
|
6
|
+
describe "#serialize" do
|
7
|
+
let(:hash_serializer) { HashXmlSerializer.new }
|
8
|
+
let(:simple_hash) { { :simple_hash => { :id => 101, :name => "test" } } }
|
9
|
+
let(:nested_hash) { { :nested_hash => { :parent_hash => { :child_hash => { :child_value => "Valuable!" }, :child_array => [1,2,3] } } } }
|
10
|
+
|
11
|
+
before do
|
12
|
+
@simple_xml =<<-XML
|
13
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
14
|
+
<simple-hash>
|
15
|
+
<id>101</id>
|
16
|
+
<name>test</name>
|
17
|
+
</simple-hash>
|
18
|
+
XML
|
19
|
+
|
20
|
+
@nested_xml =<<-XML
|
21
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
22
|
+
<nested-hash>
|
23
|
+
<parent-hash>
|
24
|
+
<child-hash>
|
25
|
+
<child-value>Valuable!</child-value>
|
26
|
+
</child-hash>
|
27
|
+
<child-array>1, 2, 3</child-array>
|
28
|
+
</parent-hash>
|
29
|
+
</nested-hash>
|
30
|
+
XML
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
it "serializes a simple hash" do
|
35
|
+
xml = hash_serializer.serialize(simple_hash)
|
36
|
+
xml.should == @simple_xml
|
37
|
+
end
|
38
|
+
|
39
|
+
it "serializes a nested hash" do
|
40
|
+
xml = hash_serializer.serialize(nested_hash)
|
41
|
+
xml.should == @nested_xml
|
42
|
+
end
|
43
|
+
|
44
|
+
it "adds an attribute for nil valued tags" do
|
45
|
+
simple_hash[:simple_hash][:something_nilly] = nil
|
46
|
+
xml = hash_serializer.serialize(simple_hash)
|
47
|
+
xml.should include("<something-nilly nil=\"true\"/>")
|
48
|
+
end
|
49
|
+
|
50
|
+
it "uses the root option value for naming the root tag" do
|
51
|
+
xml = hash_serializer.serialize(simple_hash, {:root => "crazy"})
|
52
|
+
xml.should include("<crazy>")
|
53
|
+
xml.should include("</crazy>")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "doesn't add a instruct tag before the xml result if instruct! set to false" do
|
57
|
+
xml = hash_serializer.serialize(simple_hash, {:skip_instruct => true})
|
58
|
+
xml.should_not include("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -13,10 +13,10 @@ module StreamSend
|
|
13
13
|
|
14
14
|
describe Index do
|
15
15
|
it "creates a uri for blast links" do
|
16
|
-
stub_request(:get, "https://test:password@default.base/blasts/1/links.xml
|
16
|
+
stub_request(:get, "https://test:password@default.base/blasts/1/links.xml").
|
17
17
|
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
18
18
|
indexer.execute(blast_id)
|
19
|
-
expect(indexer.uri).to eq("https://default.base/blasts/#{blast_id}/links.xml
|
19
|
+
expect(indexer.uri).to eq("https://default.base/blasts/#{blast_id}/links.xml")
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -17,27 +17,41 @@ module StreamSend
|
|
17
17
|
|
18
18
|
describe Index do
|
19
19
|
it "returns a uri for an index of memberships" do
|
20
|
-
stub_request(:get, "https://test:password@default.base/audiences/1/people/123/memberships.xml
|
21
|
-
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
20
|
+
stub_request(:get, "https://test:password@default.base/audiences/1/people/123/memberships.xml").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
22
21
|
indexer = Index.new(session)
|
23
22
|
indexer.execute(person_id)
|
24
|
-
expect(indexer.uri).to eq("https://default.base/audiences/#{audience_id}/people/#{person_id}/memberships.xml
|
23
|
+
expect(indexer.uri).to eq("https://default.base/audiences/#{audience_id}/people/#{person_id}/memberships.xml")
|
25
24
|
end
|
26
25
|
|
27
26
|
it "returns a uri for an index of memberships with custom paging" do
|
28
|
-
stub_request(:get, "https://test:password@default.base/audiences/1/people/123/memberships.xml?page=12&per_page=200").
|
29
|
-
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
27
|
+
stub_request(:get, "https://test:password@default.base/audiences/1/people/123/memberships.xml?page=12&per_page=200").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
30
28
|
indexer = Index.new(session)
|
31
29
|
indexer.execute(person_id, nil, options)
|
32
|
-
expect(indexer.uri).to eq("https://default.base/audiences/#{audience_id}/people/#{person_id}/memberships.xml
|
30
|
+
expect(indexer.uri).to eq("https://default.base/audiences/#{audience_id}/people/#{person_id}/memberships.xml")
|
33
31
|
end
|
34
32
|
|
35
33
|
it "returns a uri for an index of memberships by list id" do
|
36
|
-
stub_request(:get, "https://test:password@default.base/audiences/1/people/123/lists/456/memberships.xml
|
37
|
-
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
34
|
+
stub_request(:get, "https://test:password@default.base/audiences/1/people/123/lists/456/memberships.xml").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
38
35
|
indexer = Index.new(session)
|
39
36
|
indexer.execute(person_id, list_id)
|
40
|
-
expect(indexer.uri).to eq("https://default.base/audiences/#{audience_id}/people/#{person_id}/lists/#{list_id}/memberships.xml
|
37
|
+
expect(indexer.uri).to eq("https://default.base/audiences/#{audience_id}/people/#{person_id}/lists/#{list_id}/memberships.xml")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe Count do
|
42
|
+
it "builds a people count URI" do
|
43
|
+
stub_request(:get, "https://test:password@default.base/audiences/1/people/123/memberships/count.xml").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
44
|
+
counter = Count.new(session)
|
45
|
+
counter.execute(person_id)
|
46
|
+
expect(counter.uri).to eq("https://default.base/audiences/#{audience_id}/people/#{person_id}/memberships/count.xml")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "builds a lists count URI" do
|
50
|
+
stub_request(:get, "https://test:password@default.base/audiences/1/lists/456/memberships/count.xml").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
51
|
+
counter = Count.new(session)
|
52
|
+
counter.execute(nil, list_id)
|
53
|
+
expect(counter.uri).to eq("https://default.base/audiences/#{audience_id}/lists/#{list_id}/memberships/count.xml")
|
54
|
+
|
41
55
|
end
|
42
56
|
end
|
43
57
|
end
|
@@ -22,17 +22,16 @@ module StreamSend
|
|
22
22
|
|
23
23
|
describe Index do
|
24
24
|
it "returns a uri for a person index" do
|
25
|
-
stub_request(:get, "https://test:password@default.base/audiences/1/people.xml
|
25
|
+
stub_request(:get, "https://test:password@default.base/audiences/1/people.xml").
|
26
26
|
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
27
27
|
indexer.execute
|
28
|
-
expect(indexer.uri).to eq("https://default.base/audiences/1/people.xml
|
28
|
+
expect(indexer.uri).to eq("https://default.base/audiences/1/people.xml")
|
29
29
|
end
|
30
30
|
|
31
31
|
it "returns a uri with custom paging" do
|
32
|
-
stub_request(:get, "https://test:password@default.base/audiences/1/people.xml?page=12&per_page=222").
|
33
|
-
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
32
|
+
stub_request(:get, "https://test:password@default.base/audiences/1/people.xml?page=12&per_page=222").to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
34
33
|
indexer.execute(nil, options)
|
35
|
-
expect(indexer.uri).to eq("https://default.base/audiences/1/people.xml
|
34
|
+
expect(indexer.uri).to eq("https://default.base/audiences/1/people.xml")
|
36
35
|
end
|
37
36
|
|
38
37
|
it "returns a uri with a scoping by list" do
|
@@ -46,17 +45,17 @@ module StreamSend
|
|
46
45
|
describe Click do
|
47
46
|
let(:clicker){ StreamSend::Api::Person::Click.new(session) }
|
48
47
|
it "creates a uri for blast click people" do
|
49
|
-
stub_request(:get, "https://test:password@default.base/blasts/1/clicks/people.xml
|
48
|
+
stub_request(:get, "https://test:password@default.base/blasts/1/clicks/people.xml").
|
50
49
|
to_return(:status => 200, :body => xml, :headers => {'Content-Type' => 'text/xml'})
|
51
50
|
clicker.execute(blast_id)
|
52
|
-
expect(clicker.uri).to eq("https://default.base/blasts/#{blast_id}/clicks/people.xml
|
51
|
+
expect(clicker.uri).to eq("https://default.base/blasts/#{blast_id}/clicks/people.xml")
|
53
52
|
end
|
54
53
|
|
55
54
|
it "creates uri for specific link click people" do
|
56
|
-
stub_request(:get, "https://test:password@default.base/blasts/1/links/1/clicks/people.xml
|
55
|
+
stub_request(:get, "https://test:password@default.base/blasts/1/links/1/clicks/people.xml").
|
57
56
|
to_return(:status => 200, :body => xml, :headers => {"Content-type" => "text/xml"})
|
58
57
|
clicker.execute(blast_id, link_id)
|
59
|
-
expect(clicker.uri).to eq("https://default.base/blasts/#{blast_id}/links/#{link_id}/clicks/people.xml
|
58
|
+
expect(clicker.uri).to eq("https://default.base/blasts/#{blast_id}/links/#{link_id}/clicks/people.xml")
|
60
59
|
end
|
61
60
|
end
|
62
61
|
|
@@ -67,10 +66,10 @@ module StreamSend
|
|
67
66
|
let(:blast_id){ 1 }
|
68
67
|
|
69
68
|
it "creates a uri for blast view people" do
|
70
|
-
stub_request(:get, "https://test:password@default.base/blasts/1/views/people.xml
|
69
|
+
stub_request(:get, "https://test:password@default.base/blasts/1/views/people.xml").
|
71
70
|
to_return(:status => 200, :body => xml, :headers => {"Content-type" => "text/xml"})
|
72
71
|
peopler.execute(blast_id)
|
73
|
-
expect(peopler.uri).to eq("https://default.base/blasts/#{blast_id}/views/people.xml
|
72
|
+
expect(peopler.uri).to eq("https://default.base/blasts/#{blast_id}/views/people.xml")
|
74
73
|
end
|
75
74
|
end
|
76
75
|
|