jam-cloud/web/spec/controllers/api_reviews_controller_spec.rb

124 lines
4.0 KiB
Ruby

require 'spec_helper'
describe ApiReviewsController, type: :controller do
render_views
before(:all) do
@logged_in_user = FactoryBot.create(:user)
end
before(:each) do
Review.destroy_all
ReviewSummary.destroy_all
@user= FactoryBot.create(:user)
@target= FactoryBot.create(:jam_track)
controller.current_user = @logged_in_user
end
after(:all) do
Review.delete_all
ReviewSummary.delete_all
JamTrackSession.delete_all if defined?(JamTrackSession)
AffiliateDistribution.delete_all if defined?(AffiliateDistribution)
SaleLineItem.delete_all if defined?(SaleLineItem)
Sale.delete_all if defined?(Sale)
RetailerInvitation.delete_all if defined?(RetailerInvitation)
Retailer.delete_all if defined?(Retailer)
InvitedUser.delete_all if defined?(InvitedUser)
RecordedJamTrackTrack.delete_all if defined?(RecordedJamTrackTrack)
JamTrackTrack.delete_all if defined?(JamTrackTrack)
ActiveRecord::Base.connection.execute("UPDATE recordings SET jam_track_id = NULL WHERE jam_track_id IS NOT NULL")
User.delete_all
JamTrack.delete_all
end
describe "create" do
it "successful" do
post :create, params: { rating:3, description:"it was ok", target_id: @target.id, target_type:"JamRuby::JamTrack", format: 'json' }
response.should be_successful
Review.index.should have(1).items
end
end
describe "update" do
before :each do
@review=Review.create!(target:@target, rating:5, description: "blah", user_id: @logged_in_user.id)
end
it "basic" do
post :update, params: { id:@review.id, mods: {rating:4, description: "not blah"}, :format=>'json' }
response.should be_successful
@review.reload
@review.rating.should eq(4)
@review.description.should eq("not blah")
end
it "bad identifier" do
post :update, params: { id:2112, mods: {rating:4, description: "not blah"}, :format=>'json' }
response.status.should eql(404)
end
end
describe "delete" do
before :each do
@review=Review.create!(target:@target, rating:5, description: "blah", user_id: @logged_in_user.id)
end
it "marks review as deleted" do
delete :delete, params: { id:@review.id }
response.should be_successful
Review.index.should have(0).items
Review.index(include_deleted:true).should have(1).items
end
end
describe "indexes" do
before :each do
@target2=FactoryBot.create(:jam_track)
7.times { Review.create!(target:@target, rating:4, description: "blah", user_id: FactoryBot.create(:user).id) }
5.times { Review.create!(target:@target2, rating:4, description: "blah", user_id: FactoryBot.create(:user).id) }
end
it "review summaries" do
get :index, params: { format: 'json' }
response.should be_successful
json = JSON.parse(response.body)
ReviewSummary.index.should have(2).items
get :index, params: { format: 'json' }
json = JSON.parse(response.body)
json.should have(2).item
end
it "details" do
ReviewSummary.index.should have(2).items
summaries = ReviewSummary.index
get :details, params: { :review_summary_id=>summaries[0].id, format: 'json' }
response.should be_successful
json = JSON.parse(response.body)
json.should have(7).items
get :details, params: { :review_summary_id=>summaries[1].id, format: 'json' }
response.should be_successful
json = JSON.parse(response.body)
json.should have(5).items
end
it "paginates details" do
summaries = ReviewSummary.index
summaries.should have(2).items
get :details, params: { review_summary_id:summaries[0].id, page: 1, per_page: 3, format: 'json' }
response.should be_successful
json = JSON.parse(response.body)
json.should have(3).items
get :details, params: { review_summary_id:summaries[0].id, page: 3, per_page: 3, format: 'json' }
response.should be_successful
json = JSON.parse(response.body)
json.should have(1).items
end
end
end