Files
app
bin
config
db
docs
lib
log
nanobox
public
spec
controllers
admin
api
activitypub
v1
timelines
accounts_controller_spec.rb
apps_controller_spec.rb
blocks_controller_spec.rb
domain_blocks_controller_spec.rb
favourites_controller_spec.rb
follow_requests_controller_spec.rb
follows_controller_spec.rb
instances_controller_spec.rb
media_controller_spec.rb
mutes_controller_spec.rb
notifications_controller_spec.rb
reports_controller_spec.rb
search_controller_spec.rb
statuses_controller_spec.rb
web
oembed_controller_spec.rb
push_controller_spec.rb
salmon_controller_spec.rb
subscriptions_controller_spec.rb
auth
concerns
oauth
settings
well_known
about_controller_spec.rb
account_follow_controller_spec.rb
account_unfollow_controller_spec.rb
accounts_controller_spec.rb
application_controller_spec.rb
authorize_follows_controller_spec.rb
follower_accounts_controller_spec.rb
following_accounts_controller_spec.rb
home_controller_spec.rb
media_controller_spec.rb
remote_follow_controller_spec.rb
statuses_controller_spec.rb
stream_entries_controller_spec.rb
tags_controller_spec.rb
fabricators
features
fixtures
helpers
javascript
lib
mailers
models
presenters
requests
routing
services
support
views
workers
rails_helper.rb
spec_helper.rb
storybook
streaming
vendor
.babelrc
.buildpacks
.codeclimate.yml
.dockerignore
.editorconfig
.env.nanobox
.env.production.sample
.env.test
.env.vagrant
.eslintignore
.eslintrc.yml
.foreman
.gitignore
.haml-lint.yml
.nanoignore
.nvmrc
.postcssrc.yml
.profile
.rspec
.rubocop.yml
.ruby-version
.scss-lint.yml
.slugignore
.travis.yml
Aptfile
CONTRIBUTING.md
Capfile
Dockerfile
Gemfile
Gemfile.lock
ISSUE_TEMPLATE.md
LICENSE
Procfile
Procfile.dev
README.md
Rakefile
Vagrantfile
app.json
boxfile.yml
config.ru
docker-compose.yml
docker_entrypoint.sh
package.json
scalingo.json
yarn.lock
hometown/spec/controllers/api/v1/notifications_controller_spec.rb
2017-05-19 23:32:37 +02:00

106 lines
3.2 KiB
Ruby

require 'rails_helper'
RSpec.describe Api::V1::NotificationsController, type: :controller do
render_views
let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) }
let(:token) { double acceptable?: true, resource_owner_id: user.id }
let(:other) { Fabricate(:user, account: Fabricate(:account, username: 'bob')) }
before do
allow(controller).to receive(:doorkeeper_token) { token }
end
describe 'GET #show' do
it 'returns http success' do
notification = Fabricate(:notification, account: user.account)
get :show, params: { id: notification.id }
expect(response).to have_http_status(:success)
end
end
describe 'POST #dismiss' do
it 'destroys the notification' do
notification = Fabricate(:notification, account: user.account)
post :dismiss, params: { id: notification.id }
expect(response).to have_http_status(:success)
expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound)
end
end
describe 'POST #clear' do
it 'clears notifications for the account' do
notification = Fabricate(:notification, account: user.account)
post :clear
expect(notification.account.reload.notifications).to be_empty
expect(response).to have_http_status(:success)
end
end
describe 'GET #index' do
before do
first_status = PostStatusService.new.call(user.account, 'Test')
@reblog_of_first_status = ReblogService.new.call(other.account, first_status)
mentioning_status = PostStatusService.new.call(other.account, 'Hello @alice')
@mention_from_status = mentioning_status.mentions.first
@favourite = FavouriteService.new.call(other.account, first_status)
@follow = FollowService.new.call(other.account, 'alice')
end
describe 'with no options' do
before do
get :index
end
it 'returns http success' do
expect(response).to have_http_status(:success)
end
it 'includes reblog' do
expect(assigns(:notifications).map(&:activity)).to include(@reblog_of_first_status)
end
it 'includes mention' do
expect(assigns(:notifications).map(&:activity)).to include(@mention_from_status)
end
it 'includes favourite' do
expect(assigns(:notifications).map(&:activity)).to include(@favourite)
end
it 'includes follow' do
expect(assigns(:notifications).map(&:activity)).to include(@follow)
end
end
describe 'with excluded mentions' do
before do
get :index, params: { exclude_types: ['mention'] }
end
it 'returns http success' do
expect(response).to have_http_status(:success)
end
it 'includes reblog' do
expect(assigns(:notifications).map(&:activity)).to include(@reblog_of_first_status)
end
it 'excludes mention' do
expect(assigns(:notifications).map(&:activity)).to_not include(@mention_from_status)
end
it 'includes favourite' do
expect(assigns(:notifications).map(&:activity)).to include(@favourite)
end
it 'includes follow' do
expect(assigns(:notifications).map(&:activity)).to include(@follow)
end
end
end
end