amazon-chime-sdk-rails 1.0.0
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 +87 -0
- data/.rspec +2 -0
- data/.travis.yml +47 -0
- data/.yardopts +6 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +25 -0
- data/LICENSE +21 -0
- data/README.md +1109 -0
- data/Rakefile +20 -0
- data/amazon-chime-sdk-rails.gemspec +29 -0
- data/gemfiles/Gemfile.rails-5.0 +25 -0
- data/gemfiles/Gemfile.rails-5.1 +25 -0
- data/gemfiles/Gemfile.rails-5.2 +25 -0
- data/gemfiles/Gemfile.rails-6.0 +25 -0
- data/lib/amazon-chime-sdk-rails.rb +37 -0
- data/lib/chime_sdk/config.rb +90 -0
- data/lib/chime_sdk/controller/attendees.rb +128 -0
- data/lib/chime_sdk/controller/common.rb +202 -0
- data/lib/chime_sdk/controller/meetings.rb +192 -0
- data/lib/chime_sdk/meeting_coordinator.rb +184 -0
- data/lib/chime_sdk/version.rb +4 -0
- data/lib/generators/chime_sdk/controllers_generator.rb +104 -0
- data/lib/generators/chime_sdk/install_generator.rb +27 -0
- data/lib/generators/chime_sdk/js_generator.rb +67 -0
- data/lib/generators/chime_sdk/views_generator.rb +43 -0
- data/lib/generators/templates/chime_sdk.rb +28 -0
- data/lib/generators/templates/controllers/README +35 -0
- data/lib/generators/templates/controllers/meeting_attendees_controller.rb +106 -0
- data/lib/generators/templates/controllers/meetings_controller.rb +146 -0
- data/lib/generators/templates/views/meetings/index.html.erb +27 -0
- data/lib/generators/templates/views/meetings/show.html.erb +136 -0
- data/spec/factories/rooms.rb +5 -0
- data/spec/factories/users.rb +8 -0
- data/spec/generators/controllers_generator_spec.rb +113 -0
- data/spec/generators/install_generator_spec.rb +24 -0
- data/spec/generators/js_generator_spec.rb +26 -0
- data/spec/generators/views_generator_spec.rb +46 -0
- data/spec/rails_app/Rakefile +15 -0
- data/spec/rails_app/app/assets/config/manifest.js +2 -0
- data/spec/rails_app/app/assets/images/.keep +0 -0
- data/spec/rails_app/app/assets/javascripts/.keep +0 -0
- data/spec/rails_app/app/assets/stylesheets/application.css +15 -0
- data/spec/rails_app/app/assets/stylesheets/scaffolds.scss +65 -0
- data/spec/rails_app/app/controllers/api/meeting_attendees_controller.rb +3 -0
- data/spec/rails_app/app/controllers/api/meetings_controller.rb +3 -0
- data/spec/rails_app/app/controllers/api/rooms_controller.rb +3 -0
- data/spec/rails_app/app/controllers/application_controller.rb +11 -0
- data/spec/rails_app/app/controllers/entries_controller.rb +47 -0
- data/spec/rails_app/app/controllers/meeting_attendees_controller.rb +121 -0
- data/spec/rails_app/app/controllers/meetings_controller.rb +162 -0
- data/spec/rails_app/app/controllers/rooms_controller.rb +76 -0
- data/spec/rails_app/app/controllers/spa_controller.rb +6 -0
- data/spec/rails_app/app/javascript/App.vue +50 -0
- data/spec/rails_app/app/javascript/channels/consumer.js +6 -0
- data/spec/rails_app/app/javascript/channels/index.js +5 -0
- data/spec/rails_app/app/javascript/components/DeviseTokenAuth.vue +84 -0
- data/spec/rails_app/app/javascript/components/meetings/Index.vue +100 -0
- data/spec/rails_app/app/javascript/components/meetings/Meeting.vue +178 -0
- data/spec/rails_app/app/javascript/components/rooms/Index.vue +53 -0
- data/spec/rails_app/app/javascript/components/rooms/Show.vue +91 -0
- data/spec/rails_app/app/javascript/packs/application.js +17 -0
- data/spec/rails_app/app/javascript/packs/spa.js +14 -0
- data/spec/rails_app/app/javascript/router/index.js +74 -0
- data/spec/rails_app/app/javascript/store/index.js +37 -0
- data/spec/rails_app/app/models/application_record.rb +3 -0
- data/spec/rails_app/app/models/entry.rb +5 -0
- data/spec/rails_app/app/models/room.rb +12 -0
- data/spec/rails_app/app/models/user.rb +6 -0
- data/spec/rails_app/app/views/devise/registrations/new.html.erb +34 -0
- data/spec/rails_app/app/views/layouts/_header.html.erb +20 -0
- data/spec/rails_app/app/views/layouts/application.html.erb +18 -0
- data/spec/rails_app/app/views/meetings/index.html.erb +28 -0
- data/spec/rails_app/app/views/meetings/show.html.erb +136 -0
- data/spec/rails_app/app/views/rooms/_form.html.erb +22 -0
- data/spec/rails_app/app/views/rooms/_room.json.jbuilder +7 -0
- data/spec/rails_app/app/views/rooms/edit.html.erb +6 -0
- data/spec/rails_app/app/views/rooms/index.html.erb +27 -0
- data/spec/rails_app/app/views/rooms/index.json.jbuilder +1 -0
- data/spec/rails_app/app/views/rooms/new.html.erb +5 -0
- data/spec/rails_app/app/views/rooms/show.html.erb +42 -0
- data/spec/rails_app/app/views/rooms/show.json.jbuilder +1 -0
- data/spec/rails_app/app/views/spa/index.html.erb +1 -0
- data/spec/rails_app/babel.config.js +72 -0
- data/spec/rails_app/bin/bundle +114 -0
- data/spec/rails_app/bin/rails +9 -0
- data/spec/rails_app/bin/rake +9 -0
- data/spec/rails_app/bin/setup +36 -0
- data/spec/rails_app/bin/spring +17 -0
- data/spec/rails_app/bin/webpack +18 -0
- data/spec/rails_app/bin/webpack-dev-server +18 -0
- data/spec/rails_app/bin/yarn +11 -0
- data/spec/rails_app/config.ru +5 -0
- data/spec/rails_app/config/application.rb +21 -0
- data/spec/rails_app/config/boot.rb +4 -0
- data/spec/rails_app/config/cable.yml +10 -0
- data/spec/rails_app/config/credentials.yml.enc +1 -0
- data/spec/rails_app/config/database.yml +25 -0
- data/spec/rails_app/config/environment.rb +14 -0
- data/spec/rails_app/config/environments/development.rb +62 -0
- data/spec/rails_app/config/environments/production.rb +112 -0
- data/spec/rails_app/config/environments/test.rb +49 -0
- data/spec/rails_app/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/rails_app/config/initializers/assets.rb +15 -0
- data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails_app/config/initializers/chime_sdk.rb +28 -0
- data/spec/rails_app/config/initializers/content_security_policy.rb +30 -0
- data/spec/rails_app/config/initializers/cookies_serializer.rb +5 -0
- data/spec/rails_app/config/initializers/devise.rb +311 -0
- data/spec/rails_app/config/initializers/devise_token_auth.rb +60 -0
- data/spec/rails_app/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/rails_app/config/initializers/inflections.rb +16 -0
- data/spec/rails_app/config/initializers/mime_types.rb +4 -0
- data/spec/rails_app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/rails_app/config/locales/devise.en.yml +65 -0
- data/spec/rails_app/config/locales/en.yml +33 -0
- data/spec/rails_app/config/puma.rb +38 -0
- data/spec/rails_app/config/routes.rb +24 -0
- data/spec/rails_app/config/secrets.yml +8 -0
- data/spec/rails_app/config/spring.rb +6 -0
- data/spec/rails_app/config/storage.yml +34 -0
- data/spec/rails_app/config/webpack/development.js +5 -0
- data/spec/rails_app/config/webpack/environment.js +7 -0
- data/spec/rails_app/config/webpack/loaders/vue.js +6 -0
- data/spec/rails_app/config/webpack/production.js +5 -0
- data/spec/rails_app/config/webpack/test.js +5 -0
- data/spec/rails_app/config/webpacker.yml +97 -0
- data/spec/rails_app/db/migrate/20200912140231_devise_create_users.rb +45 -0
- data/spec/rails_app/db/migrate/20200912140352_add_tokens_to_users.rb +12 -0
- data/spec/rails_app/db/migrate/20200912140657_create_rooms.rb +9 -0
- data/spec/rails_app/db/migrate/20200912140749_create_entries.rb +10 -0
- data/spec/rails_app/db/schema.rb +49 -0
- data/spec/rails_app/db/seeds.rb +41 -0
- data/spec/rails_app/log/.keep +0 -0
- data/spec/rails_app/package.json +23 -0
- data/spec/rails_app/postcss.config.js +12 -0
- data/spec/rails_app/public/404.html +67 -0
- data/spec/rails_app/public/422.html +67 -0
- data/spec/rails_app/public/500.html +66 -0
- data/spec/rails_app/public/favicon.ico +0 -0
- data/spec/rails_app/public/robots.txt +1 -0
- data/spec/rails_app/tmp/.keep +0 -0
- data/spec/requests/atendees_spec.rb +182 -0
- data/spec/requests/meetings_spec.rb +433 -0
- data/spec/spec_helper.rb +35 -0
- metadata +400 -0
@@ -0,0 +1,433 @@
|
|
1
|
+
describe ChimeSdk::Controller::Meetings, type: :request do
|
2
|
+
before(:all) do
|
3
|
+
@meeting_id = "01234567-89ab-cdef-ghij-klmnopqrstuv"
|
4
|
+
@attendee_id = "76543210-ba98-fedc-jihg-vutsrqponmlk"
|
5
|
+
@dummy_meeting_id = "91234567-89ab-cdef-ghij-klmnopqrstuv"
|
6
|
+
|
7
|
+
@room = create(:room)
|
8
|
+
dummy_media_placement = {
|
9
|
+
audio_host_url: "dummy",
|
10
|
+
audio_fallback_url: "dummy",
|
11
|
+
screen_data_url: "dummy",
|
12
|
+
screen_sharing_url: "dummy",
|
13
|
+
screen_viewing_url: "dummy",
|
14
|
+
signaling_url: "dummy",
|
15
|
+
turn_control_url: "dummy"
|
16
|
+
}
|
17
|
+
test_meeting = {
|
18
|
+
meeting_id: @meeting_id,
|
19
|
+
external_meeting_id: "ChimeSdkRailsApp-test-PrivateRoom-#{@room.id}",
|
20
|
+
media_placement: dummy_media_placement,
|
21
|
+
media_region: "us-east-1"
|
22
|
+
}
|
23
|
+
dummy_meeting = {
|
24
|
+
meeting_id: @dummy_meeting_id,
|
25
|
+
external_meeting_id: "ChimeSdkRailsApp-test-PrivateRoom-0",
|
26
|
+
media_placement: dummy_media_placement,
|
27
|
+
media_region: "us-east-1"
|
28
|
+
}
|
29
|
+
|
30
|
+
# Use stubs for the AWS SDK for Ruby
|
31
|
+
client = Aws::Chime::Client.new(stub_responses: true)
|
32
|
+
client.stub_responses(:list_meetings, {
|
33
|
+
meetings: [ test_meeting, dummy_meeting ]
|
34
|
+
})
|
35
|
+
client.stub_responses(:get_meeting, -> (context) {
|
36
|
+
context.params[:meeting_id] == @meeting_id ? { meeting: test_meeting } : 'NotFoundException'
|
37
|
+
})
|
38
|
+
client.stub_responses(:create_meeting, {
|
39
|
+
meeting: test_meeting
|
40
|
+
})
|
41
|
+
client.stub_responses(:delete_meeting, -> (context) {
|
42
|
+
context.params[:meeting_id] == @meeting_id ? {} : 'NotFoundException'
|
43
|
+
})
|
44
|
+
client.stub_responses(:create_attendee, -> (context) {
|
45
|
+
context.params[:meeting_id] == @meeting_id ? {
|
46
|
+
attendee: {
|
47
|
+
external_user_id: context.params[:external_user_id],
|
48
|
+
attendee_id: @attendee_id,
|
49
|
+
join_token: "dummy"
|
50
|
+
}
|
51
|
+
} : 'BadRequestException'
|
52
|
+
})
|
53
|
+
ChimeSdk::MeetingCoordinator.reset_client(client)
|
54
|
+
end
|
55
|
+
|
56
|
+
context "Rails API" do
|
57
|
+
let(:api_root_path) { "/api/v1" }
|
58
|
+
let(:api_path) { "#{api_root_path}/rooms/#{@room.id}" }
|
59
|
+
|
60
|
+
before do
|
61
|
+
@user = create(:user)
|
62
|
+
end
|
63
|
+
|
64
|
+
context "requests from unauthorized user" do
|
65
|
+
describe "GET /meetings" do
|
66
|
+
it "returns response with 401 status" do
|
67
|
+
get "#{api_path}/meetings", headers: @auth_headers
|
68
|
+
expect(response).to have_http_status(401)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "requests from authorized user" do
|
74
|
+
before do
|
75
|
+
# Sign in with Devise Token Auth
|
76
|
+
post "#{api_root_path}/auth/sign_in", params: { email: @user.email, password: "password" }
|
77
|
+
@auth_headers = response.header.slice("access-token", "client", "uid")
|
78
|
+
end
|
79
|
+
|
80
|
+
context "when the authorized user is not a member of the private room" do
|
81
|
+
describe "GET /meetings" do
|
82
|
+
it "returns response with 403 status" do
|
83
|
+
get "#{api_path}/meetings", headers: @auth_headers
|
84
|
+
expect(response).to have_http_status(403)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "when the authorized user is a member of the private room" do
|
90
|
+
before do
|
91
|
+
@room.add_member(@user)
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "GET /meetings" do
|
95
|
+
context "without any parameters and ChimeSdk.config.create_meeting_by_get_request is disabled" do
|
96
|
+
before do
|
97
|
+
get "#{api_path}/meetings", headers: @auth_headers
|
98
|
+
end
|
99
|
+
|
100
|
+
it "returns response with 200 status" do
|
101
|
+
expect(response).to have_http_status(200)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "returns meetings list filtered by prefix" do
|
105
|
+
expect(JSON.parse(response.body)["meetings"].length).to eq(1)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "returns valid meeting in the list" do
|
109
|
+
expect(JSON.parse(response.body)["meetings"][0]["Meeting"]["MeetingId"]).to eq(@meeting_id)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context "with true as create_meeting parameter" do
|
114
|
+
before do
|
115
|
+
get "#{api_path}/meetings", headers: @auth_headers, params: { create_meeting: true }
|
116
|
+
end
|
117
|
+
|
118
|
+
it "returns response with 201 status" do
|
119
|
+
expect(response).to have_http_status(201)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "returns created meeting" do
|
123
|
+
expect(JSON.parse(response.body)["Meeting"]["MeetingId"]).to eq(@meeting_id)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "GET /meetings/:meeting_id" do
|
129
|
+
context "when the meeting is found" do
|
130
|
+
before do
|
131
|
+
get "#{api_path}/meetings/#{@meeting_id}", headers: @auth_headers
|
132
|
+
end
|
133
|
+
|
134
|
+
it "returns response with 200 status" do
|
135
|
+
expect(response).to have_http_status(200)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "returns valid meeting" do
|
139
|
+
expect(JSON.parse(response.body)["Meeting"]["MeetingId"]).to eq(@meeting_id)
|
140
|
+
end
|
141
|
+
|
142
|
+
it "returns application metadata in the meeting" do
|
143
|
+
expect(JSON.parse(response.body)["Meeting"]["ApplicationMetadata"]["Room"]["id"]).to eq(@room.id)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "returns created attendee since ChimeSdk.config.create_attendee_from_meeting is enabled" do
|
147
|
+
expect(JSON.parse(response.body)["Attendee"]["AttendeeId"]).to eq(@attendee_id)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context "when the meeting is not found" do
|
152
|
+
before do
|
153
|
+
get "#{api_path}/meetings/#{@dummy_meeting_id}", headers: @auth_headers
|
154
|
+
end
|
155
|
+
|
156
|
+
it "returns response with 404 status" do
|
157
|
+
expect(response).to have_http_status(404)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe "POST /meetings" do
|
163
|
+
context "when ChimeSdk.config.create_meeting_with_attendee is enabled" do
|
164
|
+
before do
|
165
|
+
post "#{api_path}/meetings", headers: @auth_headers
|
166
|
+
end
|
167
|
+
|
168
|
+
it "returns response with 201 status" do
|
169
|
+
expect(response).to have_http_status(201)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "returns created meeting" do
|
173
|
+
expect(JSON.parse(response.body)["Meeting"]["MeetingId"]).to eq(@meeting_id)
|
174
|
+
end
|
175
|
+
|
176
|
+
it "returns created attendee" do
|
177
|
+
expect(JSON.parse(response.body)["Attendee"]["AttendeeId"]).to eq(@attendee_id)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
context "when ChimeSdk.config.create_meeting_with_attendee is disabled" do
|
182
|
+
before do
|
183
|
+
ChimeSdk.config.create_meeting_with_attendee = false
|
184
|
+
post "#{api_path}/meetings", headers: @auth_headers
|
185
|
+
end
|
186
|
+
|
187
|
+
after do
|
188
|
+
ChimeSdk.config.create_meeting_with_attendee = true
|
189
|
+
end
|
190
|
+
|
191
|
+
it "returns response with 201 status" do
|
192
|
+
expect(response).to have_http_status(201)
|
193
|
+
end
|
194
|
+
|
195
|
+
it "returns created meeting" do
|
196
|
+
expect(JSON.parse(response.body)["Meeting"]["MeetingId"]).to eq(@meeting_id)
|
197
|
+
end
|
198
|
+
|
199
|
+
it "does not return created attendee" do
|
200
|
+
expect(JSON.parse(response.body)["Attendee"]).to be_nil
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
describe "DELETE /meetings/:meeting_id" do
|
206
|
+
context "when the meeting is found" do
|
207
|
+
before do
|
208
|
+
delete "#{api_path}/meetings/#{@meeting_id}", headers: @auth_headers
|
209
|
+
end
|
210
|
+
|
211
|
+
it "returns response with 204 status" do
|
212
|
+
expect(response).to have_http_status(204)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
context "when the meeting is not found" do
|
217
|
+
before do
|
218
|
+
get "#{api_path}/meetings/#{@dummy_meeting_id}", headers: @auth_headers
|
219
|
+
end
|
220
|
+
|
221
|
+
it "returns response with 404 status" do
|
222
|
+
expect(response).to have_http_status(404)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
context "Rails View" do
|
231
|
+
let(:api_path) { "/rooms/#{@room.id}" }
|
232
|
+
|
233
|
+
before do
|
234
|
+
@user = create(:user)
|
235
|
+
end
|
236
|
+
|
237
|
+
context "requests from unauthorized user" do
|
238
|
+
describe "GET /meetings" do
|
239
|
+
before do
|
240
|
+
get "#{api_path}/meetings"
|
241
|
+
end
|
242
|
+
|
243
|
+
it "returns response with 302 status" do
|
244
|
+
expect(response).to have_http_status(302)
|
245
|
+
end
|
246
|
+
|
247
|
+
it "redirects to user sign_in path" do
|
248
|
+
expect(response.body).to redirect_to("/users/sign_in")
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
context "requests from authorized user" do
|
254
|
+
before do
|
255
|
+
# Sign in with Devise
|
256
|
+
sign_in @user
|
257
|
+
end
|
258
|
+
|
259
|
+
context "when the authorized user is not a member of the private room" do
|
260
|
+
describe "GET /meetings" do
|
261
|
+
before do
|
262
|
+
get "#{api_path}/meetings"
|
263
|
+
end
|
264
|
+
|
265
|
+
it "returns response with 302 status" do
|
266
|
+
expect(response).to have_http_status(302)
|
267
|
+
end
|
268
|
+
|
269
|
+
it "redirects to parent resource path" do
|
270
|
+
expect(response.body).to redirect_to(api_path)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
context "when the authorized user is a member of the private room" do
|
276
|
+
before do
|
277
|
+
@room.add_member(@user)
|
278
|
+
end
|
279
|
+
|
280
|
+
describe "GET /meetings" do
|
281
|
+
context "without any parameters and ChimeSdk.config.create_meeting_by_get_request is disabled" do
|
282
|
+
before do
|
283
|
+
get "#{api_path}/meetings"
|
284
|
+
end
|
285
|
+
|
286
|
+
it "returns response with 200 status" do
|
287
|
+
expect(response).to have_http_status(200)
|
288
|
+
expect(response.body).to include("Meetings by Amazon Chime SDK")
|
289
|
+
end
|
290
|
+
|
291
|
+
it "returns valid meeting in the list" do
|
292
|
+
expect(response.body).to include(@meeting_id)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
context "with true as create_meeting parameter" do
|
297
|
+
before do
|
298
|
+
get "#{api_path}/meetings", params: { create_meeting: true }
|
299
|
+
end
|
300
|
+
|
301
|
+
it "returns response with 302 status" do
|
302
|
+
expect(response).to have_http_status(302)
|
303
|
+
end
|
304
|
+
|
305
|
+
it "redirects to created meeting path" do
|
306
|
+
expect(response.body).to redirect_to("#{api_path}/meetings/#{@meeting_id}")
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
describe "GET /meetings/:meeting_id" do
|
312
|
+
context "when the meeting is found" do
|
313
|
+
before do
|
314
|
+
get "#{api_path}/meetings/#{@meeting_id}"
|
315
|
+
end
|
316
|
+
|
317
|
+
it "returns response with 200 status" do
|
318
|
+
expect(response).to have_http_status(200)
|
319
|
+
expect(response.body).to include("Meeting by Amazon Chime SDK")
|
320
|
+
end
|
321
|
+
|
322
|
+
it "returns valid meeting" do
|
323
|
+
expect(response.body).to include(@meeting_id)
|
324
|
+
end
|
325
|
+
|
326
|
+
it "returns created attendee since ChimeSdk.config.create_attendee_from_meeting is enabled" do
|
327
|
+
expect(response.body).to include(@attendee_id)
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
context "when the meeting is not found" do
|
332
|
+
before do
|
333
|
+
get "#{api_path}/meetings/#{@dummy_meeting_id}"
|
334
|
+
end
|
335
|
+
|
336
|
+
it "returns response with 302 status" do
|
337
|
+
expect(response).to have_http_status(302)
|
338
|
+
end
|
339
|
+
|
340
|
+
it "redirects to meetings path" do
|
341
|
+
expect(response.body).to redirect_to("#{api_path}/meetings")
|
342
|
+
end
|
343
|
+
|
344
|
+
it "returns resource_not_found error as notice" do
|
345
|
+
expect(flash[:notice]).to include("Resource not found")
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
describe "POST /meetings" do
|
351
|
+
context "when ChimeSdk.config.create_meeting_with_attendee is enabled" do
|
352
|
+
before do
|
353
|
+
post "#{api_path}/meetings"
|
354
|
+
end
|
355
|
+
|
356
|
+
it "returns response with 302 status" do
|
357
|
+
expect(response).to have_http_status(302)
|
358
|
+
end
|
359
|
+
|
360
|
+
it "redirects to created meeting path" do
|
361
|
+
expect(response.body).to redirect_to("#{api_path}/meetings/#{@meeting_id}")
|
362
|
+
end
|
363
|
+
|
364
|
+
it "returns created message as notice" do
|
365
|
+
expect(flash[:notice]).to include("Meeting <#{@meeting_id}> was successfully created")
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
context "when ChimeSdk.config.create_meeting_with_attendee is disabled" do
|
370
|
+
before do
|
371
|
+
ChimeSdk.config.create_meeting_with_attendee = false
|
372
|
+
post "#{api_path}/meetings"
|
373
|
+
end
|
374
|
+
|
375
|
+
after do
|
376
|
+
ChimeSdk.config.create_meeting_with_attendee = true
|
377
|
+
end
|
378
|
+
|
379
|
+
it "returns response with 302 status" do
|
380
|
+
expect(response).to have_http_status(302)
|
381
|
+
end
|
382
|
+
|
383
|
+
it "redirects to created meeting path" do
|
384
|
+
expect(response.body).to redirect_to("#{api_path}/meetings/#{@meeting_id}")
|
385
|
+
end
|
386
|
+
|
387
|
+
it "returns created message as notice" do
|
388
|
+
expect(flash[:notice]).to include("Meeting <#{@meeting_id}> was successfully created.")
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
describe "DELETE /meetings/:meeting_id" do
|
394
|
+
context "when the meeting is found" do
|
395
|
+
before do
|
396
|
+
delete "#{api_path}/meetings/#{@meeting_id}"
|
397
|
+
end
|
398
|
+
|
399
|
+
it "returns response with 302 status" do
|
400
|
+
expect(response).to have_http_status(302)
|
401
|
+
end
|
402
|
+
|
403
|
+
it "redirects to meetings path" do
|
404
|
+
expect(response.body).to redirect_to("#{api_path}/meetings")
|
405
|
+
end
|
406
|
+
|
407
|
+
it "returns resource_not_found error as notice" do
|
408
|
+
expect(flash[:notice]).to include("Meeting <#{@meeting_id}> was successfully destroyed.")
|
409
|
+
end
|
410
|
+
end
|
411
|
+
|
412
|
+
context "when the meeting is not found" do
|
413
|
+
before do
|
414
|
+
get "#{api_path}/meetings/#{@dummy_meeting_id}"
|
415
|
+
end
|
416
|
+
|
417
|
+
it "returns response with 302 status" do
|
418
|
+
expect(response).to have_http_status(302)
|
419
|
+
end
|
420
|
+
|
421
|
+
it "redirects to meetings path" do
|
422
|
+
expect(response.body).to redirect_to("#{api_path}/meetings")
|
423
|
+
end
|
424
|
+
|
425
|
+
it "returns resource_not_found error as notice" do
|
426
|
+
expect(flash[:notice]).to include("Resource not found")
|
427
|
+
end
|
428
|
+
end
|
429
|
+
end
|
430
|
+
end
|
431
|
+
end
|
432
|
+
end
|
433
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
ENV["RAILS_ENV"] ||= "test"
|
2
|
+
|
3
|
+
require 'simplecov'
|
4
|
+
require 'coveralls'
|
5
|
+
Coveralls.wear!
|
6
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new [
|
7
|
+
SimpleCov::Formatter::HTMLFormatter,
|
8
|
+
Coveralls::SimpleCov::Formatter
|
9
|
+
]
|
10
|
+
SimpleCov.start('rails') do
|
11
|
+
add_filter '/spec/'
|
12
|
+
add_filter '/lib/generators/templates/'
|
13
|
+
add_filter '/lib/chime_sdk/version'
|
14
|
+
end
|
15
|
+
|
16
|
+
# Test Rails application
|
17
|
+
require 'rails_app/config/environment'
|
18
|
+
|
19
|
+
def clean_database
|
20
|
+
[Entry, Room, User].each do |model|
|
21
|
+
model.delete_all
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
require 'rspec/rails'
|
26
|
+
require 'factory_bot_rails'
|
27
|
+
require 'ammeter/init'
|
28
|
+
RSpec.configure do |config|
|
29
|
+
config.include Devise::Test::IntegrationHelpers, type: :request
|
30
|
+
config.include FactoryBot::Syntax::Methods
|
31
|
+
config.before(:all) do
|
32
|
+
FactoryBot.reload
|
33
|
+
clean_database
|
34
|
+
end
|
35
|
+
end
|