From 4d89a5ecc3351e8f570a6cac6505f819789d2317 Mon Sep 17 00:00:00 2001 From: Mark Moser Date: Sun, 18 Sep 2016 11:16:35 -0500 Subject: [PATCH] completing test coverage --- Guardfile | 12 ++--- app/controllers/accounts_controller.rb | 45 +++++-------------- app/controllers/auth_controller.rb | 1 + app/models/account.rb | 5 +++ .../edit_test.rb} | 40 +++++++---------- .../accounts_controller/view_test.rb | 40 +++++++++++++++++ test/controllers/auth_controller_test.rb | 11 ++++- 7 files changed, 88 insertions(+), 66 deletions(-) rename test/controllers/{accounts_controller_test.rb => accounts_controller/edit_test.rb} (66%) create mode 100644 test/controllers/accounts_controller/view_test.rb diff --git a/Guardfile b/Guardfile index b3d8f11..0f6cf17 100644 --- a/Guardfile +++ b/Guardfile @@ -70,12 +70,12 @@ guard :minitest, spring: "bin/rails test", all_after_pass: true do end # ESLint -guard :shell, all_on_start: true do - watch %r{app/assets/javascripts/*/.*} do |file| - system %(echo "ESLint:\033[32m #{file[0]}\033[0m") - system %(eslint #{file[0]}) - end -end +# guard :shell, all_on_start: true do +# watch %r{app/assets/javascripts/*/.*} do |file| +# system %(echo "ESLint:\033[32m #{file[0]}\033[0m") +# system %(eslint #{file[0]}) +# end +# end guard :rubocop, cli: %w(-D -S) do watch(/.+\.rb$/) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index d7352b9..ab9eaba 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -2,23 +2,17 @@ class AccountsController < ApplicationController before_action :set_account, only: [:show, :edit, :reveal, :update, :destroy] - # GET /accounts - # GET /accounts.json def index @accounts = Account.all end - # GET /accounts/1 - # GET /accounts/1.json def show end - # GET /accounts/new def new @account = Account.new end - # GET /accounts/1/edit def edit end @@ -26,54 +20,37 @@ class AccountsController < ApplicationController render json: { hash: @account.password }.to_json end - # POST /accounts - # POST /accounts.json def create @account = Account.new(account_params) - respond_to do |format| - if @account.save - format.html { redirect_to @account, notice: 'Account was successfully created.' } - format.json { render :show, status: :created, location: @account } - else - format.html { render :new } - format.json { render json: @account.errors, status: :unprocessable_entity } - end + if @account.save + redirect_to @account, notice: 'Account was successfully created.' + else + flash[:error] = 'Failed to create account' + render :new end end - # PATCH/PUT /accounts/1 - # PATCH/PUT /accounts/1.json def update - respond_to do |format| - if @account.update(account_params) - format.html { redirect_to @account, notice: 'Account was successfully updated.' } - format.json { render :show, status: :ok, location: @account } - else - format.html { render :edit } - format.json { render json: @account.errors, status: :unprocessable_entity } - end + if @account.update(account_params) + redirect_to @account, notice: 'Account was successfully updated.' + else + flash[:error] = 'Failed to update account' + render :edit end end - # DELETE /accounts/1 - # DELETE /accounts/1.json def destroy @account.destroy - respond_to do |format| - format.html { redirect_to accounts_url, notice: 'Account was successfully destroyed.' } - format.json { head :no_content } - end + redirect_to accounts_url, notice: 'Account was successfully destroyed.' end private - # Use callbacks to share common setup or constraints between actions. def set_account @account = Account.find(params[:id]) end - # Never trust parameters from the scary internet, only allow the white list through. def account_params params.require(:account).permit(:username, :password, :home, :site) end diff --git a/app/controllers/auth_controller.rb b/app/controllers/auth_controller.rb index 2def987..e7476cb 100644 --- a/app/controllers/auth_controller.rb +++ b/app/controllers/auth_controller.rb @@ -10,6 +10,7 @@ class AuthController < ApplicationController redirect_to login_path end + # :nocov: def auth redirect_to client.auth_code.authorize_url(redirect_uri: ENV['callback_url']) end diff --git a/app/models/account.rb b/app/models/account.rb index f6034a3..72f65ff 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -1,4 +1,9 @@ # frozen_string_literal: true class Account < ApplicationRecord serialize :password, CryptSerializer + + validates :username, presence: true + validates :password, presence: true + validates :home, presence: true + validates :site, presence: true end diff --git a/test/controllers/accounts_controller_test.rb b/test/controllers/accounts_controller/edit_test.rb similarity index 66% rename from test/controllers/accounts_controller_test.rb rename to test/controllers/accounts_controller/edit_test.rb index 781ad03..27df294 100644 --- a/test/controllers/accounts_controller_test.rb +++ b/test/controllers/accounts_controller/edit_test.rb @@ -9,17 +9,6 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest @account = accounts(:account1) end - test "should get index" do - get accounts_url - - assert_response :success - end - - test "should get new" do - get new_account_url - assert_response :success - end - test "should create account" do assert_difference('Account.count') do post accounts_url, params: { account: { @@ -33,14 +22,16 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest assert_redirected_to account_url(Account.last) end - test "should show account" do - get account_url(@account) - assert_response :success - end + test "should FAIL to create account" do + assert_difference('Account.count', 0) do + post accounts_url, params: { account: { + password: @account.password, + username: 'client-new' + } } + end - test "should get edit" do - get edit_account_url(@account) assert_response :success + assert_match(/failed to create/i, flash[:error]) end test "should update account" do @@ -53,6 +44,13 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest assert_redirected_to account_url(@account) end + test "should FAIL to update account" do + patch account_url(@account.id), params: { account: { username: nil } } + + assert_response :success + assert_match(/failed to update/i, flash[:error]) + end + test "should destroy account" do assert_difference('Account.count', -1) do delete account_url(@account) @@ -60,12 +58,4 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest assert_redirected_to accounts_url end - - test 'reveal should provide password' do - get reveal_password_url(@account.to_i), xhr: true - json = JSON.parse(response.body).to_hash - - assert_response :success - assert_match '1q2w3e4r5t6y7u', json['hash'] - end end diff --git a/test/controllers/accounts_controller/view_test.rb b/test/controllers/accounts_controller/view_test.rb new file mode 100644 index 0000000..cc82772 --- /dev/null +++ b/test/controllers/accounts_controller/view_test.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true +require 'test_helper' + +class AccountsControllerTest < ActionDispatch::IntegrationTest + include TestAuthHelper + + setup do + get auth_path + @account = accounts(:account1) + end + + test "should get index" do + get accounts_url + + assert_response :success + end + + test "should get new" do + get new_account_url + assert_response :success + end + + test "should show account" do + get account_url(@account) + assert_response :success + end + + test "should get edit" do + get edit_account_url(@account) + assert_response :success + end + + test 'reveal should provide password' do + get reveal_password_url(@account.to_i), xhr: true + json = JSON.parse(response.body).to_hash + + assert_response :success + assert_match '1q2w3e4r5t6y7u', json['hash'] + end +end diff --git a/test/controllers/auth_controller_test.rb b/test/controllers/auth_controller_test.rb index 0432321..3650637 100644 --- a/test/controllers/auth_controller_test.rb +++ b/test/controllers/auth_controller_test.rb @@ -4,7 +4,7 @@ require 'test_helper' class AuthControllerTest < ActionDispatch::IntegrationTest include TestAuthHelper - test "should get auth" do + test "Should fake login process" do # This is not a real test of AuthController! # We are really testing that the monkey path is correct # @@ -26,4 +26,13 @@ class AuthControllerTest < ActionDispatch::IntegrationTest assert_equal "redirect_to accounts_path", last_line_in_callback end + + test 'should logout' do + get auth_path + assert session[:token] + + get logout_path + assert session[:token].nil? + assert_redirected_to login_path + end end