challah 1.1.1 → 1.2.0.rc

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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -1
  3. data/README.md +3 -3
  4. data/app/models/authorization.rb +2 -2
  5. data/app/models/user.rb +2 -2
  6. data/lib/challah.rb +60 -53
  7. data/lib/challah/active_record_extensions.rb +23 -0
  8. data/lib/challah/{authorization.rb → concerns/authorizeable.rb} +14 -19
  9. data/lib/challah/concerns/user/attributeable.rb +73 -0
  10. data/lib/challah/{user/authentication.rb → concerns/user/authenticateable.rb} +2 -2
  11. data/lib/challah/concerns/user/authorizable.rb +32 -0
  12. data/lib/challah/concerns/user/findable.rb +45 -0
  13. data/lib/challah/{user/password.rb → concerns/user/passwordable.rb} +2 -2
  14. data/lib/challah/{user/providers.rb → concerns/user/provideable.rb} +46 -6
  15. data/lib/challah/concerns/user/validateable.rb +21 -0
  16. data/lib/challah/concerns/userable.rb +20 -0
  17. data/lib/challah/engine.rb +1 -2
  18. data/lib/challah/test.rb +52 -32
  19. data/lib/challah/version.rb +1 -1
  20. metadata +14 -76
  21. data/lib/challah/user.rb +0 -128
  22. data/lib/challah/user/attributes.rb +0 -28
  23. data/lib/challah/user/finders.rb +0 -31
  24. data/lib/challah/user/reflector.rb +0 -15
  25. data/test/controllers/controller_test.rb +0 -34
  26. data/test/controllers/restrictions_controller_test.rb +0 -95
  27. data/test/controllers/sessions_controller_test.rb +0 -42
  28. data/test/dummy/README.rdoc +0 -28
  29. data/test/dummy/Rakefile +0 -6
  30. data/test/dummy/app/assets/javascripts/application.js +0 -13
  31. data/test/dummy/app/assets/stylesheets/application.css +0 -13
  32. data/test/dummy/app/controllers/application_controller.rb +0 -5
  33. data/test/dummy/app/controllers/restrictions_controller.rb +0 -25
  34. data/test/dummy/app/helpers/application_helper.rb +0 -2
  35. data/test/dummy/app/models/user.rb +0 -15
  36. data/test/dummy/app/models/widget.rb +0 -3
  37. data/test/dummy/app/views/bakery/templates/layouts/sample.erb +0 -1
  38. data/test/dummy/app/views/bakery/templates/partials/sample.html.haml +0 -1
  39. data/test/dummy/app/views/bakery/templates/themes/sample.haml +0 -1
  40. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  41. data/test/dummy/config.ru +0 -4
  42. data/test/dummy/config/application.rb +0 -24
  43. data/test/dummy/config/boot.rb +0 -5
  44. data/test/dummy/config/database.yml +0 -30
  45. data/test/dummy/config/environment.rb +0 -5
  46. data/test/dummy/config/environments/development.rb +0 -29
  47. data/test/dummy/config/environments/production.rb +0 -80
  48. data/test/dummy/config/environments/test.rb +0 -36
  49. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  50. data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  51. data/test/dummy/config/initializers/i18n.rb +0 -1
  52. data/test/dummy/config/initializers/inflections.rb +0 -16
  53. data/test/dummy/config/initializers/mime_types.rb +0 -5
  54. data/test/dummy/config/initializers/secret_token.rb +0 -12
  55. data/test/dummy/config/initializers/session_store.rb +0 -3
  56. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  57. data/test/dummy/config/locales/en.yml +0 -23
  58. data/test/dummy/config/routes.rb +0 -5
  59. data/test/dummy/db/migrate/20140114212939_create_widgets.rb +0 -32
  60. data/test/dummy/db/migrate/20140307205735_create_users.challah_engine.rb +0 -34
  61. data/test/dummy/db/migrate/20140307205736_create_authorizations.challah_engine.rb +0 -21
  62. data/test/dummy/db/schema.rb +0 -81
  63. data/test/dummy/db/test.sqlite3 +0 -0
  64. data/test/dummy/log/test.log +0 -11547
  65. data/test/dummy/public/404.html +0 -58
  66. data/test/dummy/public/422.html +0 -58
  67. data/test/dummy/public/500.html +0 -57
  68. data/test/dummy/public/favicon.ico +0 -0
  69. data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  70. data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  71. data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  72. data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  73. data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  74. data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  75. data/test/factories.rb +0 -8
  76. data/test/models/authorization_test.rb +0 -20
  77. data/test/models/user_test.rb +0 -345
  78. data/test/services/audit_test.rb +0 -107
  79. data/test/services/cookie_store_test.rb +0 -97
  80. data/test/services/encrypter_test.rb +0 -73
  81. data/test/services/plugins_test.rb +0 -65
  82. data/test/services/random_test.rb +0 -22
  83. data/test/services/routes_test.rb +0 -11
  84. data/test/services/session_test.rb +0 -197
  85. data/test/services/signup_test.rb +0 -122
  86. data/test/services/simple_cookie_store_test.rb +0 -122
  87. data/test/support/stubs.rb +0 -88
  88. data/test/test_helper.rb +0 -47
@@ -1,122 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SignupTest < ActiveSupport::TestCase
4
- context "A signup instance" do
5
- should "be properly named" do
6
- assert_equal "Signup", Challah::Signup.model_name
7
- end
8
- end
9
-
10
- context "A user" do
11
- should "sign up for an app with a password" do
12
- signup = Challah::Signup.new
13
- signup.first_name = 'Avon'
14
- signup.last_name = 'Barksdale'
15
- signup.email = 'avon@challah.me'
16
- signup.password = 'test123'
17
- signup.password_confirmation = 'test123'
18
-
19
- assert_difference [ 'User.count', 'Authorization.count' ], 1 do
20
- assert signup.save, 'Signup could not save!'
21
- end
22
-
23
- assert_equal false, signup.new_record?
24
- assert_equal "Avon Barksdale", signup.user.name
25
- assert_equal true, signup.user.authenticate_with_password('test123')
26
- assert_equal :password, signup.provider
27
- end
28
-
29
- should "sign up using a params hash" do
30
- user_params = {
31
- first_name: 'Stringer',
32
- last_name: 'Bell',
33
- email: 'stringer@challah.me',
34
- password: 'abc123',
35
- password_confirmation: 'abc123'
36
- }
37
-
38
- signup = Challah::Signup.new(user_params)
39
-
40
- assert_difference [ 'User.count', 'Authorization.count' ], 1 do
41
- assert signup.save, 'Signup could not save'
42
- end
43
-
44
- assert_equal false, signup.new_record?
45
- assert_equal 'Stringer Bell', signup.user.name
46
- assert_equal true, signup.user.authenticate_with_password('abc123')
47
- end
48
-
49
- should "not sign up without a password" do
50
- signup = Challah::Signup.new
51
- signup.first_name = 'Avon'
52
- signup.last_name = 'Barksdale'
53
- signup.email = 'avon@challah.me'
54
-
55
- assert_no_difference [ 'User.count', 'Authorization.count' ] do
56
- assert_equal false, signup.save
57
- end
58
-
59
- assert_equal true, signup.new_record?
60
- assert_equal "Avon Barksdale", signup.user.name
61
- assert_equal :password, signup.provider
62
- end
63
-
64
- should "sign up with another valid provider" do
65
- signup = Challah::Signup.new
66
- signup.first_name = 'Avon'
67
- signup.last_name = 'Barksdale'
68
- signup.email = 'avon@challah.me'
69
- signup.provider = "fake"
70
- signup.password = ""
71
- signup.password_confirmation = ""
72
- signup.provider_attributes = { "fake" => { "uid" => "1", "token" => "me" } }
73
-
74
- assert_difference [ 'User.count', 'Authorization.count' ], 1 do
75
- assert signup.save, 'Signup could not save'
76
- end
77
-
78
- assert_equal :fake, signup.provider
79
- assert_equal "me", signup.user.providers[:fake].fetch(:token)
80
- end
81
-
82
- should "not sign up without any providers" do
83
- signup = Challah::Signup.new
84
- signup.first_name = 'Avon'
85
- signup.last_name = 'Barksdale'
86
- signup.email = 'avon@challah.me'
87
- signup.provider = nil
88
-
89
- assert_no_difference [ 'User.count', 'Authorization.count' ] do
90
- assert_equal false, signup.save
91
- end
92
-
93
- assert_equal true, signup.new_record?
94
- assert_equal "Avon Barksdale", signup.user.name
95
- assert_equal nil, signup.provider
96
- end
97
-
98
- should "not sign up with an invalid provider" do
99
- signup = Challah::Signup.new
100
- signup.first_name = 'Avon'
101
- signup.last_name = 'Barksdale'
102
- signup.email = 'avon@challah.me'
103
- signup.provider = "blank"
104
- signup.provider_attributes = { "blank" => { "uid" => "1", "token" => "1" } }
105
-
106
- assert_no_difference [ 'User.count', 'Authorization.count' ], 1 do
107
- assert_equal false, signup.save
108
- end
109
-
110
- assert_equal true, signup.new_record?
111
- assert_equal "Avon Barksdale", signup.user.name
112
- assert_equal :blank, signup.provider
113
- end
114
-
115
- should "consolidate error messages" do
116
- signup = Challah::Signup.new
117
- assert_equal false, signup.save
118
- expected_error_fields = [ :first_name, :last_name, :email, :password ].sort
119
- assert_equal expected_error_fields, signup.errors.messages.keys.sort
120
- end
121
- end
122
- end
@@ -1,122 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SimpleCookieStoreTest < ActiveSupport::TestCase
4
- include Challah
5
-
6
- class FakeUserModel
7
-
8
- def self.table_name
9
- 'fake_user_peoples'
10
- end
11
-
12
- end
13
-
14
- context "The SimpleCookieStore class" do
15
- setup do
16
- @user = create(:user)
17
- @request = MockRequest.new
18
- end
19
-
20
- should "save session in a request cookie store" do
21
- assert_equal [], @request.cookies.keys
22
-
23
- session = Session.new(@request)
24
- session.store = SimpleCookieStore.new(session)
25
- session.persist = true
26
- session.user = @user
27
- session.save
28
-
29
- assert_equal %w( challah-s challah-v ), @request.cookies.keys.sort
30
- assert_equal "#{@user.persistence_token}@#{@user.id}", @request.cookies['challah-s'][:value]
31
- assert_equal "test.dev", @request.cookies['challah-s'][:domain]
32
-
33
- assert_equal Encrypter.md5("#{@user.persistence_token}@#{@user.id}"), @request.cookies['challah-v'][:value]
34
- assert_equal "test.dev", @request.cookies['challah-v'][:domain]
35
- end
36
-
37
- should "save session in a namespaced cookie store for non user tables" do
38
- assert_equal [], @request.cookies.keys
39
-
40
- session = Session.new(@request, {}, FakeUserModel)
41
- session.store = SimpleCookieStore.new(session)
42
- session.persist = true
43
- session.user = @user
44
- session.save
45
-
46
- assert_equal %w( challah-d635fd-s challah-d635fd-v ), @request.cookies.keys.sort
47
- assert_equal "#{@user.persistence_token}@#{@user.id}", @request.cookies['challah-d635fd-s'][:value]
48
- assert_equal "test.dev", @request.cookies['challah-d635fd-s'][:domain]
49
-
50
- assert_equal Encrypter.md5("#{@user.persistence_token}@#{@user.id}"), @request.cookies['challah-d635fd-v'][:value]
51
- assert_equal "test.dev", @request.cookies['challah-d635fd-v'][:domain]
52
- end
53
-
54
- should "be able to inspect the store" do
55
- session = Session.new(@request)
56
- session.store = SimpleCookieStore.new(session)
57
- session.persist = true
58
- session.user = @user
59
- session.save
60
-
61
- assert session.store.inspect =~ /<SimpleCookieStore:(.*?)>/, 'Does not match'
62
- end
63
-
64
- should "read cookies and detect tampered verification cookies" do
65
- assert_equal [], @request.cookies.keys
66
-
67
- session = Session.new(@request)
68
- session.store = SimpleCookieStore.new(session)
69
- session.persist = true
70
- session.user = @user
71
- session.save
72
-
73
- validation_cookie_val = Encrypter.md5("#{@user.persistence_token}@#{@user.id}")
74
- session_cookie_val = "#{@user.persistence_token}@#{@user.id}"
75
-
76
- assert_equal session_cookie_val, @request.cookies['challah-s'][:value]
77
- assert_equal session_cookie_val, session.store.send(:session_cookie)[:value]
78
- assert_equal validation_cookie_val, @request.cookies['challah-v'][:value]
79
- assert_equal validation_cookie_val, session.store.send(:validation_cookie)[:value]
80
-
81
- session.store.stubs(:validation_cookie).returns(validation_cookie_val)
82
- session.store.stubs(:session_cookie).returns(session_cookie_val)
83
-
84
- session2 = Session.new(@request)
85
- session2.persist = true
86
- session2.store = session.store
87
- session2.read
88
-
89
- assert_equal true, session2.store.send(:existing?)
90
- assert_equal true, session2.valid?
91
- assert_equal @user.id, session2.user_id
92
-
93
- session.store.stubs(:validation_cookie).returns('bad-value')
94
-
95
- session3 = Session.new(@request)
96
- session3.store = session.store
97
- session3.read
98
-
99
- assert_equal false, session3.store.send(:existing?)
100
- assert_equal false, session3.valid?
101
- end
102
-
103
- should "delete sessions from cookies" do
104
- session = Session.new(@request)
105
- session.store = SimpleCookieStore.new(session)
106
- session.user = @user
107
- session.persist = true
108
-
109
- session.save
110
-
111
- assert_equal true, session.valid?
112
- assert_equal @user, session.user
113
- assert_equal %w( challah-s challah-v ), @request.cookies.keys.sort
114
-
115
- session.destroy
116
-
117
- assert_equal false, session.valid?
118
- assert_equal nil, session.user
119
- assert_equal [], @request.cookies.keys.sort
120
- end
121
- end
122
- end
@@ -1,88 +0,0 @@
1
- class MockController
2
- include Challah::Controller
3
-
4
- attr_accessor :request, :session, :params
5
-
6
- def initialize()
7
- @request = MockRequest.new
8
- @session ||= {}
9
- @params ||= {}
10
- end
11
-
12
- def redirect_to(*args)
13
- # do nothing
14
- end
15
-
16
- def login_path
17
- "/login"
18
- end
19
-
20
- def logout_path
21
- "/logout"
22
- end
23
-
24
- def signin_path
25
- "/sign-in"
26
- end
27
-
28
- def signout_path
29
- "/sign-out"
30
- end
31
- end
32
-
33
- class MockRequest
34
- attr_accessor :cookie_jar, :session_options, :url
35
-
36
- class MockCookieJar < Hash
37
- def delete(key, options = {})
38
- super(key)
39
- end
40
- end
41
-
42
- def initialize
43
- @cookie_jar = MockCookieJar.new
44
- @session_options = { :domain => 'test.dev' }
45
- @url = "http://example.com/"
46
- end
47
-
48
- def cookies
49
- @cookie_jar
50
- end
51
-
52
- def cookies=(value)
53
- @cookie_jar = value
54
- end
55
-
56
- def remote_ip
57
- "8.8.8.8"
58
- end
59
-
60
- def user_agent
61
- "Some Cool Browser"
62
- end
63
- end
64
-
65
- class FakeProvider
66
- def self.save(record)
67
- set(record.fake_provider.merge(user_id: record.id))
68
- end
69
-
70
- def self.set(options = {})
71
- user_id = options.fetch(:user_id)
72
- uid = options.fetch(:uid, '')
73
- token = options.fetch(:token, '')
74
-
75
- Authorization.set({
76
- provider: :fake,
77
- user_id: user_id,
78
- uid: uid,
79
- token: token
80
- })
81
- end
82
-
83
- def self.valid?(record)
84
- record.fake_provider? and record.fake_provider.fetch(:token) == 'me'
85
- end
86
- end
87
-
88
- Challah.register_provider :fake, FakeProvider
data/test/test_helper.rb DELETED
@@ -1,47 +0,0 @@
1
- # Coverage reporting, needs to be loaded first to capture all code coverage stats
2
- require 'simplecov'
3
-
4
- # Configure Rails Environment
5
- ENV["RAILS_ENV"] ||= "test"
6
-
7
- require File.expand_path("../dummy/config/environment.rb", __FILE__)
8
-
9
- # Some other dependencies for testing w/ shoulda and factory girl
10
- require 'shoulda'
11
- require 'mocha/setup'
12
- require 'factory_girl'
13
- require 'factories'
14
- require 'rails/test_help'
15
-
16
- Rails.backtrace_cleaner.remove_silencers!
17
-
18
- # Load the challah libraries
19
- require 'challah'
20
- require 'challah/test'
21
-
22
- db_files = Dir["#{ Rails.root.join("db") }/**/*challah*.rb"]
23
-
24
- # Allow repeat tests to run, dropping the db after each suite run
25
- # (*not called on CI server)
26
- if db_files.size > 0
27
- `rake --rakefile #{ File.expand_path("../dummy/Rakefile", __FILE__) } db:test:purge`
28
-
29
- FileUtils.rm_rf(db_files)
30
- FileUtils.rm_rf(Rails.root.join("db", "schema.rb"))
31
- end
32
-
33
- `rake --rakefile #{ File.expand_path("../dummy/Rakefile", __FILE__) } challah_engine:install:migrations`
34
- `rake --rakefile #{ File.expand_path("../dummy/Rakefile", __FILE__) } db:migrate`
35
-
36
- Dir["#{ File.dirname(__FILE__) }/support/**/*.rb"].each { |f| require f }
37
-
38
- class ActiveSupport::TestCase
39
- ActiveRecord::Migration.check_pending!
40
-
41
- fixtures :all
42
-
43
- include FactoryGirl::Syntax::Methods
44
-
45
- self.use_transactional_fixtures = true
46
- end
47
-