adn-reborn 0.4.1
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 +7 -0
- data/.gitignore +20 -0
- data/.travis.yml +8 -0
- data/CHANGELOG.md +34 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +25 -0
- data/LICENSE +16 -0
- data/README.md +19 -0
- data/Rakefile +17 -0
- data/adn-reborn.gemspec +19 -0
- data/lib/adn-reborn/api/file.rb +36 -0
- data/lib/adn-reborn/api/filter.rb +10 -0
- data/lib/adn-reborn/api/message.rb +29 -0
- data/lib/adn-reborn/api/post.rb +51 -0
- data/lib/adn-reborn/api/response.rb +19 -0
- data/lib/adn-reborn/api/stream.rb +10 -0
- data/lib/adn-reborn/api/subscription.rb +11 -0
- data/lib/adn-reborn/api/token.rb +12 -0
- data/lib/adn-reborn/api/user.rb +19 -0
- data/lib/adn-reborn/api.rb +62 -0
- data/lib/adn-reborn/constants.rb +18 -0
- data/lib/adn-reborn/file.rb +62 -0
- data/lib/adn-reborn/message.rb +76 -0
- data/lib/adn-reborn/post.rb +76 -0
- data/lib/adn-reborn/recipes/broadcast_message_builder.rb +103 -0
- data/lib/adn-reborn/recipes.rb +5 -0
- data/lib/adn-reborn/user.rb +103 -0
- data/lib/adn-reborn/version.rb +9 -0
- data/lib/adn-reborn.rb +69 -0
- data/spec/adn-reborn/api/file_spec.rb +73 -0
- data/spec/adn-reborn/api/filter_spec.rb +9 -0
- data/spec/adn-reborn/api/message_spec.rb +73 -0
- data/spec/adn-reborn/api/post_spec.rb +147 -0
- data/spec/adn-reborn/api/response_spec.rb +13 -0
- data/spec/adn-reborn/api/stream_spec.rb +9 -0
- data/spec/adn-reborn/api/subscription_spec.rb +9 -0
- data/spec/adn-reborn/api/token_spec.rb +23 -0
- data/spec/adn-reborn/api/user_spec.rb +27 -0
- data/spec/adn-reborn/file_spec.rb +103 -0
- data/spec/adn-reborn/message_spec.rb +152 -0
- data/spec/adn-reborn/post_spec.rb +147 -0
- data/spec/adn-reborn/recipes/broadcast_message_builder_spec.rb +179 -0
- data/spec/adn-reborn/user_spec.rb +115 -0
- data/spec/adn-reborn_spec.rb +42 -0
- data/spec/fixtures/post.json +88 -0
- data/spec/fixtures/user.json +70 -0
- data/spec/spec_helper.rb +30 -0
- metadata +141 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative '../../spec_helper'
|
4
|
+
|
5
|
+
describe ADNReborn::API::Token do
|
6
|
+
subject { ADNReborn::API::Token }
|
7
|
+
|
8
|
+
describe "current" do
|
9
|
+
it "does not return the current token if it has an error" do
|
10
|
+
ADNReborn::API.stub(
|
11
|
+
:get, ADNReborn::API::Response.new("error" => "error message")) do
|
12
|
+
subject.current.must_equal nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "retrieves the current token" do
|
17
|
+
ADNReborn::API.stub(
|
18
|
+
:get, ADNReborn::API::Response.new("data" => "example_token")) do
|
19
|
+
subject.current.must_equal "example_token"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative '../../spec_helper'
|
4
|
+
|
5
|
+
describe ADNReborn::API::User do
|
6
|
+
subject { ADNReborn::API::User }
|
7
|
+
|
8
|
+
let(:base_path) { '/stream/0/users/' }
|
9
|
+
|
10
|
+
describe "retrieve" do
|
11
|
+
it "retrieves the user" do
|
12
|
+
arg(:get) { subject.retrieve(55).must_equal base_path + "55" }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "following" do
|
17
|
+
it "retrieves the following list" do
|
18
|
+
arg(:get) { subject.following(44).must_equal base_path + "44/following" }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "followers" do
|
23
|
+
it "retrieves the followers list" do
|
24
|
+
arg(:get) { subject.following(66).must_equal base_path + "66/following" }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative '../spec_helper'
|
4
|
+
|
5
|
+
def d(data)
|
6
|
+
{ 'data' => data }
|
7
|
+
end
|
8
|
+
|
9
|
+
describe ADNReborn::File do
|
10
|
+
subject { ADNReborn::File }
|
11
|
+
|
12
|
+
let(:file) { subject.new(file_data) }
|
13
|
+
let(:example_user) { { username: 'peterhellberg' } }
|
14
|
+
let(:file_data) {{
|
15
|
+
created_at: '1999-12-31T23:59:59Z',
|
16
|
+
id: 10001,
|
17
|
+
user: example_user,
|
18
|
+
file_token: "abc123",
|
19
|
+
sha1: "d5e7c7a123108739a28d721eb34133600a70a7fa",
|
20
|
+
name: "foo.txt",
|
21
|
+
source: { link: "https://alpha.app.net", name: "Alpha" },
|
22
|
+
url: "https://adn-uf-01.s3.amazonaws.com/adn-uf-01/really_long_filepath",
|
23
|
+
kind: "other",
|
24
|
+
total_size: 2248,
|
25
|
+
url_expires: "2013-12-14T02:00:00Z",
|
26
|
+
size: 2248,
|
27
|
+
type: "net.app.testing",
|
28
|
+
public: false,
|
29
|
+
mime_type: "text/plain",
|
30
|
+
complete: true
|
31
|
+
}}
|
32
|
+
|
33
|
+
describe "upload_file" do
|
34
|
+
it "creates a message via the API" do
|
35
|
+
ADNReborn::API::File.stub(:create, ADNReborn::API::Response.new(d(file_data))) do
|
36
|
+
m = subject.upload_file("foo.txt", {type: "net.app.testing"})
|
37
|
+
m.type.must_equal 'net.app.testing'
|
38
|
+
m.name.must_equal 'foo.txt'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "initialize" do
|
44
|
+
it "populates the accessors using the passed in hash" do
|
45
|
+
m = subject.new id: 123
|
46
|
+
m.id.must_equal 123
|
47
|
+
end
|
48
|
+
|
49
|
+
it "populates the accessors based on the passed in id" do
|
50
|
+
ADNReborn::API::File.stub(:by_id, ->(i){ d({ "total_size" => 1234}) }) do
|
51
|
+
f = subject.new 123
|
52
|
+
f.total_size.must_equal 1234
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "details" do
|
58
|
+
it "returns the details for the file" do
|
59
|
+
file.details.keys.must_equal [
|
60
|
+
"created_at",
|
61
|
+
"id",
|
62
|
+
"user",
|
63
|
+
"file_token",
|
64
|
+
"sha1",
|
65
|
+
"name",
|
66
|
+
"source",
|
67
|
+
"url",
|
68
|
+
"kind",
|
69
|
+
"total_size",
|
70
|
+
"url_expires",
|
71
|
+
"size",
|
72
|
+
"type",
|
73
|
+
"public",
|
74
|
+
"mime_type",
|
75
|
+
"complete"
|
76
|
+
]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "created_at" do
|
81
|
+
it "returns the date and time the message was created" do
|
82
|
+
file.created_at.to_s.must_equal '1999-12-31T23:59:59+00:00'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "user" do
|
87
|
+
it "returns the user" do
|
88
|
+
file.user.username.must_equal 'peterhellberg'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "delete" do
|
93
|
+
it "deletes the file via the API and returns the file" do
|
94
|
+
delete_stub = ->(id){
|
95
|
+
ADNReborn::API::Response.new("data" => { "id" => id })
|
96
|
+
}
|
97
|
+
|
98
|
+
ADNReborn::API::File.stub(:delete, delete_stub) do
|
99
|
+
file.delete.id.must_equal 10001
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative '../spec_helper'
|
4
|
+
|
5
|
+
def d(data)
|
6
|
+
{ 'data' => data }
|
7
|
+
end
|
8
|
+
|
9
|
+
describe ADNReborn::Message do
|
10
|
+
subject { ADNReborn::Message }
|
11
|
+
|
12
|
+
let(:empty_message) do
|
13
|
+
subject.new({})
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:message_with_id) do
|
17
|
+
subject.new({
|
18
|
+
channel_id: '456',
|
19
|
+
message_id: '123'
|
20
|
+
})
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:msg) do
|
24
|
+
subject.new(message_data)
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:example_user) do
|
28
|
+
{
|
29
|
+
username: 'peterhellberg'
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
let(:message_data) {
|
34
|
+
{
|
35
|
+
created_at: '1999-12-31T23:59:59Z',
|
36
|
+
entities: {},
|
37
|
+
html: '<b>The sky above the port…</b>',
|
38
|
+
id: 10001,
|
39
|
+
channel_id: 65432,
|
40
|
+
num_replies: 1,
|
41
|
+
reply_to: 66,
|
42
|
+
source: { link: "https://alpha.app.net", name: "Alpha" },
|
43
|
+
text: "The sky above the port…",
|
44
|
+
thread_id: "301856",
|
45
|
+
user: example_user
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
describe "send_message" do
|
50
|
+
it "creates a message via the API" do
|
51
|
+
api_response = ADNReborn::API::Response.new(d(message_data))
|
52
|
+
|
53
|
+
ADNReborn::API::Message.stub(:create, api_response) do
|
54
|
+
m = subject.send_message({})
|
55
|
+
m.text.must_equal 'The sky above the port…'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "initialize" do
|
61
|
+
it "populates the accessors using the passed in hash" do
|
62
|
+
m = subject.new text: 'foo', id: 123, channel_id: 456
|
63
|
+
m.text.must_equal 'foo'
|
64
|
+
end
|
65
|
+
|
66
|
+
# TODO: Change this behavior (Add a find method instead)
|
67
|
+
it "populates the accessors based on the passed in id" do
|
68
|
+
by_id = ->(c_id, i){ d({ "text" => 'bar'}) }
|
69
|
+
|
70
|
+
ADNReborn::API::Message.stub(:by_id, by_id) do
|
71
|
+
m = subject.new id: 123, channel_id: 456
|
72
|
+
m.text.must_equal 'bar'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "details" do
|
78
|
+
it "returns the details for the message" do
|
79
|
+
msg.details.keys.must_equal [
|
80
|
+
"created_at", "entities", "html",
|
81
|
+
"id", "channel_id", "num_replies", "reply_to",
|
82
|
+
"source", "text", "thread_id", "user"
|
83
|
+
]
|
84
|
+
end
|
85
|
+
|
86
|
+
it "returns the message from the api if it has no id" do
|
87
|
+
by_id = ->(c_id, i){ d({ "id" => i, "channel_id" => c_id}) }
|
88
|
+
|
89
|
+
ADNReborn::API::Message.stub(:by_id, by_id) do
|
90
|
+
message_with_id.details.must_equal({
|
91
|
+
"data" => {
|
92
|
+
"id" => '123',
|
93
|
+
"channel_id" => '456'
|
94
|
+
}
|
95
|
+
})
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "created_at" do
|
101
|
+
it "returns the date and time the message was created" do
|
102
|
+
msg.created_at.to_s.must_equal '1999-12-31T23:59:59+00:00'
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "user" do
|
107
|
+
it "returns the user" do
|
108
|
+
msg.user.username.must_equal 'peterhellberg'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "delete" do
|
113
|
+
it "deletes the message via the API and returns the message" do
|
114
|
+
delete_stub = ->(c_id, id){
|
115
|
+
ADNReborn::API::Response.new("data" => {
|
116
|
+
"channel_id" => c_id,
|
117
|
+
"id" => id
|
118
|
+
})
|
119
|
+
}
|
120
|
+
|
121
|
+
ADNReborn::API::Message.stub(:delete, delete_stub) do
|
122
|
+
msg.delete.id.must_equal 10001
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "set_values" do
|
128
|
+
it "sets values with accessors" do
|
129
|
+
m = empty_message
|
130
|
+
|
131
|
+
m.set_values(message_data)
|
132
|
+
|
133
|
+
m.entities.must_equal message_data[:entities]
|
134
|
+
m.html.must_equal message_data[:html]
|
135
|
+
m.id.must_equal message_data[:id]
|
136
|
+
m.num_replies.must_equal message_data[:num_replies]
|
137
|
+
m.reply_to.must_equal message_data[:reply_to]
|
138
|
+
m.source.must_equal message_data[:source]
|
139
|
+
m.text.must_equal message_data[:text]
|
140
|
+
m.thread_id.must_equal message_data[:thread_id]
|
141
|
+
|
142
|
+
m.created_at.must_equal DateTime.parse(message_data[:created_at])
|
143
|
+
|
144
|
+
m.user.username.must_equal message_data[:user][:username]
|
145
|
+
end
|
146
|
+
|
147
|
+
it "does not set arbitrary values" do
|
148
|
+
m = subject.new foo: 'bar'
|
149
|
+
-> { m.foo }.must_raise NoMethodError
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative '../spec_helper'
|
4
|
+
|
5
|
+
def d(data)
|
6
|
+
{ 'data' => data }
|
7
|
+
end
|
8
|
+
|
9
|
+
describe ADNReborn::Post do
|
10
|
+
subject { ADNReborn::Post }
|
11
|
+
|
12
|
+
let(:empty_post) { subject.new({}) }
|
13
|
+
let(:post_with_id) { subject.new({ post_id: 123 }) }
|
14
|
+
let(:post) { subject.new(post_data) }
|
15
|
+
|
16
|
+
let(:example_user) { { username: 'peterhellberg' } }
|
17
|
+
let(:post_data) {
|
18
|
+
{
|
19
|
+
created_at: '1999-12-31T23:59:59Z',
|
20
|
+
entities: {},
|
21
|
+
html: '<b>The sky above the port…</b>',
|
22
|
+
id: 10001,
|
23
|
+
num_replies: 1,
|
24
|
+
reply_to: 66,
|
25
|
+
source: { link: "https://alpha.app.net", name: "Alpha" },
|
26
|
+
text: "The sky above the port…",
|
27
|
+
thread_id: "301856",
|
28
|
+
user: example_user
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
describe "send_post" do
|
33
|
+
it "creates a post via the API" do
|
34
|
+
ADNReborn::API::Post.stub(:create, ADNReborn::API::Response.new(d(post_data))) do
|
35
|
+
p = subject.send_post({})
|
36
|
+
p.text.must_equal 'The sky above the port…'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "initialize" do
|
42
|
+
it "populates the accessors using the passed in hash" do
|
43
|
+
p = subject.new text: 'foo', id: 123
|
44
|
+
p.text.must_equal 'foo'
|
45
|
+
end
|
46
|
+
|
47
|
+
# TODO: Change this behavior (Add a find method instead)
|
48
|
+
it "populates the accessors based on the passed in id" do
|
49
|
+
ADNReborn::API::Post.stub(:by_id, ->(i){ d({ "text" => 'bar'}) }) do
|
50
|
+
p = subject.new 456
|
51
|
+
p.text.must_equal 'bar'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "details" do
|
57
|
+
it "returns the details for the post" do
|
58
|
+
post.details.keys.must_equal [
|
59
|
+
"created_at", "entities", "html",
|
60
|
+
"id", "num_replies", "reply_to",
|
61
|
+
"source", "text", "thread_id", "user"
|
62
|
+
]
|
63
|
+
end
|
64
|
+
|
65
|
+
it "returns the post from the api if it has no id" do
|
66
|
+
|
67
|
+
ADNReborn::API::Post.stub(:by_id, ->(i){ d({ "id" => i}) }) do
|
68
|
+
post_with_id.details.
|
69
|
+
must_equal({ "data" => { "id" => 123 } })
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "created_at" do
|
75
|
+
it "returns the date and time the post was created" do
|
76
|
+
post.created_at.to_s.must_equal '1999-12-31T23:59:59+00:00'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "user" do
|
81
|
+
it "returns the user" do
|
82
|
+
post.user.username.must_equal 'peterhellberg'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "reply_to_post" do
|
87
|
+
it "returns the post that was replied to" do
|
88
|
+
ADNReborn::API::Post.stub(:by_id, ->(id){
|
89
|
+
ADNReborn::API::Response.new("data" => { "id" => id })
|
90
|
+
}) do
|
91
|
+
post.reply_to_post.id.must_equal 66
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "replies" do
|
97
|
+
it "returns a list of posts" do
|
98
|
+
response = ADNReborn::API::Response.new(
|
99
|
+
"data" => [{ text: "foo"}, {text: "bar"}])
|
100
|
+
|
101
|
+
ADNReborn::API::Post.stub(:replies, ->(*a){ response }) do
|
102
|
+
r = post.replies
|
103
|
+
r.size.must_equal 2
|
104
|
+
r[0].text.must_equal 'foo'
|
105
|
+
r[1].text.must_equal 'bar'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "delete" do
|
111
|
+
it "deletes the post via the API and returns a new post" do
|
112
|
+
delete_stub = ->(id){
|
113
|
+
ADNReborn::API::Response.new("data" => { "id" => id*2 })
|
114
|
+
}
|
115
|
+
|
116
|
+
ADNReborn::API::Post.stub(:delete, delete_stub) do
|
117
|
+
post.delete.id.must_equal 20002
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "set_values" do
|
123
|
+
it "sets values with accessors" do
|
124
|
+
p = empty_post
|
125
|
+
|
126
|
+
p.set_values(post_data)
|
127
|
+
|
128
|
+
p.entities.must_equal post_data[:entities]
|
129
|
+
p.html.must_equal post_data[:html]
|
130
|
+
p.id.must_equal post_data[:id]
|
131
|
+
p.num_replies.must_equal post_data[:num_replies]
|
132
|
+
p.reply_to.must_equal post_data[:reply_to]
|
133
|
+
p.source.must_equal post_data[:source]
|
134
|
+
p.text.must_equal post_data[:text]
|
135
|
+
p.thread_id.must_equal post_data[:thread_id]
|
136
|
+
|
137
|
+
p.created_at.must_equal DateTime.parse(post_data[:created_at])
|
138
|
+
|
139
|
+
p.user.username.must_equal post_data[:user][:username]
|
140
|
+
end
|
141
|
+
|
142
|
+
it "does not set arbitrary values" do
|
143
|
+
p = subject.new foo: 'bar'
|
144
|
+
-> { p.foo }.must_raise NoMethodError
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative '../../spec_helper'
|
4
|
+
|
5
|
+
describe ADNReborn::Recipes::BroadcastMessageBuilder do
|
6
|
+
subject { ADNReborn::Recipes::BroadcastMessageBuilder.new }
|
7
|
+
|
8
|
+
describe "annotations" do
|
9
|
+
describe "with a read more link" do
|
10
|
+
it "generates a crosspost annotation" do
|
11
|
+
subject.headline = "foo"
|
12
|
+
subject.read_more_link = "http://app.net"
|
13
|
+
subject.annotations.must_equal([
|
14
|
+
{
|
15
|
+
type: "net.app.core.broadcast.message.metadata",
|
16
|
+
value: { subject: "foo" }
|
17
|
+
},
|
18
|
+
{
|
19
|
+
type: "net.app.core.crosspost",
|
20
|
+
value: { canonical_url: "http://app.net" }
|
21
|
+
}
|
22
|
+
])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "with only a headline" do
|
27
|
+
it "generates a message metadata annotation" do
|
28
|
+
subject.headline = "foo"
|
29
|
+
subject.annotations.must_equal([
|
30
|
+
{
|
31
|
+
type: "net.app.core.broadcast.message.metadata",
|
32
|
+
value: { subject: "foo" }
|
33
|
+
},
|
34
|
+
])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "with a photo" do
|
39
|
+
it "generates an oembed annotation" do
|
40
|
+
api_response = ADNReborn::API::Response.new({
|
41
|
+
"data" => {
|
42
|
+
id: "1",
|
43
|
+
file_token: "1234"
|
44
|
+
}
|
45
|
+
})
|
46
|
+
|
47
|
+
ADNReborn::API::File.stub(:create, api_response) do
|
48
|
+
subject.headline = "foo"
|
49
|
+
subject.photo = "foo.jpg"
|
50
|
+
subject.annotations.must_equal([
|
51
|
+
{
|
52
|
+
type: "net.app.core.broadcast.message.metadata",
|
53
|
+
value: { subject: "foo" }
|
54
|
+
},
|
55
|
+
{
|
56
|
+
type: "net.app.core.oembed",
|
57
|
+
value: { "+net.app.core.file" => {
|
58
|
+
file_id: "1",
|
59
|
+
file_token: "1234",
|
60
|
+
format: "oembed"
|
61
|
+
}}
|
62
|
+
}
|
63
|
+
])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "with an attachment" do
|
69
|
+
it "generates an attachment annotation" do
|
70
|
+
api_response = ADNReborn::API::Response.new({
|
71
|
+
"data" => {
|
72
|
+
id: "1",
|
73
|
+
file_token: "1234"
|
74
|
+
}
|
75
|
+
})
|
76
|
+
|
77
|
+
ADNReborn::API::File.stub(:create, api_response) do
|
78
|
+
subject.headline = "foo"
|
79
|
+
subject.attachment = "foo.txt"
|
80
|
+
subject.annotations.must_equal([
|
81
|
+
{
|
82
|
+
type: "net.app.core.broadcast.message.metadata",
|
83
|
+
value: { subject: "foo" }
|
84
|
+
},
|
85
|
+
{
|
86
|
+
type: "net.app.core.attachments",
|
87
|
+
value: { "+net.app.core.file_list" => [
|
88
|
+
{
|
89
|
+
file_id: "1",
|
90
|
+
file_token: "1234",
|
91
|
+
format: "metadata"
|
92
|
+
}
|
93
|
+
]}
|
94
|
+
}
|
95
|
+
])
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "message" do
|
102
|
+
describe "with text" do
|
103
|
+
it "includes the extra text" do
|
104
|
+
subject.headline = "foo"
|
105
|
+
subject.text = "bar"
|
106
|
+
subject.message[:text].must_equal("bar")
|
107
|
+
subject.message[:machine_only].must_equal(nil)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "without text" do
|
112
|
+
it "generates a machine only message" do
|
113
|
+
subject.headline = "foo"
|
114
|
+
subject.message[:text].must_be_nil
|
115
|
+
subject.message[:machine_only].must_equal(true)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "includes the annotations" do
|
119
|
+
subject.headline = "bar"
|
120
|
+
subject.message[:annotations].must_equal([
|
121
|
+
{
|
122
|
+
type: "net.app.core.broadcast.message.metadata",
|
123
|
+
value: { subject: "bar" }
|
124
|
+
},
|
125
|
+
])
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
it "allows you to parse links" do
|
130
|
+
subject.headline = "foo"
|
131
|
+
subject.parse_links = true
|
132
|
+
subject.message[:entities].must_equal({
|
133
|
+
parse_links: true,
|
134
|
+
parse_markdown_links: false
|
135
|
+
})
|
136
|
+
end
|
137
|
+
|
138
|
+
it "parses links when you ask for parsing markdown links" do
|
139
|
+
subject.headline = "foo"
|
140
|
+
subject.parse_markdown_links = true
|
141
|
+
subject.message[:entities].must_equal({
|
142
|
+
parse_links: true,
|
143
|
+
parse_markdown_links: true
|
144
|
+
})
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
describe "send" do
|
149
|
+
it "calls the api with the message" do
|
150
|
+
headline = "foo"
|
151
|
+
channel_id = "123"
|
152
|
+
response_body = %Q{{
|
153
|
+
"meta": {
|
154
|
+
"code": 200
|
155
|
+
},
|
156
|
+
"data": {
|
157
|
+
"annotations": [
|
158
|
+
{
|
159
|
+
"type": "net.app.core.broadcast.message.metadata",
|
160
|
+
"value": {"subject": "#{headline}"}
|
161
|
+
}
|
162
|
+
],
|
163
|
+
"channel_id": "#{channel_id}"
|
164
|
+
}
|
165
|
+
}}
|
166
|
+
|
167
|
+
response = OpenStruct.new(:body => response_body)
|
168
|
+
|
169
|
+
ADNReborn::HTTP.stub(:request, response) do
|
170
|
+
subject.headline = headline
|
171
|
+
subject.channel_id = channel_id
|
172
|
+
|
173
|
+
message = subject.send
|
174
|
+
message.channel_id.must_equal channel_id
|
175
|
+
message.annotations[0]["value"]["subject"].must_equal headline
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|