]> cat aescling's git repositories - mastodon.git/blob - spec/controllers/api/v1/statuses_controller_spec.rb
Move timelines API from statuses to its own controller, add a check for
[mastodon.git] / spec / controllers / api / v1 / statuses_controller_spec.rb
1 require 'rails_helper'
2
3 RSpec.describe Api::V1::StatusesController, type: :controller do
4 render_views
5
6 let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) }
7 let(:token) { double acceptable?: true, resource_owner_id: user.id }
8
9 before do
10 stub_request(:post, "https://pubsubhubbub.superfeedr.com/").to_return(:status => 200, :body => "", :headers => {})
11 allow(controller).to receive(:doorkeeper_token) { token }
12 end
13
14 describe 'GET #show' do
15 let(:status) { Fabricate(:status, account: user.account) }
16
17 it 'returns http success' do
18 get :show, params: { id: status.id }
19 expect(response).to have_http_status(:success)
20 end
21 end
22
23 describe 'GET #context' do
24 let(:status) { Fabricate(:status, account: user.account) }
25
26 before do
27 Fabricate(:status, account: user.account, thread: status)
28 end
29
30 it 'returns http success' do
31 get :context, params: { id: status.id }
32 expect(response).to have_http_status(:success)
33 end
34 end
35
36 describe 'GET #reblogged_by' do
37 let(:status) { Fabricate(:status, account: user.account) }
38
39 before do
40 post :reblog, params: { id: status.id }
41 end
42
43 it 'returns http success' do
44 get :reblogged_by, params: { id: status.id }
45 expect(response).to have_http_status(:success)
46 end
47 end
48
49 describe 'GET #favourited_by' do
50 let(:status) { Fabricate(:status, account: user.account) }
51
52 before do
53 post :favourite, params: { id: status.id }
54 end
55
56 it 'returns http success' do
57 get :favourited_by, params: { id: status.id }
58 expect(response).to have_http_status(:success)
59 end
60 end
61
62 describe 'POST #create' do
63 before do
64 post :create, params: { status: 'Hello world' }
65 end
66
67 it 'returns http success' do
68 expect(response).to have_http_status(:success)
69 end
70 end
71
72 describe 'DELETE #destroy' do
73 let(:status) { Fabricate(:status, account: user.account) }
74
75 before do
76 post :destroy, params: { id: status.id }
77 end
78
79 it 'returns http success' do
80 expect(response).to have_http_status(:success)
81 end
82
83 it 'removes the status' do
84 expect(Status.find_by(id: status.id)).to be nil
85 end
86 end
87
88 describe 'POST #reblog' do
89 let(:status) { Fabricate(:status, account: user.account) }
90
91 before do
92 post :reblog, params: { id: status.id }
93 end
94
95 it 'returns http success' do
96 expect(response).to have_http_status(:success)
97 end
98
99 it 'updates the reblogs count' do
100 expect(status.reblogs_count).to eq 1
101 end
102
103 it 'updates the reblogged attribute' do
104 expect(user.account.reblogged?(status)).to be true
105 end
106
107 it 'return json with updated attributes' do
108 hash_body = body_as_json
109
110 expect(hash_body[:reblog][:id]).to eq status.id
111 expect(hash_body[:reblog][:reblogs_count]).to eq 1
112 expect(hash_body[:reblog][:reblogged]).to be true
113 end
114 end
115
116 describe 'POST #unreblog' do
117 let(:status) { Fabricate(:status, account: user.account) }
118
119 before do
120 post :reblog, params: { id: status.id }
121 post :unreblog, params: { id: status.id }
122 end
123
124 it 'returns http success' do
125 expect(response).to have_http_status(:success)
126 end
127
128 it 'updates the reblogs count' do
129 expect(status.reblogs_count).to eq 0
130 end
131
132 it 'updates the reblogged attribute' do
133 expect(user.account.reblogged?(status)).to be false
134 end
135 end
136
137 describe 'POST #favourite' do
138 let(:status) { Fabricate(:status, account: user.account) }
139
140 before do
141 post :favourite, params: { id: status.id }
142 end
143
144 it 'returns http success' do
145 expect(response).to have_http_status(:success)
146 end
147
148 it 'updates the favourites count' do
149 expect(status.favourites_count).to eq 1
150 end
151
152 it 'updates the favourited attribute' do
153 expect(user.account.favourited?(status)).to be true
154 end
155
156 it 'return json with updated attributes' do
157 hash_body = body_as_json
158
159 expect(hash_body[:id]).to eq status.id
160 expect(hash_body[:favourites_count]).to eq 1
161 expect(hash_body[:favourited]).to be true
162 end
163 end
164
165 describe 'POST #unfavourite' do
166 let(:status) { Fabricate(:status, account: user.account) }
167
168 before do
169 post :favourite, params: { id: status.id }
170 post :unfavourite, params: { id: status.id }
171 end
172
173 it 'returns http success' do
174 expect(response).to have_http_status(:success)
175 end
176
177 it 'updates the favourites count' do
178 expect(status.favourites_count).to eq 0
179 end
180
181 it 'updates the favourited attribute' do
182 expect(user.account.favourited?(status)).to be false
183 end
184 end
185 end
This page took 0.149513 seconds and 4 git commands to generate.