we_bridge_rails_engine_users 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/javascripts/users.js +2 -0
  6. data/app/assets/stylesheets/scaffold.css +56 -0
  7. data/app/assets/stylesheets/users.css +4 -0
  8. data/app/controllers/sessions_controller.rb +82 -0
  9. data/app/controllers/users_controller.rb +9 -0
  10. data/app/helpers/users_helper.rb +2 -0
  11. data/app/models/person.rb +13 -0
  12. data/app/models/person_name.rb +6 -0
  13. data/app/models/person_name_text.rb +24 -0
  14. data/app/models/person_status.rb +2 -0
  15. data/app/models/person_text.rb +4 -0
  16. data/app/models/user.rb +12 -0
  17. data/app/models/user_account.rb +13 -0
  18. data/app/models/user_text.rb +13 -0
  19. data/app/views/sessions/login.html.builder +23 -0
  20. data/app/views/users/_form.html.builder +14 -0
  21. data/app/views/users/edit.html.builder +1 -0
  22. data/app/views/users/index.html.builder +1 -0
  23. data/app/views/users/new.html.builder +1 -0
  24. data/app/views/users/show.html.builder +1 -0
  25. data/config/routes.rb +14 -0
  26. data/db/migrate/20150611132719_add_sessions_table.rb +12 -0
  27. data/db/migrate/20150612005752_create_people.rb +41 -0
  28. data/db/migrate/20150712132226_add_users.rb +41 -0
  29. data/lib/tasks/we_bridge_rails_engine_langs_tasks.rake +4 -0
  30. data/lib/we_bridge_rails_engine_users.rb +16 -0
  31. data/lib/we_bridge_rails_engine_users/application_controller.rb +41 -0
  32. data/lib/we_bridge_rails_engine_users/engine.rb +13 -0
  33. data/lib/we_bridge_rails_engine_users/provider_settings.rb +76 -0
  34. data/lib/we_bridge_rails_engine_users/version.rb +3 -0
  35. data/spec/controllers/sessions_controller_spec.rb +95 -0
  36. data/spec/controllers/users_controller_spec.rb +182 -0
  37. data/spec/dummy/README.rdoc +28 -0
  38. data/spec/dummy/Rakefile +6 -0
  39. data/spec/dummy/app/assets/javascripts/application.js +16 -0
  40. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  41. data/spec/dummy/app/controllers/application_controller.rb +8 -0
  42. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  43. data/spec/dummy/app/views/layouts/application.html.builder +14 -0
  44. data/spec/dummy/bin/bundle +3 -0
  45. data/spec/dummy/bin/rails +4 -0
  46. data/spec/dummy/bin/rake +4 -0
  47. data/spec/dummy/bin/setup +29 -0
  48. data/spec/dummy/config.ru +4 -0
  49. data/spec/dummy/config/application.rb +28 -0
  50. data/spec/dummy/config/boot.rb +5 -0
  51. data/spec/dummy/config/database.yml +25 -0
  52. data/spec/dummy/config/environment.rb +5 -0
  53. data/spec/dummy/config/environments/development.rb +41 -0
  54. data/spec/dummy/config/environments/production.rb +79 -0
  55. data/spec/dummy/config/environments/test.rb +42 -0
  56. data/spec/dummy/config/initializers/assets.rb +11 -0
  57. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  58. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  59. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  60. data/spec/dummy/config/initializers/inflections.rb +16 -0
  61. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  62. data/spec/dummy/config/initializers/provider_settings.rb +2 -0
  63. data/spec/dummy/config/initializers/session_store.rb +3 -0
  64. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  65. data/spec/dummy/config/locales/en.yml +23 -0
  66. data/spec/dummy/config/omniauth.yml +63 -0
  67. data/spec/dummy/config/omniauth.yml.org +63 -0
  68. data/spec/dummy/config/routes.rb +56 -0
  69. data/spec/dummy/config/secrets.yml +22 -0
  70. data/spec/dummy/db/development.sqlite3 +0 -0
  71. data/spec/dummy/db/migrate/20150803101150_create_langs.rb +20 -0
  72. data/spec/dummy/db/schema.rb +134 -0
  73. data/spec/dummy/db/test.sqlite3 +0 -0
  74. data/spec/dummy/log/development.log +6092 -0
  75. data/spec/dummy/log/test.log +17718 -0
  76. data/spec/dummy/public/404.html +67 -0
  77. data/spec/dummy/public/422.html +67 -0
  78. data/spec/dummy/public/500.html +66 -0
  79. data/spec/dummy/public/favicon.ico +0 -0
  80. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/95kd6PNg5I5Dn8j-ds2kESZ4yqJWDlUtJlRkBYcHG9I.cache +2 -0
  81. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/9HedZDeYq2v6HBA9bD890T4cGZibttejhDq0xfEW1OA.cache +0 -0
  82. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/Cgic9Tyvkk6sqvxCRHMOht8-YWqOpKEbwWLaLUhtCu8.cache +1 -0
  83. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/DztYUoD64LBf1ciKDNbwfU3ggD7rYJ4R0V_4HPJxzL4.cache +1 -0
  84. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/EQFBBT0dblIxqvZw8BbpahKH5sRVDrYirvYcxKXzg6s.cache +0 -0
  85. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/G4HidZB-L5zKNezfe7O20FU58YFyoibIF0zyMpkigNA.cache +1 -0
  86. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/H5b9tPX4ofo6fe6MRg91ChMHmowlsYkfUKJ9b0NUPIU.cache +3 -0
  87. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/HYpkPupwGozKHs5qChj3sJ-IhRP-YDSiqc-n_hQB1RU.cache +1 -0
  88. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/N4s9e38lth9IeIVQYEn7L9iPWJJEt_FeNaWXgogeW80.cache +1 -0
  89. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/OvqhBxVGrgbFQCuriofYnoMd-Hh6MyK7cCQHpSQ6mY8.cache +1 -0
  90. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/Px2rpH6lCQmniOcJktyX-jHQL2GJFj42xgRDMwftICg.cache +0 -0
  91. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/TFk4N5unhxWMiNeFWRf2BmB7KZ2y9c6v4RR7SWHFSl8.cache +0 -0
  92. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/To7LnOAuTthN8xMQdWQRC_bDQ1AeR2Jt1SihvBvu7VM.cache +1 -0
  93. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/Tuk6Xmd6rNalBiAHW2q9yxztUsaXh6vGBN4kuwW4coo.cache +2 -0
  94. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/UthTiMoUK3z7QvIjgYJBlSTzwZ37UE-dam-92yUeRlg.cache +1 -0
  95. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/VhMjuakubXLw9TGrYLMTshl1haIqjdUQDFmrtWqFg48.cache +2 -0
  96. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/W6OPXh5hmWxHo1cCFc6MpmejeEJM-OWXJkmXVnoDdjk.cache +1 -0
  97. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/ivn9YXCSjX-45u61mNupKlBqHNTDKvF7tsbBnXjtu3o.cache +1 -0
  98. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/iyOlCOrvKIBBbvSO3lENE8lJeeFJpDFUKEP4NAUTizg.cache +0 -0
  99. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/j7FsLjc9QBY0x2gZy--i0nskAf-2VCkQ5tCr7M1FKww.cache +0 -0
  100. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/kR7RRgmwH5OahOaSgGVRid1-zpVfnzh9ktcpTc2r8U8.cache +1 -0
  101. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/mAcPZ6Lxmw7lRLF2rOOauuET5gBKl9QaZJgnOkL56Uw.cache +2 -0
  102. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/mOtV0PLRbjn4_sQL0ZHsuAv79ctsBmFq0tLYtQFngZs.cache +1 -0
  103. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/msJs71sOQgd6VP4kducGvRsZ3uZNW4d_vksrGcVZtH4.cache +2 -0
  104. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/pCDWkYCgTWLKByBqi8TDJneTltLoW9rReMGsBiGm9Uo.cache +0 -0
  105. data/spec/dummy/tmp/cache/assets/development/sprockets/v3.0/pOOmld85ShNKx5kGi9BubXdV_VZJntx0EoTivl0-bBM.cache +1 -0
  106. data/spec/dummy/tmp/pids/server.pid +1 -0
  107. data/spec/factories/users.rb +6 -0
  108. data/spec/helpers/users_helper_spec.rb +15 -0
  109. data/spec/models/user_spec.rb +5 -0
  110. data/spec/omniauth.yml +63 -0
  111. data/spec/rails_helper.rb +54 -0
  112. data/spec/routing/users_routing_spec.rb +31 -0
  113. data/spec/spec_helper.rb +95 -0
  114. data/spec/views/users/edit.html.builder_spec.rb +16 -0
  115. data/spec/views/users/index.html.builder_spec.rb +16 -0
  116. data/spec/views/users/new.html.builder_spec.rb +14 -0
  117. data/spec/views/users/show.html.builder_spec.rb +13 -0
  118. metadata +383 -0
@@ -0,0 +1,41 @@
1
+ class AddUsers < ActiveRecord::Migration
2
+ def change
3
+ create_table :users do |t|
4
+ t.integer :person_id, null: true
5
+ t.string :email
6
+ t.string :user_img_url
7
+ t.integer :lang_id, null: false
8
+ t.datetime :deleted_at
9
+ t.timestamps
10
+ end
11
+
12
+ create_table :user_texts do |t|
13
+ t.integer :parent_id, null: false
14
+ t.integer :lang_id, null: false
15
+ t.string :nick_name, null: true
16
+ t.string :nick_name_pron, null: true
17
+ t.datetime :deleted_at
18
+ t.timestamps
19
+ end
20
+ add_index :user_texts, [:lang_id,:parent_id], unique: true
21
+
22
+ create_table :user_accounts do |t|
23
+ t.integer :user_id, null: false
24
+ t.string :provider,null: false
25
+ t.string :uid, null: false
26
+ t.string :token
27
+ t.string :name
28
+ t.string :nickname
29
+ t.string :email
30
+ t.string :url
31
+ t.string :image_url
32
+ t.string :description
33
+ t.text :other
34
+ t.text :credentials
35
+ t.text :raw_info
36
+ t.datetime :deleted_at
37
+ t.timestamps
38
+ end
39
+ add_index :user_accounts, [:uid], unique: true
40
+ end
41
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :we_bridge_rails_engine_users do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,16 @@
1
+ require "we_bridge_rails_engine_users/engine"
2
+ require "we_bridge_rails_engine_users/application_controller"
3
+ require "we_bridge_rails_engine_users/provider_settings"
4
+ require 'we_bridge/html_builder'
5
+ require "we_bridge/exceptions"
6
+ require 'omniauth'
7
+
8
+ module WeBridgeRailsEngineUsers
9
+ end
10
+
11
+ WeBridge::HtmlBuilder.register_template_handler
12
+
13
+ OmniAuth.config.before_request_phase = proc{|env|
14
+ req = Rack::Request.new(env)
15
+ req.session[:redirect_to] = req.params["redirect_to"] || req.referrer
16
+ }
@@ -0,0 +1,41 @@
1
+ module WeBridgeRailsEngineUsers
2
+ module ApplicationController
3
+ def self.included(application_controller)
4
+ application_controller.helper_method :current_user, :logged_in?
5
+ end
6
+
7
+ def login_required
8
+ if !current_user
9
+ raise WeBridge::Exceptions::UnauthorizedError
10
+ end
11
+ end
12
+
13
+ def logged_in?
14
+ !!current_user
15
+ end
16
+
17
+ def set_user_id(user_id)
18
+ session[:user_id] = user_id
19
+ current_user
20
+ end
21
+
22
+ def check_current_user(user,message=nil)
23
+ if !(current_user && user == current_user)
24
+ raise WeBridge::Exceptions::ForbiddenError
25
+ end
26
+ end
27
+
28
+ def set_user!(id=nil)
29
+ @user = User.find(id || params[:user_id] || params[:id])
30
+ end
31
+
32
+ def current_user
33
+ uid = session[:user_id]
34
+ if @current_user && uid.to_i != @current_user.id
35
+ @current_user = nil
36
+ end
37
+ @current_user ||= User.find_by(id: uid) if uid
38
+ @current_user
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ module WeBridgeRailsEngineUsers
2
+ class Engine < ::Rails::Engine
3
+ config.generators do |g|
4
+ g.test_framework :rspec, fixture: false, view_specs: true, helper_specs: true, controller_specs: true, request_specs: true, route_specs: true, model_specs: true
5
+ g.fixture_replacement :factory_girl, :dir => 'spec/factories'
6
+ g.template_engine :builder
7
+ g.assets true
8
+ g.helper true
9
+ g.stylesheets true
10
+ g.javascripts true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,76 @@
1
+ require 'yaml'
2
+ module WeBridgeRailsEngineUsers
3
+ class ProviderSettings < Hash
4
+
5
+ @@instance = nil
6
+ @@file_loaded = false
7
+
8
+ def self.instance
9
+ @@instance ||= self.new
10
+ end
11
+
12
+ def self.file_loaded?
13
+ !!@@file_loaded
14
+ end
15
+
16
+ def self.reload!
17
+ @@instance = nil
18
+ @@file_loaded = false
19
+ self.instance.merge!(YAML.load_file(self.file_path)[Rails.env].symbolize_keys!.to_hash)
20
+ self.set_middleware
21
+ self
22
+ end
23
+
24
+ @@file_path = nil
25
+
26
+ def self.file_path=(path)
27
+ @@file_path = path
28
+ end
29
+
30
+ def self.file_path
31
+ @@file_path || "#{Rails.root}/config/omniauth.yml"
32
+ end
33
+
34
+ def self.availables(&block)
35
+ rtn = self.instance.delete_if{|key,conf|
36
+ !(conf['key'] && conf['secret'])
37
+ }
38
+ rtn.each do |oauth_provider_symbol,conf|
39
+ name = conf['name'] || oauth_provider_symbol
40
+ block.call(name,conf,oauth_provider_symbol)
41
+ end if block
42
+ rtn
43
+ end
44
+
45
+ def self.request_path(name)
46
+ "/auth/#{name}"
47
+ end
48
+
49
+ def self.callback_path(name)
50
+ "/auth/#{name}/callback"
51
+ end
52
+
53
+ def self.auth_callback_as(name)
54
+ "auth_callback_#{name}"
55
+ end
56
+
57
+ def self.auth_as(name)
58
+ "auth_#{name}"
59
+ end
60
+
61
+ def self.set_middleware
62
+ mw = Rails.application.config.middleware
63
+ mw.delete OmniAuth::Builder
64
+ mw.use OmniAuth::Builder do
65
+ WeBridgeRailsEngineUsers::ProviderSettings.availables do |name, conf, oauth_provider_symbol|
66
+ conf = conf.symbolize_keys
67
+ key,secret = conf[:key], conf[:secret]
68
+ conf.merge!(
69
+ request_path: ProviderSettings.request_path(name),
70
+ callback_path: ProviderSettings.callback_path(name))
71
+ provider oauth_provider_symbol, key, secret, conf.merge(key: nil, secret: nil, name: nil)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,3 @@
1
+ module WeBridgeRailsEngineUsers
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,95 @@
1
+ require 'rails_helper'
2
+ RSpec.describe SessionsController, type: :controller do
3
+
4
+ # This should return the minimal set of attributes required to create a valid
5
+ # model. As you add validations to model, be sure to
6
+ # adjust the attributes here as well.
7
+ let(:valid_attributes) {
8
+ {email: 'tester@baseball-bridge.org', lang_id: Lang.find_or_create_by(code: :ja).id}
9
+ }
10
+
11
+ let(:invalid_attributes) {
12
+ {lang_id: nil}
13
+ }
14
+
15
+ # This should return the minimal set of values that should be in the session
16
+ # in order to pass any filters (e.g. authentication) defined in
17
+ # Controller. Be sure to keep this updated too.
18
+ let(:valid_session) { {} }
19
+
20
+ let(:model) { User }
21
+
22
+ let(:new_attributes) {
23
+ valid_attributes.merge(email: 'tester2@baseball-bridge.org')
24
+ }
25
+
26
+ describe "GET #login" do
27
+ it "assigns all records as @records" do
28
+ # record = model.create! valid_attributes
29
+ get :login, {}, valid_session
30
+ # expect(assigns(:records)).to eq([record])
31
+ end
32
+ end
33
+
34
+ describe "GET #login" do
35
+ it "login page" do
36
+ get :login
37
+ expect(response.status).to eq(200)
38
+ end
39
+ end
40
+
41
+ describe "GET #callback" do
42
+ before :each do
43
+ WeBridgeRailsEngineUsers::ProviderSettings.file_path = File.expand_path('../../omniauth.yml',__FILE__)
44
+ end
45
+ let(:auth){
46
+ provider = nil
47
+ WeBridgeRailsEngineUsers::ProviderSettings.availables do |name|
48
+ provider = name; break;
49
+ end
50
+ {
51
+ 'provider' => provider,
52
+ 'uid' => '123545',
53
+ 'info' => {
54
+ 'email' => 'tester@baseball-bridge.org',
55
+ 'image' => 'http://www.baseball-bridge.org/image/1.jpg'
56
+ }
57
+ }
58
+ }
59
+
60
+ before do
61
+ request.env["omniauth.auth"] = auth
62
+ # @path = WeBridgeRailsEngineUsers::ProviderSettings.callback_path(auth['provider'])
63
+ end
64
+
65
+ it "no user , no account" do
66
+ get :callback, provider: auth['provider']
67
+ end
68
+
69
+ it "no user , some account" do
70
+ UserAccount.find_or_create_by(user_id: -1, provider: auth['provider'], uid: auth['uid'])
71
+ get :callback, provider: auth['provider']
72
+ end
73
+
74
+ it "some user , some account" do
75
+ user = User.create!(lang_id: 1)
76
+ ua = UserAccount.find_or_create_by(provider: auth['provider'], uid: auth['uid'], user_id: user.id)
77
+ get :callback, provider: auth['provider']
78
+ end
79
+ end
80
+
81
+ describe "GET #failure" do
82
+ it "normal" do
83
+ get :failure
84
+ expect(response).to redirect_to(action: :login)
85
+ end
86
+ end
87
+
88
+ describe "GET #logout" do
89
+ it "normal" do
90
+ get :logout, {}, {user_id: 1}
91
+ expect(session[:user_id]).to be_nil
92
+ expect(response).to redirect_to(action: :login)
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,182 @@
1
+ require 'rails_helper'
2
+
3
+ # This spec was generated by rspec-rails when you ran the scaffold generator.
4
+ # It demonstrates how one might use RSpec to specify the controller code that
5
+ # was generated by Rails when you ran the scaffold generator.
6
+ #
7
+ # It assumes that the implementation code is generated by the rails scaffold
8
+ # generator. If you are using any extension libraries to generate different
9
+ # controller code, this generated spec may or may not pass.
10
+ #
11
+ # It only uses APIs available in rails and/or rspec-rails. There are a number
12
+ # of tools you can use to make these specs even more expressive, but we're
13
+ # sticking to rails and rspec-rails APIs to keep things simple and stable.
14
+ #
15
+ # Compared to earlier versions of this generator, there is very limited use of
16
+ # stubs and message expectations in this spec. Stubs are only used when there
17
+ # is no simpler way to get a handle on the object needed for the example.
18
+ # Message expectations are only used when there is no simpler way to specify
19
+ # that an instance is receiving a specific message.
20
+
21
+ RSpec.describe UsersController, type: :controller do
22
+
23
+ # This should return the minimal set of attributes required to create a valid
24
+ # model. As you add validations to model, be sure to
25
+ # adjust the attributes here as well.
26
+ let(:valid_attributes) {
27
+ {email: 'tester@baseball-bridge.org', lang_id: Lang.find_or_create_by(code: :ja).id}
28
+ }
29
+
30
+ let(:invalid_attributes) {
31
+ {lang_id: nil}
32
+ }
33
+
34
+ # This should return the minimal set of values that should be in the session
35
+ # in order to pass any filters (e.g. authentication) defined in
36
+ # Controller. Be sure to keep this updated too.
37
+ let(:valid_user){ User.create!(valid_attributes) }
38
+ let(:valid_user2){ User.create!(valid_attributes) }
39
+
40
+ let(:valid_session) { {user_id: valid_user.id} }
41
+
42
+ let(:logout_session) { valid_session.merge(user_id: nil) }
43
+
44
+ let(:login_session) { valid_session }
45
+
46
+ let(:model) { User }
47
+
48
+ let(:new_attributes) {
49
+ valid_attributes.merge(email: 'tester2@baseball-bridge.org')
50
+ }
51
+
52
+ def index_path
53
+ users_path
54
+ end
55
+
56
+ def show_path(params)
57
+ user_path(params)
58
+ end
59
+
60
+ def edit_path(params)
61
+ edit_user_path(params)
62
+ end
63
+
64
+ def new_path
65
+ new_user_path
66
+ end
67
+
68
+ describe "GET #index" do
69
+ it "assigns all records as @records" do
70
+ record = model.create! valid_attributes
71
+ get :index, {}, logout_session
72
+ expect(assigns(:records)).to eq([record,valid_user])
73
+ end
74
+ end
75
+
76
+ describe "GET #show" do
77
+ it "assigns the requested record as @record" do
78
+ record = model.create! valid_attributes
79
+ get :show, {:id => record.id}, valid_session
80
+ expect(assigns(:record)).to eq(record)
81
+ end
82
+ end
83
+
84
+ describe "GET #new" do
85
+ it "no routing" do
86
+ expect{
87
+ get :new, {}, valid_session
88
+ }.to raise_error(ActionController::UrlGenerationError)
89
+ end
90
+ end
91
+
92
+ describe "user is self required" do
93
+ let!(:record){ valid_user }
94
+
95
+ before do
96
+ end
97
+
98
+ describe "GET #edit" do
99
+ it "assigns the requested record as @record" do
100
+ get :edit, {:id => record.id}, login_session
101
+ expect(assigns(:record)).to eq(record)
102
+ end
103
+
104
+ it "another user" do
105
+ get :edit, {:id => record.id}, {user_id: valid_user2.id}
106
+ expect(response.status).to eq(403)
107
+ end
108
+
109
+ it "not logged in" do
110
+ get :edit, {:id => record.id}, logout_session
111
+ expect(response.status).to eq(401)
112
+ end
113
+ end
114
+
115
+ describe "PUT #update" do
116
+ context "with valid params" do
117
+ it "updates the requested record" do
118
+ put :update, {:id => record.id, model.table_name => new_attributes}, login_session
119
+ record.reload
120
+ new_attributes.each do |k,v|
121
+ expect(record[k].to_s).to eq(v.to_s)
122
+ end
123
+ end
124
+
125
+ it "assigns the requested record as @record" do
126
+ put :update, {:id => record.id, model.table_name => valid_attributes}, login_session
127
+ expect(assigns(:record)).to eq(record)
128
+ end
129
+
130
+ it "redirects to the record" do
131
+ put :update, {:id => record.id, model.table_name => valid_attributes}, login_session
132
+ expect(response).to redirect_to(record)
133
+ end
134
+ end
135
+
136
+ context "with invalid params" do
137
+ it "assigns the record as @record" do
138
+ put :update, {:id => record.id, model.table_name => invalid_attributes}, login_session
139
+ expect(response).to redirect_to(edit_path(id: record.id))
140
+ end
141
+
142
+ it "re-renders the 'edit' template" do
143
+ put :update, {:id => record.id, model.table_name => invalid_attributes}, login_session
144
+ expect(response).to redirect_to(edit_path(id: record.id))
145
+ end
146
+ end
147
+
148
+ it "another user" do
149
+ put :update, {:id => record.id}, {user_id: valid_user2.id}
150
+ expect(response.status).to eq(403)
151
+ end
152
+
153
+ it "not logged in" do
154
+ put :update, {:id => record.id}, logout_session
155
+ expect(response.status).to eq(401)
156
+ end
157
+ end
158
+
159
+ describe "DELETE #destroy" do
160
+ it "destroys the requested record" do
161
+ expect {
162
+ delete :destroy, {:id => record.id}, login_session
163
+ }.to change(model, :count).by(-1)
164
+ end
165
+
166
+ it "destroys the requested record redirect" do
167
+ delete :destroy, {:id => record.id}, login_session
168
+ expect(response).to redirect_to(index_path)
169
+ end
170
+
171
+ it "another user" do
172
+ delete :destroy, {:id => record.id}, {user_id: valid_user2.id}
173
+ expect(response.status).to eq(403)
174
+ end
175
+
176
+ it "not logged in" do
177
+ delete :destroy, {:id => record.id}, logout_session
178
+ expect(response.status).to eq(401)
179
+ end
180
+ end
181
+ end
182
+ end