GeekPark/gpk_account

View on GitHub
spec/controllers/users/signup_controller_spec.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'rails_helper'

RSpec.describe Users::SignupController, type: :controller do
  describe 'POST #create' do
    let(:basic_user) { attributes_for(:basic_user) }
    include_context 'prepare verify code' do
      let(:key) { basic_user[:email] }
    end

    before do
      basic_user[:verify_code] = @code
    end

    context 'verify code incorrect' do
      it 'should return error' do
        basic_user['verify_code'] = @code.to_i.next.to_s
        post :create, user: basic_user
        expect(response).to have_http_status(422)
        expect(JSON.parse(response.body)['errors']).to include('验证码输入错误')
      end
    end

    context 'verify code correct' do
      it 'validate user params' do
        user = create(:basic_user)
        basic_user['email'] = user.email
        post :create, user: basic_user
        expect(response).to have_http_status(422)
        expect(JSON.parse(response.body)['errors']).to include('Email已经被使用')
      end

      it 'verify code can not use twice' do
        post :create, user: basic_user
        basic_user['email'] = 'new@example.com'
        post :create, user: basic_user
        expect(response).to have_http_status(422)
        expect(JSON.parse(response.body)['errors']).to include('验证码输入错误')
      end

      it 'return user when created' do
        post :create, user: basic_user
        expect(response).to be_success
        expect(JSON.parse(response.body)['user']['email']).to eq('u****@geekpark.net')
        expect(warden.user.email).to eq(basic_user[:email])
      end

      it 'return callback_url when created' do
        post :create, user: basic_user
        expect(response).to be_success
        expect(JSON.parse(response.body)['callback_url']).to eq(user_url)
      end
    end
  end
end