This commit is contained in:
qyzh 2020-12-14 17:59:01 +08:00
parent ffbe4942b7
commit 5addece8d5
9 changed files with 225 additions and 111 deletions

View File

@ -11,6 +11,7 @@ class ApplicationController < ActionController::Base
include LoggerHelper
include LoginHelper
include RegisterHelper
include UpdateHelper
protect_from_forgery prepend: true, unless: -> { request.format.json? }

View File

@ -23,9 +23,8 @@ class SponsorTiersController < ApplicationController
# print("------------\n", sponsor_tier_params, "\n------------\n")
@check_sponsorship = nil
@sponsor_tier = SponsorTier.new(sponsor_tier_params)
respond_to do |format|
if @sponsor_tier.save
if @sponsor_tier.user_id == User.current.id && @sponsor_tier.save
format.html { redirect_to @sponsor_tier, notice: 'Sponsor tier was successfully created.' }
format.json { render :show, status: :created, location: @sponsor_tier }
# render json: {status: 1, message: '创建成功' }
@ -40,8 +39,10 @@ class SponsorTiersController < ApplicationController
# PATCH/PUT /sponsor_tiers/1.json
def update
@check_sponsorship = nil
old_value = old_value_to_hash(@sponsor_tier, params)
respond_to do |format|
if User.current.id == @sponsor_tier.user_id && @sponsor_tier.update(sponsor_tier_params)
if User.current.id == @sponsor_tier.user_id && @sponsor_tier.update(sponsor_tier_update_params)
user_trace_update_log(old_value)
format.html { redirect_to @sponsor_tier, notice: 'Sponsor tier was successfully updated.' }
format.json { render :show, status: :ok, location: @sponsor_tier }
# render json: {status: 1, message: '修改成功' }
@ -71,13 +72,17 @@ class SponsorTiersController < ApplicationController
private
# Use callbacks to share common setup or constraints between actions.
def check_sponsor
@check_sponsorship = Sponsorship.where("sponsor_id=? AND developer_id=?", current_user.id, @sponsor_tier.user)
@check_sponsorship = Sponsorship.where("sponsor_id=? AND developer_id=?", current_user.id, @sponsor_tier.user.id)
end
def set_sponsor_tier
@sponsor_tier = SponsorTier.find(params[:id])
end
def sponsor_tier_update_params
params.require(:sponsor_tier).permit(:tier, :description)
end
# Only allow a list of trusted parameters through.
def sponsor_tier_params
params.require(:sponsor_tier).permit(:tier, :user_id, :description)

View File

@ -1,7 +1,7 @@
class SponsorshipsController < ApplicationController
before_action :set_sponsorship, only: [:show, :edit, :update, :destroy]
# before_action :require_login, except: [:index, :stopped, :sponsored, :sponsoring, :stopped_sponsored, :stopped_sponsoring]
before_action :require_login, only: [:new, :create, :edit, :update, :destroy]
before_action :require_login, only: [:create, :edit, :update, :destroy]
skip_after_action :user_trace_log, only: [:update]
# GET /sponsorships
@ -78,7 +78,7 @@ class SponsorshipsController < ApplicationController
check_sponsorship = Sponsorship.where("sponsor_id=? AND developer_id=?", sponsor_id, params[:developer_id])
@sponsorship = Sponsorship.new(sponsorship_params.merge({sponsor_id: sponsor_id}))
# print('#######################', params[:single].class)
unless check_sponsorship.length.zero?
return render json: {status: -1, message: '您已经赞助了TA' }
end
@ -119,11 +119,12 @@ class SponsorshipsController < ApplicationController
# format.json { render json: @sponsorship.errors, status: :unprocessable_entity }
# end
# end
if @sponsorship.sponsor.id != current_user.id
return render json: {status: -1, message: '没有权限' }
return render json: {status: 401, message: '没有权限' }
end
old_value = old_value_to_hash(@sponsorship, params)
# params.delete :sponsorship
if @sponsorship.update(sponsorship_params)
user_trace_update_log(old_value)
render json: {status: 1, message: '修改成功' }
@ -140,7 +141,9 @@ class SponsorshipsController < ApplicationController
# format.html { redirect_to sponsorships_url, notice: 'Sponsorship was successfully destroyed.' }
# format.json { head :no_content }
# end
if (User.current.id == @sponsorship.developer.id || User.current.id == @sponsorship.sponsor.id) && @sponsorship.stop
developer = @sponsorship.developer
sponsor = @sponsorship.sponsor
if (User.current.id == developer.id || User.current.id == sponsor.id) && developer.update(sponsored_num: developer.sponsored_num-1) && sponsor.update(sponsor_num: sponsor.sponsor_num-1) && @sponsorship.stop
render json: {status: 1, message: "终止成功"}
else
render json: {status: -1, message: "失败"}

View File

@ -29,112 +29,159 @@ RSpec.describe SponsorTiersController, type: :controller do
# SponsorTier. As you add validations to SponsorTier, be sure to
# adjust the attributes here as well.
let(:valid_attributes) {
skip("Add a hash of attributes valid for your model")
{tier: 10, user_id: 5, description: 'Rspec test description'}
}
let(:invalid_attributes) {
skip("Add a hash of attributes invalid for your model")
{t: '10', user_id: -1, descrip: 'Rspec test description'}
}
let(:invalid_user_attributes) {
{tier: 10, user_id: 4, description: 'Rspec test invalid user description'}
}
# This should return the minimal set of values that should be in the session
# in order to pass any filters (e.g. authentication) defined in
# SponsorTiersController. Be sure to keep this updated too.
let(:valid_session) { {} }
let(:valid_session) {
# user = User.find 5
# User.current = user
# cookies.signed[:user_id] = user.id
# cookies["autologin"] = "060a555275563b9f096c6ceed84518f64a4614ee"
{user_id: 5, www_user_id: 5}
}
describe "GET #index" do
it "returns a success response" do
describe 'GET #index' do
it 'returns a success response' do
SponsorTier.create! valid_attributes
get :index, params: {login: qyzh123123}, session: valid_session
get :index, params: {login: 'qyzh123123'}, session: valid_session
expect(response).to be_successful
end
end
describe "GET #show" do
it "returns a success response" do
describe 'GET #show' do
it 'returns a success response' do
sponsor_tier = SponsorTier.create! valid_attributes
get :show, params: {id: sponsor_tier.to_param}, session: valid_session
expect(response).to be_successful
end
end
describe "GET #new" do
it "returns a success response" do
get :new, params: {}, session: valid_session
expect(response).to be_successful
end
end
describe "GET #edit" do
it "returns a success response" do
sponsor_tier = SponsorTier.create! valid_attributes
get :edit, params: {id: sponsor_tier.to_param}, session: valid_session
expect(response).to be_successful
end
end
describe "POST #create" do
context "with valid params" do
it "creates a new SponsorTier" do
describe 'POST #create' do
context 'with valid params' do
it 'creates a new SponsorTier' do
expect {
post :create, params: {sponsor_tier: valid_attributes}, session: valid_session
}.to change(SponsorTier, :count).by(1)
end
it "redirects to the created sponsor_tier" do
it 'redirects to the created sponsor_tier' do
post :create, params: {sponsor_tier: valid_attributes}, session: valid_session
expect(response).to redirect_to(SponsorTier.last)
# expect(response).to be_successful
end
end
context "with invalid params" do
context 'with invalid params' do
it "returns a success response (i.e. to display the 'new' template)" do
post :create, params: {sponsor_tier: invalid_attributes}, session: valid_session
expect(response).to be_successful
end
end
context 'with invalid user id' do
it 'does not creates a new SponsorTier' do
expect {
post :create, params: {sponsor_tier: invalid_user_attributes}, session: valid_session
}.to change(SponsorTier, :count).by(0)
end
it "returns a success response" do
post :create, params: {sponsor_tier: invalid_user_attributes}, session: valid_session
expect(response).to be_successful
end
end
end
describe "PUT #update" do
context "with valid params" do
describe 'PUT #update' do
context 'with valid params' do
let(:new_attributes) {
skip("Add a hash of attributes valid for your model")
{tier: 12, description: 'Rspec test update description'}
}
it "updates the requested sponsor_tier" do
it 'updates the requested sponsor_tier' do
sponsor_tier = SponsorTier.create! valid_attributes
put :update, params: {id: sponsor_tier.to_param, sponsor_tier: new_attributes}, session: valid_session
sponsor_tier.reload
skip("Add assertions for updated state")
expect(sponsor_tier.tier).to eq(12)
expect(sponsor_tier.description).to eq('Rspec test update description')
end
it "redirects to the sponsor_tier" do
it 'redirects to the sponsor_tier' do
sponsor_tier = SponsorTier.create! valid_attributes
put :update, params: {id: sponsor_tier.to_param, sponsor_tier: valid_attributes}, session: valid_session
expect(response).to redirect_to(sponsor_tier)
end
end
context "with invalid params" do
it "returns a success response (i.e. to display the 'edit' template)" do
context 'with invalid params' do
it 'does not update and redirects to the sponsor_tier' do
sponsor_tier = SponsorTier.create! valid_attributes
put :update, params: {id: sponsor_tier.to_param, sponsor_tier: invalid_attributes}, session: valid_session
expect(response).to be_successful
expect(response).to redirect_to(sponsor_tier)
expect(sponsor_tier.tier).to eq(10)
expect(sponsor_tier.description).to eq('Rspec test description')
end
end
context 'with invalid user id' do
let(:new_attributes) {
{tier: 12, description: 'Rspec test update description'}
}
it 'does not update SponsorTier' do
sponsor_tier = SponsorTier.create! invalid_user_attributes
put :update, params: {id: sponsor_tier.to_param, sponsor_tier: new_attributes}, session: valid_session
sponsor_tier.reload
expect(sponsor_tier.tier).to eq(10)
expect(sponsor_tier.description).to eq('Rspec test invalid user description')
end
it 'redirects to the sponsor_tier' do
sponsor_tier = SponsorTier.create! invalid_user_attributes
put :update, params: {id: sponsor_tier.to_param, sponsor_tier: valid_attributes}, session: valid_session
expect(response).to be_ok
end
end
end
describe "DELETE #destroy" do
it "destroys the requested sponsor_tier" do
sponsor_tier = SponsorTier.create! valid_attributes
expect {
describe 'DELETE #destroy' do
context 'with valid user id' do
it 'destroys the requested sponsor_tier' do
sponsor_tier = SponsorTier.create! valid_attributes
expect {
delete :destroy, params: {id: sponsor_tier.to_param}, session: valid_session
}.to change(SponsorTier, :count).by(-1)
end
it 'redirects to the sponsor_tiers list' do
sponsor_tier = SponsorTier.create! valid_attributes
delete :destroy, params: {id: sponsor_tier.to_param}, session: valid_session
}.to change(SponsorTier, :count).by(-1)
expect(response).to redirect_to(sponsor_tiers_url)
end
end
it "redirects to the sponsor_tiers list" do
sponsor_tier = SponsorTier.create! valid_attributes
delete :destroy, params: {id: sponsor_tier.to_param}, session: valid_session
expect(response).to redirect_to(sponsor_tiers_url)
context 'with invalid user id' do
it 'does not destroy the requested sponsor_tier' do
sponsor_tier = SponsorTier.create! invalid_user_attributes
expect {
delete :destroy, params: {id: sponsor_tier.to_param}, session: valid_session
}.to change(SponsorTier, :count).by(0)
end
it 'be ok' do
sponsor_tier = SponsorTier.create! invalid_user_attributes
delete :destroy, params: {id: sponsor_tier.to_param}, session: valid_session
expect(response).to be_ok
end
end
end

View File

@ -29,22 +29,38 @@ RSpec.describe SponsorshipsController, type: :controller do
# Sponsorship. As you add validations to Sponsorship, be sure to
# adjust the attributes here as well.
let(:valid_attributes) {
skip("Add a hash of attributes valid for your model")
{amount: 10, visible: 1, developer_id: 1, sponsor_id: 5}
}
let(:valid_create_api_attributes) {
{amount: 10, visible: 1, developer_id: 1}
}
let(:invalid_user_attributes) {
{amount: 10, visible: 1, sponsor_id: 4, developer_id: 1}
}
let(:invalid_attributes) {
skip("Add a hash of attributes invalid for your model")
{amunt: 10, visible: 1, developid: 1, sponsoid: 5}
}
# This should return the minimal set of values that should be in the session
# in order to pass any filters (e.g. authentication) defined in
# SponsorshipsController. Be sure to keep this updated too.
let(:valid_session) { {} }
let(:valid_session) { {www_user_id: 5} }
describe "GET #index" do
it "returns a success response" do
Sponsorship.create! valid_attributes
get :index, params: {}, session: valid_session
get :index, params: {}, format: 'json', session: valid_session
expect(response.body).to eq('[]')
end
end
describe "GET #stopped" do
it "returns a success response" do
sponsorship=StoppedSponsorship.create! valid_attributes
get :stopped, params: {}, format: 'json', session: valid_session
expect(response).to be_successful
end
end
@ -57,32 +73,37 @@ RSpec.describe SponsorshipsController, type: :controller do
end
end
describe "GET #new" do
it "returns a success response" do
get :new, params: {}, session: valid_session
expect(response).to be_successful
end
end
describe "GET #edit" do
it "returns a success response" do
sponsorship = Sponsorship.create! valid_attributes
get :edit, params: {id: sponsorship.to_param}, session: valid_session
expect(response).to be_successful
end
end
describe "POST #create" do
context "with valid params" do
it "creates a new Sponsorship" do
expect {
post :create, params: {sponsorship: valid_attributes}, session: valid_session
post :create, params: {sponsorship: valid_create_api_attributes}, session: valid_session
}.to change(Sponsorship, :count).by(1)
end
it "redirects to the created sponsorship" do
post :create, params: {sponsorship: valid_attributes}, session: valid_session
expect(response).to redirect_to(Sponsorship.last)
post :create, params: {sponsorship: valid_create_api_attributes}, session: valid_session
expect(response).to be_ok
end
end
context "single sponsor" do
let(:valid_single_params){
{amount: 10, visible: 1, developer_id: 1, single: true}
}
it "creates a stopped sponsorship" do
expect {
post :create, params: {amount: 10, visible: 1, developer_id: 1, single: true}, session: valid_session
}.to change(StoppedSponsorship, :count).by(0)
end
end
context "repeat sponsor" do
it "creates only one new Sponsorship" do
Sponsorship.create! valid_attributes
expect {
post :create, params: {sponsorship: valid_create_api_attributes}, session: valid_session
}.to change(Sponsorship, :count).by(1)
end
end
@ -97,20 +118,29 @@ RSpec.describe SponsorshipsController, type: :controller do
describe "PUT #update" do
context "with valid params" do
let(:new_attributes) {
skip("Add a hash of attributes valid for your model")
{amount: 20, visible: 0}
}
it "updates the requested sponsorship" do
sponsorship = Sponsorship.create! valid_attributes
put :update, params: {id: sponsorship.to_param, sponsorship: new_attributes}, session: valid_session
sponsorship.reload
skip("Add assertions for updated state")
expect(sponsorship.amount).to eq(20)
expect(sponsorship.visible).to eq(0)
end
it "redirects to the sponsorship" do
it "does not updates the requested sponsorship with wrong user" do
sponsorship = Sponsorship.create! invalid_user_attributes
put :update, params: {id: sponsorship.to_param, sponsorship: new_attributes}, session: valid_session
sponsorship.reload
expect(sponsorship.amount).to eq(10)
expect(sponsorship.visible).to eq(1)
end
it "return ok" do
sponsorship = Sponsorship.create! valid_attributes
put :update, params: {id: sponsorship.to_param, sponsorship: valid_attributes}, session: valid_session
expect(response).to redirect_to(sponsorship)
expect(response).to be_ok
end
end
@ -131,10 +161,23 @@ RSpec.describe SponsorshipsController, type: :controller do
}.to change(Sponsorship, :count).by(-1)
end
it "redirects to the sponsorships list" do
it "destroys the requested sponsorship" do
sponsorship = Sponsorship.create! invalid_user_attributes
expect {
delete :destroy, params: {id: sponsorship.to_param}, session: valid_session
}.to change(Sponsorship, :count).by(0)
end
it "return ok" do
sponsorship = Sponsorship.create! valid_attributes
delete :destroy, params: {id: sponsorship.to_param}, session: valid_session
expect(response).to redirect_to(sponsorships_url)
expect(response).to be_ok
end
it "return ok" do
sponsorship = Sponsorship.create! invalid_user_attributes
delete :destroy, params: {id: sponsorship.to_param}, session: valid_session
expect(response).to be_ok
end
end

View File

@ -1,10 +1,13 @@
require 'rails_helper'
RSpec.describe "Sponsorships", type: :request do
let(:valid_session) { {www_user_id: 5} }
describe "GET /sponsorships" do
it "works! (now write some real specs)" do
get sponsorships_path
expect(response).to have_http_status(200)
end
end
end

View File

@ -0,0 +1,10 @@
require "rails_helper"
RSpec.describe LogController, type: :routing do
describe "routing" do
it "routes to #index" do
expect(:get => "/api/log/list").to route_to("log#list")
end
end
end

View File

@ -3,36 +3,27 @@ require "rails_helper"
RSpec.describe SponsorTiersController, type: :routing do
describe "routing" do
it "routes to #index" do
expect(:get => "/sponsor_tiers").to route_to("sponsor_tiers#index")
end
it "routes to #new" do
expect(:get => "/sponsor_tiers/new").to route_to("sponsor_tiers#new")
expect(:get => "/api/sponsor_tiers").to route_to("sponsor_tiers#index")
end
it "routes to #show" do
expect(:get => "/sponsor_tiers/1").to route_to("sponsor_tiers#show", :id => "1")
expect(:get => "/api/sponsor_tiers/1").to route_to("sponsor_tiers#show", :id => "1")
end
it "routes to #edit" do
expect(:get => "/sponsor_tiers/1/edit").to route_to("sponsor_tiers#edit", :id => "1")
end
it "routes to #create" do
expect(:post => "/sponsor_tiers").to route_to("sponsor_tiers#create")
expect(:post => "/api/sponsor_tiers").to route_to("sponsor_tiers#create")
end
it "routes to #update via PUT" do
expect(:put => "/sponsor_tiers/1").to route_to("sponsor_tiers#update", :id => "1")
expect(:put => "/api/sponsor_tiers/1").to route_to("sponsor_tiers#update", :id => "1")
end
it "routes to #update via PATCH" do
expect(:patch => "/sponsor_tiers/1").to route_to("sponsor_tiers#update", :id => "1")
expect(:patch => "/api/sponsor_tiers/1").to route_to("sponsor_tiers#update", :id => "1")
end
it "routes to #destroy" do
expect(:delete => "/sponsor_tiers/1").to route_to("sponsor_tiers#destroy", :id => "1")
expect(:delete => "/api/sponsor_tiers/1").to route_to("sponsor_tiers#destroy", :id => "1")
end
end
end

View File

@ -3,36 +3,47 @@ require "rails_helper"
RSpec.describe SponsorshipsController, type: :routing do
describe "routing" do
it "routes to #index" do
expect(:get => "/sponsorships").to route_to("sponsorships#index")
expect(:get => "/api/sponsorships").to route_to("sponsorships#index")
end
it "routes to #new" do
expect(:get => "/sponsorships/new").to route_to("sponsorships#new")
it "routes to stopped" do
expect(:get => "/api/sponsorships/stopped").to route_to("sponsorships#stopped")
end
it "routes to sponsoring" do
expect(:get => "/api/sponsorships/sponsoring").to route_to("sponsorships#sponsoring")
end
it "routes to stopped_sponsoring" do
expect(:get => "/api/sponsorships/stopped_sponsoring").to route_to("sponsorships#stopped_sponsoring")
end
it "routes to sponsored" do
expect(:get => "/api/sponsorships/sponsored").to route_to("sponsorships#sponsored")
end
it "routes to stopped_sponsored" do
expect(:get => "/api/sponsorships/stopped_sponsored").to route_to("sponsorships#stopped_sponsored")
end
it "routes to #show" do
expect(:get => "/sponsorships/1").to route_to("sponsorships#show", :id => "1")
expect(:get => "/api/sponsorships/1").to route_to("sponsorships#show", :id => "1")
end
it "routes to #edit" do
expect(:get => "/sponsorships/1/edit").to route_to("sponsorships#edit", :id => "1")
end
it "routes to #create" do
expect(:post => "/sponsorships").to route_to("sponsorships#create")
expect(:post => "/api/sponsorships").to route_to("sponsorships#create")
end
it "routes to #update via PUT" do
expect(:put => "/sponsorships/1").to route_to("sponsorships#update", :id => "1")
expect(:put => "/api/sponsorships/1").to route_to("sponsorships#update", :id => "1")
end
it "routes to #update via PATCH" do
expect(:patch => "/sponsorships/1").to route_to("sponsorships#update", :id => "1")
expect(:patch => "/api/sponsorships/1").to route_to("sponsorships#update", :id => "1")
end
it "routes to #destroy" do
expect(:delete => "/sponsorships/1").to route_to("sponsorships#destroy", :id => "1")
expect(:delete => "/api/sponsorships/1").to route_to("sponsorships#destroy", :id => "1")
end
end
end