opentok 0.1.3 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +16 -2
- data/.travis.yml +6 -0
- data/.yardopts +1 -0
- data/CONTRIBUTING.md +47 -0
- data/DEVELOPING.md +91 -0
- data/LICENSE +19 -5
- data/README.md +170 -53
- data/Rakefile +10 -5
- data/doc/OpenTok.html +411 -0
- data/doc/OpenTok/Archive.html +1320 -0
- data/doc/OpenTok/ArchiveList.html +216 -0
- data/doc/OpenTok/Archives.html +1028 -0
- data/doc/OpenTok/Client.html +695 -0
- data/doc/OpenTok/OpenTok.html +1046 -0
- data/doc/OpenTok/OpenTokArchiveError.html +142 -0
- data/doc/OpenTok/OpenTokAuthenticationError.html +143 -0
- data/doc/OpenTok/OpenTokError.html +138 -0
- data/doc/OpenTok/Session.html +665 -0
- data/doc/OpenTok/TokenGenerator.html +204 -0
- data/doc/OpenTok/TokenGenerator/ClassMethods.html +187 -0
- data/doc/README.md +15 -0
- data/doc/_index.html +182 -0
- data/doc/class_list.html +54 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file.README.html +87 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +87 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +178 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +227 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/opentok.rb +3 -14
- data/lib/opentok/archive.rb +92 -0
- data/lib/opentok/archive_list.rb +17 -0
- data/lib/opentok/archives.rb +120 -0
- data/lib/opentok/client.rb +125 -0
- data/lib/opentok/constants.rb +5 -0
- data/lib/opentok/exceptions.rb +10 -0
- data/lib/opentok/opentok.rb +174 -0
- data/lib/opentok/session.rb +76 -0
- data/lib/opentok/token_generator.rb +101 -0
- data/lib/opentok/version.rb +4 -0
- data/opentok.gemspec +29 -22
- data/sample/Archiving/Gemfile +4 -0
- data/sample/Archiving/README.md +212 -0
- data/sample/Archiving/archiving_sample.rb +80 -0
- data/sample/Archiving/public/css/sample.css +22 -0
- data/sample/Archiving/public/img/archiving-off.png +0 -0
- data/sample/Archiving/public/img/archiving-on-idle.png +0 -0
- data/sample/Archiving/public/img/archiving-on-message.png +0 -0
- data/sample/Archiving/public/js/host.js +37 -0
- data/sample/Archiving/public/js/participant.js +13 -0
- data/sample/Archiving/views/history.erb +65 -0
- data/sample/Archiving/views/host.erb +69 -0
- data/sample/Archiving/views/index.erb +48 -0
- data/sample/Archiving/views/layout.erb +29 -0
- data/sample/Archiving/views/participant.erb +55 -0
- data/sample/HelloWorld/Gemfile +4 -0
- data/sample/HelloWorld/README.md +123 -0
- data/sample/HelloWorld/hello_world.rb +27 -0
- data/sample/HelloWorld/public/js/helloworld.js +32 -0
- data/sample/HelloWorld/views/index.erb +21 -0
- data/spec/cassettes/OpenTok_Archives/should_create_archives.yml +48 -0
- data/spec/cassettes/OpenTok_Archives/should_create_named_archives.yml +49 -0
- data/spec/cassettes/OpenTok_Archives/should_delete_an_archive_by_id.yml +32 -0
- data/spec/cassettes/OpenTok_Archives/should_find_archives_by_id.yml +46 -0
- data/spec/cassettes/OpenTok_Archives/should_stop_archives.yml +48 -0
- data/spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_all_archives.yml +104 -0
- data/spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_archives_with_an_offset.yml +71 -0
- data/spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_count_number_of_archives.yml +60 -0
- data/spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_part_of_the_archives_when_using_offset_and_count.yml +82 -0
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_default_sessions.yml +39 -0
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_relayed_media_sessions.yml +39 -0
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_relayed_media_sessions_with_a_location_hint.yml +39 -0
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_routed_media_sessions.yml +39 -0
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_routed_media_sessions_for_invalid_media_modes.yml +39 -0
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_routed_media_sessions_with_a_location_hint.yml +39 -0
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_sessions_with_a_location_hint.yml +39 -0
- data/spec/matchers/token.rb +48 -0
- data/spec/opentok/archives_spec.rb +91 -0
- data/spec/opentok/opentok_spec.rb +144 -0
- data/spec/opentok/session_spec.rb +71 -0
- data/spec/shared/opentok_generates_tokens.rb +62 -0
- data/spec/shared/session_generates_tokens.rb +63 -0
- data/spec/spec_helper.rb +6 -7
- metadata +197 -59
- data/.rspec +0 -3
- data/CHANGES +0 -33
- data/doc/reference.md +0 -122
- data/lib/open_tok/archive.rb +0 -53
- data/lib/open_tok/archive_timeline_event.rb +0 -22
- data/lib/open_tok/archive_video_resource.rb +0 -28
- data/lib/open_tok/exception.rb +0 -50
- data/lib/open_tok/open_tok_sdk.rb +0 -198
- data/lib/open_tok/request.rb +0 -63
- data/lib/open_tok/role_constants.rb +0 -18
- data/lib/open_tok/session.rb +0 -25
- data/lib/open_tok/session_property_constants.rb +0 -30
- data/lib/open_tok/utils.rb +0 -10
- data/lib/open_tok/version.rb +0 -5
- data/sample/sample.rb +0 -26
- data/spec/cassettes/archives.yml +0 -83
- data/spec/cassettes/deleteArchive.yml +0 -91
- data/spec/cassettes/invalidSession.yml +0 -41
- data/spec/cassettes/session.yml +0 -46
- data/spec/cassettes/stitchArchive.yml +0 -42
- data/spec/opentok_exception_spec.rb +0 -38
- data/spec/opentok_spec.rb +0 -135
@@ -0,0 +1,91 @@
|
|
1
|
+
require "opentok/archives"
|
2
|
+
require "opentok/opentok"
|
3
|
+
require "opentok/version"
|
4
|
+
require "opentok/archive"
|
5
|
+
require "opentok/archive_list"
|
6
|
+
|
7
|
+
require "spec_helper"
|
8
|
+
|
9
|
+
describe OpenTok::Archives do
|
10
|
+
|
11
|
+
let(:api_key) { "123456" }
|
12
|
+
let(:api_secret) { "1234567890abcdef1234567890abcdef1234567890" }
|
13
|
+
let(:session_id) { "SESSIONID" }
|
14
|
+
let(:archive_name) { "ARCHIVE NAME" }
|
15
|
+
let(:started_archive_id) { "30b3ebf1-ba36-4f5b-8def-6f70d9986fe9" }
|
16
|
+
let(:findable_archive_id) { "f6e7ee58-d6cf-4a59-896b-6d56b158ec71" }
|
17
|
+
let(:deletable_archive_id) { "832641bf-5dbf-41a1-ad94-fea213e59a92" }
|
18
|
+
|
19
|
+
let(:opentok) { OpenTok::OpenTok.new api_key, api_secret }
|
20
|
+
let(:archives) { opentok.archives }
|
21
|
+
subject { archives }
|
22
|
+
|
23
|
+
it { should be_an_instance_of OpenTok::Archives }
|
24
|
+
|
25
|
+
it "should create archives", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
26
|
+
archive = archives.create session_id
|
27
|
+
expect(archive).to be_an_instance_of OpenTok::Archive
|
28
|
+
expect(archive.session_id).to eq session_id
|
29
|
+
expect(archive.id).not_to be_nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should create named archives", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
33
|
+
archive = archives.create session_id, :name => archive_name
|
34
|
+
expect(archive).to be_an_instance_of OpenTok::Archive
|
35
|
+
expect(archive.session_id).to eq session_id
|
36
|
+
expect(archive.name).to eq archive_name
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
it "should stop archives", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
41
|
+
archive = archives.stop_by_id started_archive_id
|
42
|
+
expect(archive).to be_an_instance_of OpenTok::Archive
|
43
|
+
expect(archive.status).to eq "stopped"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should find archives by id", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
47
|
+
archive = archives.find findable_archive_id
|
48
|
+
expect(archive).to be_an_instance_of OpenTok::Archive
|
49
|
+
expect(archive.id).to eq findable_archive_id
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should delete an archive by id", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
53
|
+
success = archives.delete_by_id deletable_archive_id
|
54
|
+
expect(success).to be_true
|
55
|
+
# expect(archive.status).to eq ""
|
56
|
+
end
|
57
|
+
|
58
|
+
# TODO: context "with a session that has no participants" do
|
59
|
+
# let(:session_id) { "" }
|
60
|
+
# it "should refuse to create archives with appropriate error" do
|
61
|
+
# expect { archives.create session_id }.to raise_error
|
62
|
+
# end
|
63
|
+
# end
|
64
|
+
|
65
|
+
context "when many archives are created" do
|
66
|
+
it "should return all archives", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
67
|
+
archive_list = archives.all
|
68
|
+
expect(archive_list).to be_an_instance_of OpenTok::ArchiveList
|
69
|
+
expect(archive_list.total).to eq 6
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should return archives with an offset", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
73
|
+
archive_list = archives.all :offset => 3
|
74
|
+
expect(archive_list).to be_an_instance_of OpenTok::ArchiveList
|
75
|
+
expect(archive_list.count).to eq 3
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should return count number of archives", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
79
|
+
archive_list = archives.all :count => 2
|
80
|
+
expect(archive_list).to be_an_instance_of OpenTok::ArchiveList
|
81
|
+
expect(archive_list.count).to eq 2
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should return part of the archives when using offset and count", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
85
|
+
archive_list = archives.all :count => 4, :offset => 2
|
86
|
+
expect(archive_list).to be_an_instance_of OpenTok::ArchiveList
|
87
|
+
expect(archive_list.count).to eq 4
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
require "opentok/opentok"
|
2
|
+
require "opentok/version"
|
3
|
+
|
4
|
+
require "spec_helper"
|
5
|
+
require "shared/opentok_generates_tokens"
|
6
|
+
|
7
|
+
describe OpenTok::OpenTok do
|
8
|
+
|
9
|
+
let(:opentok) { OpenTok::OpenTok.new api_key, api_secret }
|
10
|
+
subject { opentok }
|
11
|
+
|
12
|
+
context "when initialized properly" do
|
13
|
+
|
14
|
+
let(:api_key) { "123456" }
|
15
|
+
let(:api_secret) { "1234567890abcdef1234567890abcdef1234567890" }
|
16
|
+
|
17
|
+
let(:default_api_url) { "https://api.opentok.com" }
|
18
|
+
|
19
|
+
it { should be_an_instance_of OpenTok::OpenTok }
|
20
|
+
|
21
|
+
it "should have an api_key property" do
|
22
|
+
expect(opentok.api_key).to eq api_key
|
23
|
+
end
|
24
|
+
|
25
|
+
it "has the default api_url set" do
|
26
|
+
expect(opentok.api_url).to eq default_api_url
|
27
|
+
end
|
28
|
+
|
29
|
+
include_examples "opentok generates tokens"
|
30
|
+
|
31
|
+
describe "#create_session" do
|
32
|
+
|
33
|
+
let(:location) { '12.34.56.78' }
|
34
|
+
|
35
|
+
it "creates default sessions", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
36
|
+
session = opentok.create_session
|
37
|
+
expect(session).to be_an_instance_of OpenTok::Session
|
38
|
+
# TODO: do we need to be any more specific about what a valid session_id looks like?
|
39
|
+
expect(session.session_id).to be_an_instance_of String
|
40
|
+
expect(session.media_mode).to eq :routed
|
41
|
+
expect(session.location).to eq nil
|
42
|
+
end
|
43
|
+
|
44
|
+
it "creates relayed media sessions", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
45
|
+
session = opentok.create_session :media_mode => :relayed
|
46
|
+
expect(session).to be_an_instance_of OpenTok::Session
|
47
|
+
expect(session.session_id).to be_an_instance_of String
|
48
|
+
expect(session.media_mode).to eq :relayed
|
49
|
+
expect(session.location).to eq nil
|
50
|
+
end
|
51
|
+
|
52
|
+
it "creates routed media sessions", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
53
|
+
session = opentok.create_session :media_mode => :routed
|
54
|
+
expect(session).to be_an_instance_of OpenTok::Session
|
55
|
+
expect(session.session_id).to be_an_instance_of String
|
56
|
+
expect(session.media_mode).to eq :routed
|
57
|
+
expect(session.location).to eq nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it "creates sessions with a location hint", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
61
|
+
session = opentok.create_session :location => location
|
62
|
+
expect(session).to be_an_instance_of OpenTok::Session
|
63
|
+
expect(session.session_id).to be_an_instance_of String
|
64
|
+
expect(session.media_mode).to eq :routed
|
65
|
+
expect(session.location).to eq location
|
66
|
+
end
|
67
|
+
|
68
|
+
it "creates relayed media sessions with a location hint", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
69
|
+
session = opentok.create_session :media_mode => :relayed, :location => location
|
70
|
+
expect(session).to be_an_instance_of OpenTok::Session
|
71
|
+
expect(session.session_id).to be_an_instance_of String
|
72
|
+
expect(session.media_mode).to eq :relayed
|
73
|
+
expect(session.location).to eq location
|
74
|
+
end
|
75
|
+
|
76
|
+
it "creates routed media sessions with a location hint", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
77
|
+
session = opentok.create_session :media_mode => :routed, :location => location
|
78
|
+
expect(session).to be_an_instance_of OpenTok::Session
|
79
|
+
expect(session.session_id).to be_an_instance_of String
|
80
|
+
expect(session.media_mode).to eq :routed
|
81
|
+
expect(session.location).to eq location
|
82
|
+
end
|
83
|
+
|
84
|
+
it "creates routed media sessions for invalid media modes", :vcr => { :erb => { :version => OpenTok::VERSION } } do
|
85
|
+
session = opentok.create_session :media_mode => :blah
|
86
|
+
expect(session).to be_an_instance_of OpenTok::Session
|
87
|
+
expect(session.session_id).to be_an_instance_of String
|
88
|
+
expect(session.media_mode).to eq :routed
|
89
|
+
expect(session.location).to eq nil
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
context "with an api_key that's a number" do
|
95
|
+
let(:api_key) { 123456 }
|
96
|
+
|
97
|
+
it { should be_an_instance_of(OpenTok::OpenTok) }
|
98
|
+
|
99
|
+
it "changes api_key property to string" do
|
100
|
+
expect(opentok.api_key).to eq api_key.to_s
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should have an api_url property" do
|
104
|
+
expect(opentok.api_url).to eq default_api_url
|
105
|
+
end
|
106
|
+
|
107
|
+
# TODO: maybe i don't need to run all the tests
|
108
|
+
include_examples "opentok generates tokens"
|
109
|
+
end
|
110
|
+
|
111
|
+
context "with an additional api_url" do
|
112
|
+
let(:api_url) { "http://example.opentok.com" }
|
113
|
+
let(:opentok) { OpenTok::OpenTok.new api_key, api_secret, api_url }
|
114
|
+
|
115
|
+
it { should be_an_instance_of(OpenTok::OpenTok) }
|
116
|
+
|
117
|
+
it "should have an api_url property" do
|
118
|
+
expect(opentok.api_url).to eq api_url
|
119
|
+
end
|
120
|
+
|
121
|
+
# TODO: i don't need to run all the tests, just a set that checks for the URL's effect
|
122
|
+
# include_examples "generates tokens"
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
# ah, the magic of duck typing. the errors raised don't have any specific description
|
128
|
+
# see discussion here: https://www.ruby-forum.com/topic/194593
|
129
|
+
context "when initialized improperly" do
|
130
|
+
context "with no arguments" do
|
131
|
+
subject { -> { @opentok = OpenTOk::OpenTok.new } }
|
132
|
+
it { should raise_error }
|
133
|
+
end
|
134
|
+
context "with just an api_key" do
|
135
|
+
subject { -> { @opentok = OpenTOk::OpenTok.new "123456" } }
|
136
|
+
it { should raise_error }
|
137
|
+
end
|
138
|
+
context "with arguments of the wrong type" do
|
139
|
+
subject { -> { @opentok = OpenTOk::OpenTok.new api_key: "123456" } }
|
140
|
+
it { should raise_error }
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require "opentok/session"
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "shared/session_generates_tokens"
|
5
|
+
|
6
|
+
describe OpenTok::Session do
|
7
|
+
|
8
|
+
let(:api_key) { "123456" }
|
9
|
+
let(:api_secret) { "1234567890abcdef1234567890abcdef1234567890" }
|
10
|
+
let(:session_id) { "SESSIONID" }
|
11
|
+
|
12
|
+
let(:session) { OpenTok::Session.new api_key, api_secret, session_id }
|
13
|
+
subject { session }
|
14
|
+
|
15
|
+
context "when initialized with no options" do
|
16
|
+
it { should be_an_instance_of OpenTok::Session }
|
17
|
+
it "should have an api_key property" do
|
18
|
+
expect(session.api_key).to eq api_key
|
19
|
+
end
|
20
|
+
it "should have an api_secret property" do
|
21
|
+
expect(session.api_secret).to eq api_secret
|
22
|
+
end
|
23
|
+
it "should have a session_id property" do
|
24
|
+
expect(session.session_id).to eq session_id
|
25
|
+
end
|
26
|
+
it "should be represented by session_id when coerced to a string" do
|
27
|
+
expect(session.to_s).to eq session_id
|
28
|
+
end
|
29
|
+
it "should have the default media mode of routed" do
|
30
|
+
expect(session.media_mode).to eq :routed
|
31
|
+
end
|
32
|
+
it "should not have a location value" do
|
33
|
+
expect(session.location).to eq nil
|
34
|
+
end
|
35
|
+
include_examples "session generates tokens"
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when initialized with options" do
|
39
|
+
let(:default_opts) { {} }
|
40
|
+
let(:session) { OpenTok::Session.new api_key, api_secret, session_id, default_opts }
|
41
|
+
|
42
|
+
it { should be_an_instance_of OpenTok::Session }
|
43
|
+
it "should have an api_key property" do
|
44
|
+
expect(session.api_key).to eq api_key
|
45
|
+
end
|
46
|
+
it "should have an api_secret property" do
|
47
|
+
expect(session.api_secret).to eq api_secret
|
48
|
+
end
|
49
|
+
it "should have a session_id property" do
|
50
|
+
expect(session.session_id).to eq session_id
|
51
|
+
end
|
52
|
+
it "should be represented by session_id when coerced to a string" do
|
53
|
+
expect(session.to_s).to eq session_id
|
54
|
+
end
|
55
|
+
it "should have media mode when set in options" do
|
56
|
+
opts = { :media_mode => :routed }
|
57
|
+
session = OpenTok::Session.new api_key, api_secret, session_id, opts
|
58
|
+
expect(session.media_mode).to eq :routed
|
59
|
+
opts = { :media_mode => :relayed }
|
60
|
+
session = OpenTok::Session.new api_key, api_secret, session_id, opts
|
61
|
+
expect(session.media_mode).to eq :relayed
|
62
|
+
end
|
63
|
+
it "should have a location value when set in options" do
|
64
|
+
opts = { :location => '12.34.56.78' }
|
65
|
+
session = OpenTok::Session.new api_key, api_secret, session_id, opts
|
66
|
+
expect(session.location).to eq opts[:location]
|
67
|
+
end
|
68
|
+
include_examples "session generates tokens"
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require "opentok/constants"
|
2
|
+
require "matchers/token"
|
3
|
+
|
4
|
+
shared_examples "opentok generates tokens" do
|
5
|
+
describe "#generate_token" do
|
6
|
+
# these must be known quantities because generate_token will have to verify that the session_id
|
7
|
+
# belongs to the api_key, it doesn't have the luxury of getting that type of failure in an error
|
8
|
+
# response from the server
|
9
|
+
let(:api_key) { "123456" }
|
10
|
+
let(:api_secret) { "1234567890abcdef1234567890abcdef1234567890" }
|
11
|
+
let(:session_id) { "1_MX4xMjM0NTZ-flNhdCBNYXIgMTUgMTQ6NDI6MjMgUERUIDIwMTR-MC40OTAxMzAyNX4" }
|
12
|
+
let(:default_role) { :publisher }
|
13
|
+
|
14
|
+
it "generates plain tokens" do
|
15
|
+
plain_token = opentok.generate_token session_id
|
16
|
+
expect(plain_token).to be_an_instance_of String
|
17
|
+
expect(plain_token).to carry_token_data :session_id => session_id
|
18
|
+
expect(plain_token).to carry_token_data :api_key => api_key
|
19
|
+
expect(plain_token).to carry_token_data :role => default_role
|
20
|
+
expect(plain_token).to carry_token_data [:nonce, :create_time]
|
21
|
+
expect(plain_token).to carry_valid_token_signature api_secret
|
22
|
+
end
|
23
|
+
|
24
|
+
it "generates tokens with an expire time" do
|
25
|
+
expire_time = Time.now + (60*60*24)
|
26
|
+
expiring_token = opentok.generate_token session_id, :expire_time => expire_time
|
27
|
+
expect(expiring_token).to be_an_instance_of String
|
28
|
+
expect(expiring_token).to carry_token_data :session_id => session_id
|
29
|
+
expect(expiring_token).to carry_token_data :api_key => api_key
|
30
|
+
expect(expiring_token).to carry_token_data :role => default_role
|
31
|
+
expect(expiring_token).to carry_token_data :expire_time => expire_time.to_i
|
32
|
+
expect(expiring_token).to carry_token_data [:nonce, :create_time]
|
33
|
+
expect(expiring_token).to carry_valid_token_signature api_secret
|
34
|
+
end
|
35
|
+
|
36
|
+
it "generates tokens with a role" do
|
37
|
+
role = :moderator
|
38
|
+
role_token = opentok.generate_token session_id, :role => role
|
39
|
+
expect(role_token).to be_an_instance_of String
|
40
|
+
expect(role_token).to carry_token_data :session_id => session_id
|
41
|
+
expect(role_token).to carry_token_data :api_key => api_key
|
42
|
+
expect(role_token).to carry_token_data :role => role
|
43
|
+
expect(role_token).to carry_token_data [:nonce, :create_time]
|
44
|
+
expect(role_token).to carry_valid_token_signature api_secret
|
45
|
+
end
|
46
|
+
|
47
|
+
it "generates tokens with data" do
|
48
|
+
data = "name=Johnny"
|
49
|
+
data_bearing_token = opentok.generate_token session_id, :data => data
|
50
|
+
expect(data_bearing_token).to be_an_instance_of String
|
51
|
+
expect(data_bearing_token).to carry_token_data :session_id => session_id
|
52
|
+
expect(data_bearing_token).to carry_token_data :api_key => api_key
|
53
|
+
expect(data_bearing_token).to carry_token_data :role => default_role
|
54
|
+
expect(data_bearing_token).to carry_token_data :data => data
|
55
|
+
expect(data_bearing_token).to carry_token_data [:nonce, :create_time]
|
56
|
+
expect(data_bearing_token).to carry_valid_token_signature api_secret
|
57
|
+
end
|
58
|
+
|
59
|
+
# TODO a context about using a bad session_id
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "opentok/constants"
|
2
|
+
require "matchers/token"
|
3
|
+
|
4
|
+
shared_examples "session generates tokens" do
|
5
|
+
describe "#generate_token" do
|
6
|
+
# these must be known quantities because generate_token will have to verify that the session_id
|
7
|
+
# belongs to the api_key, it doesn't have the luxury of getting that type of failure in an error
|
8
|
+
# response from the server
|
9
|
+
let(:api_key) { "123456" }
|
10
|
+
let(:api_secret) { "1234567890abcdef1234567890abcdef1234567890" }
|
11
|
+
let(:session_id) { "1_MX4xMjM0NTZ-flNhdCBNYXIgMTUgMTQ6NDI6MjMgUERUIDIwMTR-MC40OTAxMzAyNX4" }
|
12
|
+
let(:default_role) { :publisher }
|
13
|
+
|
14
|
+
it "generates plain tokens" do
|
15
|
+
plain_token = session.generate_token
|
16
|
+
expect(plain_token).to be_an_instance_of String
|
17
|
+
expect(plain_token).to carry_token_data :session_id => session_id
|
18
|
+
expect(plain_token).to carry_token_data :api_key => api_key
|
19
|
+
expect(plain_token).to carry_token_data :role => default_role
|
20
|
+
expect(plain_token).to carry_token_data [:nonce, :create_time]
|
21
|
+
expect(plain_token).to carry_valid_token_signature api_secret
|
22
|
+
end
|
23
|
+
|
24
|
+
it "generates tokens with an expire time" do
|
25
|
+
expire_time = Time.now + (60*60*24)
|
26
|
+
expiring_token = session.generate_token :expire_time => expire_time
|
27
|
+
expect(expiring_token).to be_an_instance_of String
|
28
|
+
expect(expiring_token).to carry_token_data :session_id => session_id
|
29
|
+
expect(expiring_token).to carry_token_data :api_key => api_key
|
30
|
+
expect(expiring_token).to carry_token_data :role => default_role
|
31
|
+
expect(expiring_token).to carry_token_data :expire_time => expire_time.to_i
|
32
|
+
expect(expiring_token).to carry_token_data [:nonce, :create_time]
|
33
|
+
expect(expiring_token).to carry_valid_token_signature api_secret
|
34
|
+
end
|
35
|
+
|
36
|
+
it "generates tokens with a role" do
|
37
|
+
role = :moderator
|
38
|
+
role_token = session.generate_token :role => role
|
39
|
+
expect(role_token).to be_an_instance_of String
|
40
|
+
expect(role_token).to carry_token_data :session_id => session_id
|
41
|
+
expect(role_token).to carry_token_data :api_key => api_key
|
42
|
+
expect(role_token).to carry_token_data :role => role
|
43
|
+
expect(role_token).to carry_token_data [:nonce, :create_time]
|
44
|
+
expect(role_token).to carry_valid_token_signature api_secret
|
45
|
+
end
|
46
|
+
|
47
|
+
it "generates tokens with data" do
|
48
|
+
data = "name=Johnny"
|
49
|
+
data_bearing_token = session.generate_token :data => data
|
50
|
+
expect(data_bearing_token).to be_an_instance_of String
|
51
|
+
expect(data_bearing_token).to carry_token_data :session_id => session_id
|
52
|
+
expect(data_bearing_token).to carry_token_data :api_key => api_key
|
53
|
+
expect(data_bearing_token).to carry_token_data :role => default_role
|
54
|
+
expect(data_bearing_token).to carry_token_data :data => data
|
55
|
+
expect(data_bearing_token).to carry_token_data [:nonce, :create_time]
|
56
|
+
expect(data_bearing_token).to carry_valid_token_signature api_secret
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
# TODO a context about using a bad session_id
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
require 'vcr'
|
4
|
-
require 'webmock'
|
1
|
+
require "vcr"
|
5
2
|
|
6
3
|
VCR.configure do |c|
|
7
4
|
c.cassette_library_dir = 'spec/cassettes'
|
8
5
|
c.hook_into :webmock
|
9
|
-
c.default_cassette_options = { :
|
10
|
-
c.
|
6
|
+
c.default_cassette_options = { :match_requests_on => [:method, :uri, :query, :body, :headers] }
|
7
|
+
c.configure_rspec_metadata!
|
11
8
|
end
|
12
9
|
|
13
10
|
RSpec.configure do |c|
|
14
|
-
|
11
|
+
# so we can use :vcr rather than :vcr => true;
|
12
|
+
# in RSpec 3 this will no longer be necessary.
|
13
|
+
c.treat_symbols_as_metadata_keys_with_true_values = true
|
15
14
|
end
|