we_bridge_rails_engine_users 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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