devise-activegraph 3.0.0.alpha.1

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 (57) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +33 -0
  4. data/.rdebugrc +1 -0
  5. data/.travis.yml +40 -0
  6. data/CHANGELOG.md +42 -0
  7. data/Gemfile +41 -0
  8. data/LICENSE +20 -0
  9. data/README.md +113 -0
  10. data/Rakefile +35 -0
  11. data/Vagrantfile +22 -0
  12. data/devise-activegraph.gemspec +27 -0
  13. data/lib/devise-activegraph.rb +23 -0
  14. data/lib/devise/active_graph/version.rb +5 -0
  15. data/lib/devise/orm/active_graph.rb +6 -0
  16. data/lib/devise/orm/active_graph/counter_increment.rb +15 -0
  17. data/lib/devise/orm/active_graph/hook.rb +15 -0
  18. data/lib/generators/active_graph.rb +4 -0
  19. data/lib/generators/active_graph/devise_generator.rb +92 -0
  20. data/lib/generators/active_graph/templates/migration.rb.erb +10 -0
  21. data/provisioning/roles/common/tasks/main.yml +13 -0
  22. data/provisioning/roles/java/README.md +30 -0
  23. data/provisioning/roles/java/files/.gitkeep +0 -0
  24. data/provisioning/roles/java/files/webupd8.key.asc +13 -0
  25. data/provisioning/roles/java/handlers/.gitkeep +0 -0
  26. data/provisioning/roles/java/tasks/.gitkeep +0 -0
  27. data/provisioning/roles/java/tasks/main.yml +6 -0
  28. data/provisioning/roles/java/tasks/openjdk.yml +6 -0
  29. data/provisioning/roles/java/tasks/oracle.yml +12 -0
  30. data/provisioning/roles/java/tasks/webupd8.yml +13 -0
  31. data/provisioning/roles/java/templates/.gitkeep +0 -0
  32. data/provisioning/roles/java/vars/.gitkeep +0 -0
  33. data/provisioning/roles/java/vars/main.yml +2 -0
  34. data/provisioning/roles/neo4j/files/neo4j-server.properties +20 -0
  35. data/provisioning/roles/neo4j/files/neo4j.conf +6 -0
  36. data/provisioning/roles/neo4j/tasks/main.yml +45 -0
  37. data/provisioning/roles/neo4j/vars/main.yml +1 -0
  38. data/provisioning/vagrant.yml +17 -0
  39. data/test/generators/active_graph/devise_generator_test.rb +25 -0
  40. data/test/orm/active_graph.rb +52 -0
  41. data/test/overrides/authenticatable_test.rb +15 -0
  42. data/test/overrides/confirmable_test.rb +37 -0
  43. data/test/overrides/database_authenticatable_test.rb +20 -0
  44. data/test/overrides/devise_helper_test.rb +12 -0
  45. data/test/overrides/email_changed_test.rb +9 -0
  46. data/test/overrides/integration_test.rb +22 -0
  47. data/test/overrides/mapping_test.rb +11 -0
  48. data/test/overrides/trackable_test.rb +6 -0
  49. data/test/rails_app/app/active_graph/admin.rb +43 -0
  50. data/test/rails_app/app/active_graph/user.rb +57 -0
  51. data/test/rails_app/app/active_graph/user_on_engine.rb +45 -0
  52. data/test/rails_app/app/active_graph/user_on_main_app.rb +46 -0
  53. data/test/rails_app/app/active_graph/user_without_email.rb +32 -0
  54. data/test/rails_app/config/application.rb +32 -0
  55. data/test/rails_app/config/environment.rb +5 -0
  56. data/test/test_helper.rb +42 -0
  57. metadata +215 -0
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+ require 'integration/authenticatable_test'
3
+
4
+ class AuthenticationOthersTest < Devise::IntegrationTest
5
+ undef :test_sign_in_stub_in_xml_format
6
+ test 'sign in stub in xml format' do
7
+ get new_user_session_path(:format => 'xml')
8
+ assert_match '<?xml version="1.0" encoding="UTF-8"?>', response.body
9
+ assert_match /<user>.*<\/user>/m, response.body
10
+ assert_match '<email></email>', response.body
11
+ # slight/lame format different in XML.
12
+ #assert_match '<password nil="true"/></password>', response.body
13
+ assert_match '<password nil="true"/>', response.body
14
+ end
15
+ end
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+ require 'models/confirmable_test'
3
+
4
+ class ConfirmableTest < ActiveSupport::TestCase
5
+ def teardown
6
+ Timecop.return
7
+ end
8
+
9
+ # User#confirmation_sent_at is of DateTime type, user.confirmation_sent_at = Time.zone.today gives error.
10
+ undef :test_should_be_active_when_we_set_allow_unconfirmed_access_for_to_nil
11
+ test 'should be active when we set allow_unconfirmed_access_for to nil' do
12
+ swap Devise, allow_unconfirmed_access_for: nil do
13
+ user = create_user
14
+ user.confirmation_sent_at = Time.now
15
+ assert user.active_for_authentication?
16
+ end
17
+ end
18
+
19
+ undef :test_should_not_be_active_when_confirm_in_is_zero
20
+ test 'should not be active when confirm in is zero' do
21
+ Devise.allow_unconfirmed_access_for = 0.days
22
+ user = create_user
23
+ user.confirmation_sent_at = Time.now
24
+ refute user.active_for_authentication?
25
+ end
26
+
27
+ undef :test_should_not_be_active_when_confirm_period_is_set_to_0_days
28
+ test 'should not be active when confirm period is set to 0 days' do
29
+ Devise.allow_unconfirmed_access_for = 0.days
30
+ user = create_user
31
+
32
+ Timecop.freeze(Time.zone.today) do
33
+ user.confirmation_sent_at = Time.now
34
+ refute user.active_for_authentication?
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+ require 'digest/sha1'
3
+ require 'models/database_authenticatable_test'
4
+
5
+ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
6
+ undef :test_should_run_validations_even_when_current_password_is_invalid_or_blank
7
+ # looks like neo4j wants to run the password validation first
8
+ test 'should run validations even when current password is invalid or blank' do
9
+ user = UserWithValidation.create!(valid_attributes)
10
+ user.save
11
+ assert user.persisted?
12
+ assert_not user.update_with_password(:username => "")
13
+ assert_match "usertest", user.reload.username
14
+ assert_match "can't be blank", user.errors[:current_password].join
15
+ end
16
+
17
+ # the passowrd_changed? method returns false with activegraph on user.update(password: 'newpass', password_confirmation: 'newpass')
18
+ undef :test_should_notify_email_on_password_change_when_configured
19
+ undef :test_should_notify_previous_email_on_email_change_when_configured
20
+ end
@@ -0,0 +1,12 @@
1
+ require 'test_helper'
2
+ require 'helpers/devise_helper_test'
3
+ class DeviseHelperTest < Devise::IntegrationTest
4
+ setup :neo4j_i18n
5
+
6
+ private
7
+ def neo4j_i18n
8
+ I18n.backend.store_translations :en, {
9
+ :neo4j => { :models => { :user => "the user" } }
10
+ }
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'mailers/email_changed_test'
3
+
4
+ class EmailChangedTest < ActionMailer::TestCase
5
+ # the email_changed? method returns false with activegraph on u.update!(email: 'new-email@example.com')
6
+ undef :test_set_up_subject_from_I18n
7
+ undef :test_body_should_have_user_info
8
+ undef :test_subject_namespaced_by_model
9
+ end
@@ -0,0 +1,22 @@
1
+ require 'action_dispatch/testing/integration'
2
+
3
+ module IntegrationTestOveride
4
+
5
+ def create_user(options={})
6
+ @user ||= begin
7
+ user = User.create!(
8
+ username: 'usertest',
9
+ email: options[:email] || 'user@test.com',
10
+ password: options[:password] || '12345678',
11
+ password_confirmation: options[:password] || '12345678',
12
+ created_at: Time.now.utc
13
+ )
14
+ user.update_attribute(:confirmation_sent_at, options[:confirmation_sent_at]) if options[:confirmation_sent_at]
15
+ user.confirm unless options[:confirm] == false
16
+ user.lock_access! if options[:locked] == true
17
+ user
18
+ end
19
+ end
20
+ end
21
+
22
+ ActionDispatch::IntegrationTest.prepend IntegrationTestOveride
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+ require 'mapping_test'
3
+
4
+ class MappingTest < ActiveSupport::TestCase
5
+ undef :test_find_scope_works_with_single_table_inheritance
6
+
7
+ test 'find scope works with single table inheritance' do
8
+ assert_equal :user, Devise::Mapping.find_scope!(Class.new(User))
9
+ end
10
+
11
+ end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+ require 'models/trackable_test'
3
+
4
+ class TrackableTest < ActiveSupport::TestCase
5
+ undef :"test_update_tracked_fields!_should_not_persist_invalid_records"
6
+ end
@@ -0,0 +1,43 @@
1
+ require 'shared_admin'
2
+
3
+ class Admin
4
+ include ActiveGraph::Node
5
+ include SharedAdmin
6
+
7
+ ## Database authenticatable
8
+ property :email, type: String
9
+ property :encrypted_password, type: String
10
+
11
+ ## Recoverable
12
+ property :reset_password_token, type: String
13
+ property :reset_password_sent_at, type: DateTime
14
+
15
+ ## Rememberable
16
+ property :remember_created_at, type: DateTime
17
+
18
+ ## Confirmable
19
+ property :confirmation_token, type: String
20
+ property :confirmed_at, type: DateTime
21
+ property :confirmation_sent_at, type: DateTime
22
+ property :unconfirmed_email, type: String
23
+
24
+ ## Lockable
25
+ property :locked_at, type: DateTime
26
+
27
+ property :active, type: Boolean, default: false
28
+
29
+ property :created_at, type: DateTime
30
+ property :updated_at, type: DateTime
31
+
32
+ # def active?
33
+ # return self.active
34
+ # end
35
+
36
+ def to_xml(*args)
37
+ args = args.try(:first) || {}
38
+ attributes.except('confirmation_token').merge(password: nil).to_xml(args.merge({ root: 'admin' }))
39
+ end
40
+ end
41
+
42
+ AdminAdapter = Admin.to_adapter unless Admin.is_a?(OrmAdapter::Base)
43
+
@@ -0,0 +1,57 @@
1
+ require 'shared_user'
2
+
3
+ class User
4
+ include ActiveGraph::Node
5
+ include SharedUser
6
+
7
+ property :username, type: String
8
+ property :facebook_token, type: String
9
+ # property :id
10
+
11
+ ## Database authenticatable
12
+ property :email, type: String, default: ''
13
+ property :encrypted_password, type: String
14
+
15
+ ## Recoverable
16
+ property :reset_password_token, type: String
17
+ property :reset_password_sent_at, type: DateTime
18
+
19
+ ## Rememberable
20
+ property :remember_created_at, type: DateTime
21
+
22
+ ## Trackable
23
+ property :sign_in_count, type: Integer, default: 0
24
+ property :current_sign_in_at, type: DateTime
25
+ property :last_sign_in_at, type: DateTime
26
+ property :current_sign_in_ip, type: String
27
+ property :last_sign_in_ip, type: String
28
+
29
+ ## Confirmable
30
+ property :confirmation_token, type: String
31
+ property :confirmed_at, type: DateTime
32
+ property :confirmation_sent_at, type: DateTime
33
+ # property :unconfirmed_email, type: String # Only if using reconfirmable
34
+
35
+ ## Lockable
36
+ property :failed_attempts, type: Integer, default: 0
37
+ property :unlock_token, type: String
38
+ property :locked_at, type: DateTime
39
+
40
+ property :created_at, type: DateTime
41
+ property :updated_at, type: DateTime
42
+
43
+ def to_xml(*args)
44
+ args = args.try(:first) || {}
45
+ except = ['confirmation_token']
46
+ except << args[:except].to_s if args[:except]
47
+ except = [args[:force_except].to_s] if args[:force_except]
48
+ attributes.except(*except).merge(password: nil).to_xml(args.merge({ root: 'user' }))
49
+ end
50
+
51
+ def self.validations_performed
52
+ false
53
+ end
54
+ end
55
+
56
+ UserAdapter = User.to_adapter unless User.is_a?(OrmAdapter::Base)
57
+
@@ -0,0 +1,45 @@
1
+ require 'shared_user_without_omniauth'
2
+
3
+ class UserOnEngine
4
+ include ActiveGraph::Node
5
+ include SharedUserWithoutOmniauth
6
+
7
+ property :username, type: String
8
+ property :facebook_token, type: String
9
+
10
+ ## Database authenticatable
11
+ property :email, type: String, default: ''
12
+ property :encrypted_password, type: String, default: ''
13
+
14
+ ## Recoverable
15
+ property :reset_password_token, type: String
16
+ property :reset_password_sent_at, type: DateTime
17
+
18
+ ## Rememberable
19
+ property :remember_created_at, type: DateTime
20
+
21
+ ## Trackable
22
+ property :sign_in_count, type: Integer, default: 0
23
+ property :current_sign_in_at, type: DateTime
24
+ property :last_sign_in_at, type: DateTime
25
+ property :current_sign_in_ip, type: String
26
+ property :last_sign_in_ip, type: String
27
+
28
+ ## Confirmable
29
+ property :confirmation_token, type: String
30
+ property :confirmed_at, type: DateTime
31
+ property :confirmation_sent_at, type: DateTime
32
+ # property :unconfirmed_email, type: String # Only if using reconfirmable
33
+
34
+ ## Lockable
35
+ property :failed_attempts, type: Integer, default: 0
36
+ property :unlock_token, type: String
37
+ property :locked_at, type: DateTime
38
+
39
+ property :created_at, type: DateTime
40
+ property :updated_at, type: DateTime
41
+
42
+ def raw_confirmation_token
43
+ @raw_confirmation_token
44
+ end
45
+ end
@@ -0,0 +1,46 @@
1
+ require 'shared_user_without_omniauth'
2
+
3
+ class UserOnMainApp
4
+ include ActiveGraph::Node
5
+ include SharedUserWithoutOmniauth
6
+
7
+ property :username, type: String
8
+ property :facebook_token, type: String
9
+
10
+ ## Database authenticatable
11
+ property :email, type: String, default: ''
12
+ property :encrypted_password, type: String, default: ''
13
+
14
+ ## Recoverable
15
+ property :reset_password_token, type: String
16
+ property :reset_password_sent_at, type: DateTime
17
+
18
+ ## Rememberable
19
+ property :remember_created_at, type: DateTime
20
+
21
+ ## Trackable
22
+ property :sign_in_count, type: Integer, default: 0
23
+ property :current_sign_in_at, type: DateTime
24
+ property :last_sign_in_at, type: DateTime
25
+ property :current_sign_in_ip, type: String
26
+ property :last_sign_in_ip, type: String
27
+
28
+ ## Confirmable
29
+ property :confirmation_token, type: String
30
+ property :confirmed_at, type: DateTime
31
+ property :confirmation_sent_at, type: DateTime
32
+ # property :unconfirmed_email, type: String # Only if using reconfirmable
33
+
34
+ ## Lockable
35
+ property :failed_attempts, type: Integer, default: 0
36
+ property :unlock_token, type: String
37
+ property :locked_at, type: DateTime
38
+
39
+ property :created_at, type: DateTime
40
+ property :updated_at, type: DateTime
41
+
42
+ def raw_confirmation_token
43
+ @raw_confirmation_token
44
+ end
45
+
46
+ end
@@ -0,0 +1,32 @@
1
+ require "shared_user_without_email"
2
+
3
+ class UserWithoutEmail
4
+ include ActiveGraph::Node
5
+ include SharedUserWithoutEmail
6
+
7
+ property :username, type: String
8
+ property :facebook_token, type: String
9
+
10
+ ## Database authenticatable
11
+ property :email, type: String, default: ''
12
+ property :encrypted_password, type: String, default: ''
13
+
14
+ ## Recoverable
15
+ property :reset_password_token, type: String
16
+ property :reset_password_sent_at, type: DateTime
17
+
18
+ ## Rememberable
19
+ property :remember_created_at, type: DateTime
20
+
21
+ ## Trackable
22
+ property :sign_in_count, type: Integer, default: 0
23
+ property :current_sign_in_at, type: DateTime
24
+ property :last_sign_in_at, type: DateTime
25
+ property :current_sign_in_ip, type: String
26
+ property :last_sign_in_ip, type: String
27
+
28
+ ## Lockable
29
+ property :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
30
+ property :unlock_token, type: String # Only if unlock strategy is :email or :both
31
+ property :locked_at, type: DateTime
32
+ end
@@ -0,0 +1,32 @@
1
+ APP_ROOT = File.expand_path("#{DEVISE_PATH}/test/rails_app")
2
+ require "#{APP_ROOT}/config/boot"
3
+
4
+ require "action_controller/railtie"
5
+ require "action_mailer/railtie"
6
+ require "rails/test_unit/railtie"
7
+
8
+ Bundler.require :default, DEVISE_ORM
9
+
10
+ begin
11
+ require "#{DEVISE_ORM}/railtie"
12
+ rescue LoadError
13
+ end
14
+
15
+ require "devise"
16
+
17
+
18
+ require "tmpdir"
19
+
20
+ module RailsApp
21
+ class Application < Rails::Application
22
+ # Add additional load paths for your own custom dirs
23
+ config.root = APP_ROOT
24
+ config.autoload_paths.reject!{ |p| p =~ /\/app\/(\w+)$/ && !%w(controllers helpers views).include?($1) }
25
+ config.autoload_paths += [ File.expand_path("#{File.dirname(__FILE__)}/../app/#{DEVISE_ORM}") ]
26
+
27
+ # Configure sensitive parameters which will be filtered from the log file.
28
+ config.filter_parameters << :password
29
+
30
+ config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ # Load the rails application
2
+ require File.expand_path('../application', __FILE__)
3
+
4
+ # Initialize the rails application
5
+ RailsApp::Application.initialize!
@@ -0,0 +1,42 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ DEVISE_ORM = (ENV["DEVISE_ORM"] || :neo4).to_sym
3
+ DEVISE_PATH = ENV['DEVISE_PATH']
4
+
5
+ $:.unshift File.dirname(__FILE__)
6
+
7
+ puts "\n==> Devise.orm = #{DEVISE_ORM.inspect}"
8
+
9
+ require "rails_app/config/environment"
10
+ require "rails/test_help"
11
+ require "orm/#{DEVISE_ORM}"
12
+ require 'pry'
13
+
14
+ I18n.load_path << "#{DEVISE_PATH}/test/support/locale/en.yml"
15
+
16
+ require 'mocha/setup'
17
+ require 'timecop'
18
+ require 'webrat'
19
+ Webrat.configure do |config|
20
+ config.mode = :rails
21
+ config.open_error_files = false
22
+ end
23
+
24
+ Mocha::Configuration.allow(:stubbing_method_on_nil)
25
+
26
+ # Add support to load paths so we can overwrite broken webrat setup
27
+ $:.unshift "#{DEVISE_PATH}/test/support"
28
+ Dir["#{DEVISE_PATH}/test/support/**/*.rb"].each { |f| require f }
29
+
30
+ # Devise-neo4j test support
31
+ $:.unshift "#{File.dirname(__FILE__)}/support"
32
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
33
+
34
+ # For generators
35
+ require 'rails/generators/test_case'
36
+ require 'generators/devise/install_generator'
37
+ require 'generators/devise/controllers_generator'
38
+ require 'generators/devise/views_generator'
39
+ require 'test_models'
40
+ require 'overrides/integration_test'
41
+ require 'rails-controller-testing'
42
+ Rails::Controller::Testing.install