-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathmessages_spec.rb
105 lines (82 loc) · 2.65 KB
/
messages_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
require 'rails_helper'
RSpec.describe "Messages API", type: :request do
# initialize tests data
let!(:messages) { create_list(:message, 10) }
let(:message_id) { messages.first.id }
# test suite for GET / messages
describe "GET / messages" do
before { get "/api/messages" }
it "returns status code 200" do
expect(response).to have_http_status(200)
end
it "returns messages" do
expect(json).not_to be_empty
expect(json.size).to eq(10)
end
end
# test suite for GET / messages / :id
describe "GET / messages / :id" do
before { get "/api/messages/#{message_id}" }
context "when the record exists" do
it "returns status code 200" do
expect(response).to have_http_status(200)
end
it "returns the message" do
expect(json).not_to be_empty
expect(json['id']).to eq(message_id)
end
end
context "when the record does not exist" do
let(:message_id) { 100 }
it "returns status code 404" do
expect(response).to have_http_status(404)
end
it "returns a not found message" do
expect(response.body).to match(/Couldn't find Message/)
end
end
end
# test suite for POST / messages
describe "POST / messages" do
let(:valid_attributes) { { text: "Text" } }
let(:invalid_attributes) { {} }
context "when the request is valid" do
before { post "/api/messages", params: valid_attributes }
it "returns status code 201" do
expect(response).to have_http_status(201)
end
it "creates a message" do
expect(json['text']).to eq("Text")
end
end
describe "when the request is invalid" do
before { post "/api/messages", params: invalid_attributes }
it "returns status code 422" do
expect(response).to have_http_status(422)
end
it "returns a validation failure message" do
expect(response.body).to match(/Validation failed: Text can't be blank/)
end
end
end
# test suite for PUT / messages / :id
describe "PUT / messages / :id" do
let(:valid_attributes) { { text: "Text" } }
context "when the record exists" do
before { put "/api/messages/#{message_id}", params: valid_attributes }
it "returns status code 204" do
expect(response).to have_http_status(204)
end
it "updates the record" do
expect(response.body).to be_empty
end
end
end
# test suite for DELETE / messages / :id
describe "DELETE / messages / :id" do
before { delete "/api/messages/#{message_id}" }
it "returns status code 204" do
expect(response).to have_http_status(204)
end
end
end